本文实例为大家分享了C++实现井字棋游戏的具体代码,供大家参考,具体内容如下
初步实现双玩家输入,操作游戏.
下一步将实现人机博弈.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
#include<iostream>
using namespace std;
void Player1(void); //玩家1输入(操作)函数
void Player2(void); //玩家2输入(操作)函数
void game_judge(void); //输赢判断
void game_start(void); //游戏开始
int rows = 3,cols = 3; //棋盘大小
bool win1_flag = false; //玩家1获胜标志位
bool win2_flag = false; //玩家2获胜标志位
char pieces[3][3] = {{' ',' ',' '},
{' ',' ',' '},
{' ',' ',' '}};; //初始化
void draw(void) //打印出棋盘
{
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
cout<<pieces[i][j];
if(j< cols-1)
cout<<" | ";
}
cout<<"\n";
if (i<rows-1)
cout <<"-----"<<endl;
}
cout <<"\n";
}
void game_start(void) //游戏开始
{
int n=0; //总3*3=9个输入位,用于判断是否填完
bool flag = false; //玩家切换标志位
cout << "游戏开始"<<endl;
while(n<9 & win1_flag == false & win2_flag == false) //未填完,未分出胜负则继续游戏
{
if(flag == false){ //切换到玩家1
cout << "玩家1输入:"<<endl;
Player1(); //玩家1输入棋子位置
flag = true; //下一步是玩家2
}
else{ //切换到玩家2
cout << "玩家2输入:"<<endl;
Player2(); //玩家2输入棋子位置
flag = false; //下一步是玩家1
}
game_judge(); //判断胜负
draw(); //打印出棋盘
n++; //棋盘又添了一枚棋子
}
}
void game_judge(void) //判断胜负
{
for(int i=0;i<rows;i++){
if(pieces[i][0] == pieces[i][1]& pieces[i][0] == pieces[i][2] & pieces[i][0] != ' ') //判断横方向满3个相同的棋子
{
if(pieces[i][0] == 'O') //判断是玩家1的棋子还是玩家2
win1_flag = true; //玩家1获胜
else
win2_flag = true; //玩家2获胜
}
if(pieces[0][i] == pieces[1][i]& pieces[1][i] == pieces[2][i] & pieces[0][i] != ' ') //判断纵方向满3个相同的棋子
{
if(pieces[0][i] == 'O') //判断是玩家1的棋子还是玩家2
win1_flag = true;
else
win2_flag = true;
}
if((pieces[0][0] == pieces[1][1]& pieces[1][1] == pieces[2][2] & pieces[0][0] != ' ') //判断斜方向满3个相同的棋子
|(pieces[0][2] == pieces[1][1]& pieces[1][1] == pieces[2][0] & pieces[2][0] != ' '))
{
if(pieces[1][1] == 'O') //判断是玩家1的棋子还是玩家2
win1_flag = true;
else
win2_flag = true;
}
}
}
void Player1(void)
{
int row0,col0;
cin>>row0>>col0; //玩家1输入位置
while(pieces[row0-1][col0-1] != ' ') //判断该位置是否已有棋子,或不存在
{
cout<<"该位置输入错误,请重新输入"<<endl;
cout<<"请输入行列数(1-3),以空格隔开:";
cin >>row0>>col0; //重新输入位置
}
pieces[row0-1][col0-1] = 'O'; //棋盘中放置玩家1棋子
}
void Player2(void)
{
int row1,col1;
cin>>row1>>col1; //玩家1输入位置
while(pieces[row1-1][col1-1] != ' ') //判断该位置是否已有棋子,或不存在
{
cout<<"该位置输入错误,请重新输入"<<endl;
cout<<"请输入行列数(1-3),以空格隔开:";
cin >>row1>>col1; //重新输入位置
}
pieces[row1-1][col1-1] = 'X'; //棋盘中放置玩家2棋子
}
int main(int argc,char** argv)
{
cout<<"游戏加载中"<<endl;
draw(); //打印初始棋盘
game_start(); //开始游戏
if(win1_flag == true) //玩家1获胜
cout<<"玩家1获胜!"<<endl;
if(win2_flag == true) //玩家2获胜
cout<<"玩家2获胜!"<<endl;
if(win1_flag == win2_flag) //均未获胜,平局
cout<<"平局!"<<endl;
return 0;
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/weixin_42913193/article/details/107645042








发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。