我写了(有点帮助)一个tic tac toe程序.但是程序不使用数组来保存移动但使用char变量.这意味着有很多重复的代码.我想使用数组但是虽然我理解它的概念,但我很难弄清楚如何实现它.我使用什么类型的数组?而且我还假设大部分代码(检查有效移动,检查胜利等等)都会改变.
#include <iostream>
using namespace std;
int main()
{
char cell1 = '1';
char cell2 = '2';
char cell3 = '3';
char cell4 = '4';
char cell5 = '5';
char cell6 = '6';
char cell7 = '7';
char cell8 = '8';
char cell9 = '9';
char player = '1';
char mark;
bool gameover = false;
do
{
cout << cell1 <<"|"<< cell2 << "|" << cell3 << endl;
cout <<"-+-+-"<< endl;
cout << cell4 <<"|"<< cell5 << "|" << cell6 << endl;
cout <<"-+-+-"<< endl;
cout << cell7 <<"|"<< cell8 << "|" << cell9 << endl;
cout <<"-+-+-"<< endl;
//printBoard();
//Handle player marker
if (player == '1')
{
mark = 'X';
}
else
{
mark = 'O';
}
bool invalid;
do
{
cout << "Player "<<player<< ": \n";
char move;
cin >> move;
invalid = false;
//Validate move
if (move == '1' && cell1 == '1')
{
cell1 = mark;
}
else if (move == '2' && cell2 == '2')
{
cell2 = mark;
}
else if (move == '3' && cell3 == '3')
{
cell3 = mark;
}
else if (move == '4' && cell4 == '4')
{
cell4 = mark;
}
else if (move == '5' && cell5 == '5')
{
cell5 = mark;
}
else if (move == '6' && cell6 == '6')
{
cell6 = mark;
}
else if (move == '7' && cell7 == '7')
{
cell7 = mark;
}
else if (move == '8' && cell8 == '8')
{
cell8 = mark;
}
else if (move == '9' && cell9 == '9')
{
cell9 = mark;
}
else
{
cout <<" Invalid Move"<<endl;;
invalid = true;
}
}
while (invalid);
//Check for winning & draw conditions
bool draw = false;
if (cell1 != '1')
{
if (cell1 == cell2 && cell1 == cell3)
{
gameover = true;
}
else if (cell1 == cell4 && cell1 == cell7)
{
gameover = true;
}
}
if (cell9 != '9')
{
if (cell9 == cell3 && cell9 == cell6)
{
gameover = true;
}
else if (cell9 == cell8 && cell9 == cell7)
{
gameover = true;
}
}
if (cell5 != '5')
{
if (cell5 == cell2 && cell5 == cell8)
{
gameover = true;
}
else if (cell5 == cell4 && cell5 == cell6)
{
gameover = true;
}
else if (cell5 == cell1 && cell5 == cell9)
{
gameover = true;
}
else if (cell5 == cell3 && cell5 == cell7)
{
gameover = true;
}
}
// Check for draw conditions
if ( cell1 != '1' && cell2 != '2' && cell3 != '3' &&
cell4 != '4' && cell5 != '5' && cell6 != '6' &&
cell7 != '7' && cell8 != '8' && cell9 != '9')
{
cout <<" Its a draw"<<endl;
gameover = true;
draw = true;
}
if (gameover)
{
if (draw == false)
{
cout << "Player "<< player << " wins!"<<endl;
cout <<endl;
}
//printBoard();
cout << cell1 <<"|"<< cell2 << "|" << cell3 << endl;
cout <<"-+-+-"<< endl;
cout << cell4 <<"|"<< cell5 << "|" << cell6 << endl;
cout <<"-+-+-"<< endl;
cout << cell7 <<"|"<< cell8 << "|" << cell9 << endl;
cout <<"-+-+-"<< endl;
cout <<endl;
cout<< "Play again? (y/n)"<< endl;
char playAgain;
cin >> playAgain;
//Reset board if user wants to play again
if (playAgain == 'y')
{
gameover = false;
cell1 = '1';
cell2 = '2';
cell3 = '3';
cell4 = '4';
cell5 = '5';
cell6 = '6';
cell7 = '7';
cell8 = '8';
cell9 = '9';
player = '1';
}
}
else
{
//Alternate players
if (player == '1')
{
player = '2';
}
else
{
player = '1';
}
}
}
while (gameover == false);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用什么类型的数组?
你会想要使用二维数组(3 x 3).因此,不是拥有cell1,cell2,... cell9,而是拥有单个(二维)数组,如下所示:
cell[3][3];
Run Code Online (Sandbox Code Playgroud)
第一组括号表示行(水平),第二组括号表示列(垂直).
以下是2d数组将如何替换您的9个变量:
cell1 --> cell[0][0]
cell2 --> cell[0][1]
cell3 --> cell[0][2]
cell4 --> cell[1][0]
cell5 --> cell[1][1]
cell6 --> cell[1][2]
cell7 --> cell[2][0]
cell8 --> cell[2][1]
cell9 --> cell[2][2]
Run Code Online (Sandbox Code Playgroud)
而且我还假设大部分代码(检查有效移动,检查胜利等等)都会改变.
然后,只要您将所有单元格#变量更改为相应的2d数组插槽,您的程序就可以正常工作.
| 归档时间: |
|
| 查看次数: |
6957 次 |
| 最近记录: |