无法更改int变量值(Tic-Tac-Toe)



这是playerTurn方法。

public static void playerTurn(int player) 
{
if (player == 1)
{
player = 2;
}
else if(player == 2) { player = 1; }
}

为什么玩家在调用playerTurn方法时不会改变。我试着更改player 1的初始值,并篡改if-else语句,但没有成功。我还是C#的新手,所以我可能在其他地方做错了什么,但我不确定还能尝试什么。

static void Main(string[] args) //MAIN METHOD
{
int player = 1;
int inputNum;
int turns = 0;
Console.WriteLine("Player1: X");
Console.WriteLine("Player2: O");
Console.WriteLine("n");
SetField();
openMessage(player);
string input = Console.ReadLine();

if (int.TryParse(input, out inputNum))
{
inputNum = int.Parse(input);
turns++;
}
else 
{
Console.WriteLine("Please enter a valid input!");
}
switch (player) 
{
case 1:switch (inputNum) 
{ 
case 1: playField[0, 0] = playerSign(player); break;
case 2: playField[0, 1] = playerSign(player); break;
case 3: playField[0, 2] = playerSign(player); break;
case 4: playField[1, 0] = playerSign(player); break;
case 5: playField[1, 1] = playerSign(player); break;
case 6: playField[1, 2] = playerSign(player); break;
case 7: playField[2, 0] = playerSign(player); break;
case 8: playField[2, 1] = playerSign(player); break;
case 9: playField[2, 2] = playerSign(player); break;
}
break;
case 2:
switch (inputNum)
{
case 1: playField[0, 0] = playerSign(player); break;
case 2: playField[0, 1] = playerSign(player); break;
case 3: playField[0, 2] = playerSign(player); break;
case 4: playField[1, 0] = playerSign(player); break;
case 5: playField[1, 1] = playerSign(player); break;
case 6: playField[1, 2] = playerSign(player); break;
case 7: playField[2, 0] = playerSign(player); break;
case 8: playField[2, 1] = playerSign(player); break;
case 9: playField[2, 2] = playerSign(player); break;
}
break;
}
SetField();
Console.WriteLine(player);
playerTurn(player);
//player 1 turn end
Console.WriteLine(player);
openMessage(player);
Console.ReadKey();
}

参数通过值传递给此方法。因此,它只获取值的副本。返回新值。此外,您可以简化playerTurn方法:

public static int playerTurn(int player)
{
return 3 - player; // Switches player from 1 to 2 or vice-versa.
}

CCD_ 1。CCD_ 2。称之为

player = playerTurn(player);

您可以通过一些数学运算以更简单的方式获取索引:

playField[(inputNum - 1) / 3, (inputNum - 1) % 3] = playerSign(player);

/执行整数除法,将结果截断为下一个较低的整数。CCD_ 4产生该除法的余数。

打开player没有意义,因为这两种情况完全相同。这允许您仅用一行代码替换31行代码。


请注意,您的游戏没有循环。因此,它将在第一个玩家移动后停止。

此方法:

public static void playerTurn(int player) 
{
if (player == 1)
{
player = 2;
}
else if(player == 2) { player = 1; }
}

获取传入内容的副本并修改该副本。您需要做的是通过引用传递值:

public static void playerTurn(ref int player)
...

这样,传递给playerTurn方法的任何变量都会被直接修改。

最新更新