【发布时间】:2021-06-18 15:17:07
【问题描述】:
这是 playerTurn 方法。
public static void playerTurn(int player)
{
if (player == 1)
{
player = 2;
}
else if(player == 2) { player = 1; }
}
为什么调用 playerTurn 方法时播放器不会改变。我尝试更改播放器 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();
}
【问题讨论】:
-
您将
player的副本传递给playerTurn,因此您正在修改副本。 -
您应该阅读值类型和引用类型之间的区别。忽略任何关于“哦,值类型在堆栈上”的内容,专注于两个类型分组之间的赋值有何不同
标签: c# methods tic-tac-toe