我目前正在开发一个井字棋游戏。每次播放器或计算机移动时,我需要制作一个更新的井字棋板(显示“X”和“O”)。到目前为止,我已经设法制作电路板,但我不知道如何有效地将用户的输入变成“X”。我做的第一件事是垃圾邮件是这样的:C++:如何将用户输入并将其放入井字棋板
if(playerChoice == 1)
block[0][0] = "X";
if(playerChoice == 2)
block[0][1] = "X";
if(playerChoice == 3)
block[0][2] = "X";
if(playerChoice == 4)
block[1][0] = "X";
if(playerChoice == 5)
block[1][1] = "X";
if(playerChoice == 6)
block[1][2] = "X";
if(playerChoice == 7)
block[2][0] = "X";
if(playerChoice == 8)
block[2][1] = "X";
if(playerChoice == 9)
block[2][2] = "X";
虽然它的工作原理,它可能是最糟糕的格式。 (现在,它有效地把玩家的选择到正确的正方形。)
下面是完整的代码(这不是结束,甚至可能没有工作。):
#include <iostream>
#include <ctime>
#include <cstdio>
#include <cstdlib>
using namespace std;
int main()
{
//random starting turn chooser
int turnFirst; //variable to decide whoever goes first
int computerRandomPick; //variable to decide which grid the computer will place "O"
srand(time(0));
turnFirst = rand()% (2 - 1 + 1)+1;//generates starting person.
computerRandomPick = rand()% (9 - 1 + 1)+1;//computer first random pick
//board arrays
string block[3][3];
block [0][0] = {" "};
block [0][1] = {" "};
block [0][2] = {" "};
block [1][0] = {" "};
block [1][1] = {" "};
block [1][2] = {" "};
block [2][0] = {" "};
block [2][1] = {" "};
block [2][2] = {" "};
//player interaction
int playerChoice;
//BEGIN OF PROGRAM
cout << "Welcome to Tic Tac Toe!" <<endl<< endl;
if(turnFirst == 1)//player first
{
cout << "Please choose a grid to place (X): "<<endl<<endl;
cout << " 1 | 2 | 3"<< endl;
cout << " -----+-----+-----" << endl;
cout << " 4 | 5 | 6" << endl;
cout << " -----+-----+-----" << endl;
cout << " 7 | 8 | 9" << endl;
cout << " -----+-----+-----" << endl<<endl;
cin >> playerChoice;
system("CLS");
}
if(playerChoice == 1)
block[0][0] = "X";
if(playerChoice == 2)
block[0][1] = "X";
if(playerChoice == 3)
block[0][2] = "X";
if(playerChoice == 4)
block[1][0] = "X";
if(playerChoice == 5)
block[1][1] = "X";
if(playerChoice == 6)
block[1][2] = "X";
if(playerChoice == 7)
block[2][0] = "X";
if(playerChoice == 8)
block[2][1] = "X";
if(playerChoice == 9)
block[2][2] = "X";
if(turnFirst == 2)//computer first
{
system("CLS");
cout << "The computer picked: " <<endl<<endl;
}
if(computerRandomPick == 1)
block[0][0] = "O";
if(computerRandomPick == 2)
block[0][1] = "O";
if(computerRandomPick == 3)
block[0][2] = "O";
if(computerRandomPick == 4)
block[1][0] = "O";
if(computerRandomPick == 5)
block[1][1] = "O";
if(computerRandomPick == 6)
block[1][2] = "O";
if(computerRandomPick == 7)
block[2][0] = "O";
if(computerRandomPick == 8)
block[2][1] = "O";
if(computerRandomPick == 9)
block[2][2] = "O";
//Game Board.
cout << " " << block[0][0] << " | " << block [0][1] << " | " << block [0][2] << endl;
cout << " -----+-----+-----" << endl;
cout << " " << block [1][0] << " | " << block [1][1] << " | " << block [1][2] << endl;
cout << " -----+-----+-----" << endl;
cout << " " << block [2][0] << " | " << block [2][1] << " | " << block [2][2] << endl;
cout << " -----+-----+-----" << endl;
return 0;
}
://codereview.stackexchange 所以,你可以为优化。 COM)。有一百万种方法可以改善这一点;并且在C和C++中不缺少Tic-Tac-Toe示例以便从那里学习。但最重要的是,你需要考虑消除重复;为什么要编写相同的代码来放置x和O给定数字两次,当您可以创建一个方法或函数来传递一个数字并将“X”或“O”作为参数?开始在一半的地方切割东西...... – HostileFork 2014-10-03 03:56:37
使用更多功能。一般的规则是,如果你的函数超过25行错误,你可能做错了。 (这不是一个硬性规则,但你应该对任何比这个更长的功能有很强的理由) – o11c 2014-10-03 04:38:35
请注意,如果你想获得想法,在这里有许多问题标记[tag:tic-tac-toe] (现在,你的是其中之一)。 – HostileFork 2014-10-03 06:11:56