C++:如何获取用户输入并将其放入Tic-Tac-Toe板中
C++: How to take user input and put it into Tic Tac Toe board
我目前正在开发一款井字游戏。我需要制作一个Tic-Tac-Toe板,每次玩家或电脑移动时都会更新(显示"X"answers"O")。到目前为止,我已经成功地制作了这个板,但我不知道如何有效地将用户的输入转换为"X"。我做的第一件事就是发这样的垃圾邮件:
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;
}
假定块[3][3]声明为:
char block[3][3];
playerChoice可以是1-9。因此,您可以优化为:
playerChoice --; // to make it 0-8
block[playerChoice / 3][playerChoice %3] = 'X'; // instead of "X"
这里有一个想法:您可以使用网格的规则结构来简化问题。
如果playerChoice
介于1和3之间,则第一个索引为0。如果在4到6之间,则索引为1;如果在7到9之间,则指数为2。这将输入细分为3组,每组3个。实际上,索引是带整数除法的(playerChoice - 1)/3
。
第二个索引每3个选项重复一次。这意味着使用模量可能会有所帮助。实际上,索引是(playerChoice - 1) % 3
。
您可以将整个代码简化为
block[(playerChoice-1)/3][(playerChoice-1)%3] = "X";
或者一些变体。
相关文章:
- 如何在TIC TAC TOE中检查获胜者,以及如何不让两个玩家进入同一位置
- 如何在C 的TIC-TAC-TOE中展示获胜者
- Turbo我试图制作C TIC TAC TOE游戏,但没有获得正确的输出
- C TIC-TAC-TOE AI不起作用
- C TIC TAC TOE游戏.开关空间而不是错误消息
- Tic-Tac-Toe之前应为主要表达式
- TIC TAC TOE编程帮助C
- TIC TAC TOE游戏:如何循环
- 通过C 中的2D TIC-TAC-TOE阵列迭代的好方法
- 生成Tic-Tac-Toe树的节点Minimax
- 如何修复在C++中回放Tic-Tac-Toe游戏时前三个回合的隐藏
- 如何在我的c版本Tic-Tac-Toe中修复我的输入验证
- 数组在Tic-Tac-Toe中的行为不符合预期
- Tic-Tac-Toe阵列错误
- Tic-Tac-Toe使用C++和多维数组
- Tic Tac Toe麻烦(一些逻辑错误)
- 在Tic-Tac-Toe程序中使用数组
- C++:如何获取用户输入并将其放入Tic-Tac-Toe板中
- Tic-Tac-Toe C++链接错误ld返回1退出状态
- C++ Tic-Tac-Toe using classes