C# 当我将程序放入不同的方法中,并将它们组合成一个循环时,它们不会';我们不能正确地相互阅读。有人知道为什么吗?
我正在做一个井字游戏,这是我的部分代码。 当我将我的所有方法放在一个循环中时,我的switch语句并没有读取用户的输入(例如,如果我想在6上放置一个片段),而是将其读取为“playerMove”,这会创建一个无效选项。有人能看出我的错误吗?Idk当我转到循环中的下一个方法时,如何在用户输入时保持PlayerMove。谢谢C# 当我将程序放入不同的方法中,并将它们组合成一个循环时,它们不会';我们不能正确地相互阅读。有人知道为什么吗?,c#,loops,methods,C#,Loops,Methods,我正在做一个井字游戏,这是我的部分代码。 当我将我的所有方法放在一个循环中时,我的switch语句并没有读取用户的输入(例如,如果我想在6上放置一个片段),而是将其读取为“playerMove”,这会创建一个无效选项。有人能看出我的错误吗?Idk当我转到循环中的下一个方法时,如何在用户输入时保持PlayerMove。谢谢 while(gameDone == false) { DrawBoard ("1", "2", "3", &
while(gameDone == false)
{
DrawBoard ("1", "2", "3", "4", "5", "6", "7", "8", "9");
GetSpaceOne("playerOne");
PlacePieceOne ("1", "2", "3", "4", "5", "6", "7", "8", "9", "playerOne");
DrawBoard ("1", "2", "3", "4", "5", "6", "7", "8", "9");
GetSpaceTwo("playerTwo");
PlacePieceTwo ("1", "2", "3", "4", "5", "6", "7", "8", "9", "playerTwo");
}
private static void DrawBoard (string spaceOne, string spaceTwo, string spaceThree, string spaceFour, string spaceFive, string spaceSix, string spaceSeven, string spaceEight, string spaceNine)
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("| " + spaceOne + " | " + spaceTwo + " | " + spaceThree + " |");
Console.WriteLine("|---|---|---|");
Console.WriteLine("| " + spaceFour + " | " + spaceFive + " | " + spaceSix + " |");
Console.WriteLine("|---|---|---|");
Console.WriteLine("| " + spaceSeven + " | " + spaceEight + " | " + spaceNine + " |");
Console.ResetColor();
}
private static string GetSpaceOne (string playerOne)
{
string playerOne;
Console.WriteLine("");
Console.Write("Player One (1-9): ");
playerOne = Convert.ToString(Console.ReadLine());
}
private static void PlacePieceOne (string spaceOne, string spaceTwo, string spaceThree, string spaceFour, string spaceFive, string spaceSix, string spaceSeven, string spaceEight, string spaceNine, string playerOneMove)
{
Console.WriteLine(playerOneMove);
switch (playerOneMove)
{
case "1":
spaceOne = spaceOne.Replace("1", "X");
break;
case "2":
spaceTwo = spaceTwo.Replace("2", "X");
break;
case "3":
spaceThree = spaceThree.Replace("3", "X");
break;
case "4":
spaceFour = spaceFour.Replace("4", "X");
break;
case "5":
spaceFive = spaceFive.Replace("5", "X");
break;
case "6":
spaceSix = spaceSix.Replace("6", "X");
break;
case "7":
spaceSeven = spaceSeven.Replace("7", "X");
break;
case "8":
spaceEight = spaceEight.Replace("8", "X");
break;
case "9":
spaceNine = spaceNine.Replace("9", "X");
break;
default:
Console.WriteLine("Invalid Option. Please try again");
break;
}
}
PlayerMove有一个局部作用域,这意味着它只存在于您声明它的方法中。您应该从中返回值,并将其分配给调用循环中的变量 您还需要将其作为参数传递给下一个方法。您正在传递字符串“PlayerMove”。您不需要将参数传递给第一步中采用的方法 例如:
while(gameDone == false)
{
DrawBoard ("1", "2", "3", "4", "5", "6", "7", "8", "9");
var playerOneMove = GetSpaceOne();
PlacePieceOne ("1", "2", "3", "4", "5", "6", "7", "8", "9", playerOneMove);
...
private static string GetSpaceOne ()
{
string playerOneMove;
Console.WriteLine("");
Console.Write("Player One (1-9): ");
playerOneMove = Convert.ToString(Console.ReadLine());
return playerOneMove;
}
我看到这里有很多问题
private static void PlacePieceOne (string spaceOne, string spaceTwo, string spaceThree, string spaceFour, string spaceFive, string spaceSix, string spaceSeven, string spaceEight, string spaceNine, string playerOneMove)
函数参数中的playerMove
与
string playerOneMove;
Console.WriteLine("");
Console.Write("Player One (1-9): ");
playerOneMove = Convert.ToString(Console.ReadLine());
在您的PlacePieceOne中无法访问GetSpaceOne
中的PlayerMove
因此,函数PlacePieceOne
中的playerMove
的值为
playeron
如此处所述
PlacePieceOne ("1", "2", "3", "4", "5", "6", "7", "8", "9", "playerOne");
此外,您正在尝试访问函数/scoppe中的spaceOne
、spaceTwo
、…spaceNine
,并且您正在不同的范围内访问它
使用您的函数为tictac提供更好的解决方案
private static string spaceOne = "1";
private static string spaceTwo = "2";
.... till spaceNine;
while(gameDone == false)
{
DrawBoard();
GetPlayerOneMove();
DrawBoard();
GetPlayerTwoMove();
}
private static void DrawBoard()
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("| " + spaceOne + " | " + spaceTwo + " | " + spaceThree + " |");
Console.WriteLine("|---|---|---|");
Console.WriteLine("| " + spaceFour + " | " + spaceFive + " | " + spaceSix + " |");
Console.WriteLine("|---|---|---|");
Console.WriteLine("| " + spaceSeven + " | " + spaceEight + " | " + spaceNine + " |");
Console.ResetColor();
}
private static void GetPlayerOneMove()
{
bool playerMoveValid = false;
while(!playerMoveValid)
{
string playerOne;
Console.WriteLine("");
Console.Write("Player One (1-9): ");
playerOne = Convert.ToString(Console.ReadLine());
switch (playerOne)
{
case "1":
if(spaceOne == "1")
{
spaceOne = spaceOne.Replace("1", "X");
break;
playerMoveValid = true;
}
else
{
playerMoveValid = false;
}
case "2":
spaceTwo = spaceTwo.Replace("2", "X");
break;
case "3":
spaceThree = spaceThree.Replace("3", "X");
break;
case "4":
spaceFour = spaceFour.Replace("4", "X");
break;
case "5":
spaceFive = spaceFive.Replace("5", "X");
break;
case "6":
spaceSix = spaceSix.Replace("6", "X");
break;
case "7":
spaceSeven = spaceSeven.Replace("7", "X");
break;
case "8":
spaceEight = spaceEight.Replace("8", "X");
break;
case "9":
spaceNine = spaceNine.Replace("9", "X");
break;
default:
Console.WriteLine("Invalid Option. Please try again");
break;
}
}
}
private static void GetPlayerTwoMove()
{
string playerTwo;
Console.WriteLine("");
Console.Write("Player Two(1-9): ");
playerTwo= Convert.ToString(Console.ReadLine());
switch (playerTwo)
{
case "1":
spaceOne = spaceOne.Replace("1", "O");
break;
case "2":
spaceTwo = spaceTwo.Replace("2", "O");
break;
case "3":
spaceThree = spaceThree.Replace("3", "O");
break;
case "4":
spaceFour = spaceFour.Replace("4", "O");
break;
case "5":
spaceFive = spaceFive.Replace("5", "O");
break;
case "6":
spaceSix = spaceSix.Replace("6", "O");
break;
case "7":
spaceSeven = spaceSeven.Replace("7", "O");
break;
case "8":
spaceEight = spaceEight.Replace("8", "O");
break;
case "9":
spaceNine = spaceNine.Replace("9", "O");
break;
default:
Console.WriteLine("Invalid Option. Please try again");
break;
}
}
为每个switch/case
语句添加一个检查器
if(空格{numberOfEnteredValue}=={valueOfThatSpace})
这意味着spaceOne
/spaceTwo
等尚未更改为X
或O
,spaceOne==1
您不会从GetSpaceOne
返回任何内容,并且在调用该方法时也不会对结果执行任何操作。你应该得到一个警告,上面写着C4715。。。并非所有控制路径都返回值。
对于GetSpaceOne
。尝试使用锯齿状/多维数组重写此值,它将删除约90%的代码。添加了一个关于访问变量的方式有何问题的答案和解释,该方法有效,但不会在实际板中替换。我必须在DrawBoard方法中更改什么才能修复它?ThanksI做了私有静态字符串spaceOne-spaceNine,但我的板没有显示该字符串values@JaadQadadeh,我忘了提到添加初始值,我将更新我的答案。@JaadQadadeh,更新了它,如果它有帮助,您可以将它标记为答案和帮助,谢谢,但您能详细说明我如何添加检查器吗?我是c#的新手。感谢您的帮助,它将停止覆盖以前的值。我会再次更新答案。