这是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方法的任何变量都会被直接修改。