在编程方面,我还是个傻瓜,决定我想测试自己的极限并制作井字游戏。我敢肯定,有很多更好的方法可以做我想做的事情,但是我仍然在学习。在测试到目前为止的内容时,我一直遇到这个问题,要求用户输入位置(位置为1-9,这些位置最终将用于告诉程序将用户放置在哪里X或O)。我现在有2个班级,主要班级和董事会班。通过放置停止标记进行一些调试之后,我意识到当我从我的主类的board类中调用一个方法时,放入该方法的参数中的数据不会继续
主类:
class Program {
static void Main(string[] args) {
Board board = new Board();
bool hasWon = false;
string p1;
string p2;
string pos;
int turn = 2;
Console.Write("Please enter a name for player 1: ");
p1 = Console.ReadLine();
Console.Clear();
Console.Write("Please enter a name for player 2: ");
p2 = Console.ReadLine();
Console.Clear();
while (hasWon == false) {
if (turn % 2 == 0) {
Console.WriteLine(p1 + "'s Turn / You are X's");
board.DisplayBoard();
Console.WriteLine();
Console.WriteLine("Please selecet a position: ");
board.SetPos(Console.ReadLine());
Console.WriteLine("Position correctly set: " + board.GetPos());
} else {
Console.WriteLine(p2 + "'s Turn / You are O's");
board.DisplayBoard();
Console.WriteLine();
Console.WriteLine("Please selecet a position: ");
board.SetPos(Console.ReadLine());
Console.WriteLine("Position correctly set: " + board.GetPos());
}
}
}
}
董事会课程:
public class Board {
private string pos = "";
private string badPos = "";
public void DisplayBoard() {
Console.WriteLine(" 1 | 2 | 3 ");
Console.WriteLine("-----------");
Console.WriteLine(" 4 | 5 | 6");
Console.WriteLine("-----------");
Console.WriteLine(" 7 | 8 | 9 ");
}
public void SetPos(string pos) {
if (this.pos.Length > 1 || this.pos.Length < 1) {
this.pos = badPos;
IncorrectPosition();
} else if (!this.pos.Contains("1") || this.pos.Contains("2") || this.pos.Contains("3") || this.pos.Contains("4") ||
this.pos.Contains("5") || this.pos.Contains("6") || this.pos.Contains("7") || this.pos.Contains("8") ||
this.pos.Contains("9")) {
this.pos = badPos;
IncorrectPosition();
} else {
this.pos = pos;
}
}
public string GetPos() {
return pos;
}
/*public void setTurn(int turn) {
turn = this.turn;
}*/
private void IncorrectPosition() {
Console.Clear();
Console.WriteLine(badPos + " is not a correct position");
Console.Write("Please enter a position: ");
SetPos(Console.ReadLine());
}
}
更具体地说,该问题发生在Main类中。当要求用户输入位置时,他们通过输入数字1-9进行输入。在Board类中,有一种名为SetPos的方法,该方法将用于确定稍后在开发X或O时将其放置在何处。但是,我还有一种方法可以确保用户输入的数字是1-9。我不想将其转换为整数,我希望其保留为字符串。每当用户为该职位输入任何内容时,都不会继承任何内容。当使用停止标记并逐步执行程序时,在监视列表中,我可以看到将哪些值分配给了哪些变量,我的pos变量确实得到了分配给我输入的内容,但随后丢失了,因此重复SetPos和IncorrectPosition。在控制台上显示IncorrectPosition时,它会显示
位置不正确
请输入职位:
在SetPos()方法中,我尝试了一些方法来解决此问题,其中之一是我添加了badPos变量,这意味着如果if语句中的前两件事中的任何一个为true,则该值为通过我的主类中的SetPos()方法传递的代码将分配给 badPos ,但是当打印到控制台时,屏幕上没有显示任何值,这是另一种告诉方法我没有任何价值。
我不确定如何解决此问题,非常感谢您的帮助!