井字棋游戏代码井字棋游戏代码
#include
#include
#include
using namespace std;
char r='d';
char f='d';
int jiru1[9]={0}; //人人游戏时用来记录是否在此处下过棋
int i=1;
char game[3][3]; //用来下棋
int x,y;
int a[8]; //人机游戏时记录每行,列,斜行有多少子
int b[8]; //人机游戏时记录机器每行,列,斜行有多少子
int c[8]; //人机游戏时记录人每行,列,斜行有...
井字棋游戏代码
#include
#include
#include
using namespace std;
char r='d';
char f='d';
int jiru1[9]={0}; //人人游戏时用来记录是否在此处下过棋
int i=1;
char game[3][3]; //用来下棋
int x,y;
int a[8]; //人机游戏时记录每行,列,斜行有多少子
int b[8]; //人机游戏时记录机器每行,列,斜行有多少子
int c[8]; //人机游戏时记录人每行,列,斜行有多少子
int jiru[3][3]={0}; //人机游戏时用来记录是否在此处下过棋
int qi[3][3]={0}; //人人游戏时用来记录机器是否在此处下过棋
int ren[3][3]={0}; //人人游戏时用来记录人是否在此处下过棋
void zhuanhua(int t) //把输入的1~9数字转化成坐标
{
int h,g;
h=t%3;
g=(t-h)/3;
x=g;
y=h-1;
}
void suan() //人机游戏时计算每行,列,斜行有多少子
{
a[1]=jiru[0][0]+jiru[0][1]+jiru[0][2];
a[2]=jiru[1][0]+jiru[1][1]+jiru[1][2];
a[3]=jiru[2][0]+jiru[2][1]+jiru[2][2];
a[4]=jiru[0][0]+jiru[1][0]+jiru[2][0];
a[5]=jiru[0][1]+jiru[1][1]+jiru[2][1];
a[6]=jiru[0][2]+jiru[1][2]+jiru[2][2];
a[7]=jiru[0][0]+jiru[1][1]+jiru[2][2];
a[8]=jiru[0][2]+jiru[1][1]+jiru[2][0];
b[1]=qi[0][0]+qi[0][1]+qi[0][2];
b[2]=qi[1][0]+qi[1][1]+qi[1][2];
b[3]=qi[2][0]+qi[2][1]+qi[2][2];
b[4]=qi[0][0]+qi[1][0]+qi[2][0];
b[5]=qi[0][1]+qi[1][1]+qi[2][1];
b[6]=qi[0][2]+qi[1][2]+qi[2][2];
b[7]=qi[0][0]+qi[1][1]+qi[2][2];
b[8]=qi[0][2]+qi[1][1]+qi[2][0];
c[1]=ren[0][0]+ren[0][1]+ren[0][2];
c[2]=ren[1][0]+ren[1][1]+ren[1][2];
c[3]=ren[2][0]+ren[2][1]+ren[2][2];
c[4]=ren[0][0]+ren[1][0]+ren[2][0];
c[5]=ren[0][1]+ren[1][1]+ren[2][1];
c[6]=ren[0][2]+ren[1][2]+ren[2][2];
c[7]=ren[0][0]+ren[1][1]+ren[2][2];
c[8]=ren[0][2]+ren[1][1]+ren[2][0];
}
void chushihua() //把数据初始化 {
i=1;
int j,k;
for(j=0;j<3;j++)
{
for(k=0;k<3;k++)
{
game[j][k]='/';
}
}
for(j=0;j<3;j++)
{
for(k=0;k<3;k++)
{
jiru[j][k]=0;
qi[j][k]=0;
ren[j][k]=0;
}
}
}
void shuru() //输入数据
{
int k,j;
for(k=0;k<3;k++)
{
for(j=0;j<3;j++)
{
cout << game[k][j] << " ";
}
cout << endl;
}
}
void renxia(int t,int s) //人落子的情况 {
if(i%2==1)
{
game[t][s]='x';
jiru[t][s]=1;
ren[t][s]=1;
system("cls");
shuru();
}
else
{
game[t][s]='o';
jiru[t][s]=1;
ren[t][s]=1;
system("cls");
shuru();
}
}
void huiqi1(int t,int s) //人机游戏时人悔棋的情况
{
game[t][s]='/';
jiru[t][s]=0;
ren[t][s]=0;
system("cls");
shuru();
}
void suiji() //产生随机数 {
int choice;
srand((unsigned int)time(NULL));
choice=rand()%10;
int h,g;
if(choice==10)
{
choice=9;
}
else if(choice==0)
{
choice=1;
}
h=choice%3;
g=(choice-h)/3;
game[g][h-1]='x';
jiru[g][h-1]=1;
qi[g][h-1]=1; }
void jixia() //人机游戏时机器下子
{
if(i==1)
{
suiji();
system("cls");
shuru();
}
else if(i==3)
{
int p;
for(p=1;p<10;p++)
{
int h,g;
h=p%3;
g=(p-h)/3;
if(jiru[g][h-1]==0)
{
game[g][h-1]='x';
jiru[g][h-1]=1;
qi[g][h-1]=1;
break;
}
}
system("cls");
shuru();
}
else
{
suan();
int u,v=0;
for(u=1;u<4;u++)
{
if((a[u]==2)&&((b[u]==2)||(c[u]==2)))
{
int z;
for(z=0;z<3;z++)
{
if(jiru[u-1][z]==0)
{
game[u-1][z]='x';
jiru[u-1][z]=1;
qi[u-1][z]=1;
}
}
system("cls");
shuru();
v++;
break;
}
}
if(v==0)
{
for(u=4;u<7;u++)
{
if((a[u]==2)&&((b[u]==2)||(c[u]==2)))
{
int z;
for(z=0;z<3;z++)
{
if(jiru[z][u-4]==0)
{
game[z][u-4]='x';
jiru[z][u-4]=1;
qi[z][u-4]=1;
}
}
system("cls");
shuru();
v++;
break;
}
}
if(v==0)
{
if((a[7]==2)&&((b[7]==2)||(c[7]==2)))
{
if(jiru[0][0]==0)
{
game[0][0]='x';
jiru[0][0]=1;
qi[0][0]=1;
}
else if(jiru[1][1]==0)
{
game[1][1]='x';
jiru[1][1]=1;
qi[1][1]=1;
}
else if(jiru[2][2]==0)
{
game[2][2]='x';
jiru[2][2]=1;
qi[2][2]=1;
}
system("cls");
shuru();
v++;
}
}
if(v==0)
{
if((a[8]==2)&&((b[8]==2)||(c[8]==2)))
{
if(jiru[0][2]==0)
{
game[0][2]='x';
jiru[0][2]=1;
qi[0][2]=1;
}
else if(jiru[1][1]==0)
{
game[1][1]='x';
jiru[1][1]=1;
qi[1][1]=1;
}
else if(jiru[2][0]==0)
{
game[2][0]='x';
jiru[2][0]=1;
qi[2][0]=1;
}
system("cls");
shuru();
v++;
}
if(v==0)
{
for(u=1;u<4;u++)
{
if((a[u]==1)&&(b[u]==1))
{
int z;
for(z=0;z<3;z++)
{
if(jiru[u-1][z]==0)
{
game[u-1][z]='x';
jiru[u-1][z]=1;
qi[u-1][z]=1;
system("cls");
shuru();
v++;
break;
}
}
}
}
if(v==0)
{
for(u=4;u<7;u++)
{
if((a[u]==1)&&(b[u]==1))
{
int z;
for(z=0;z<3;z++)
{
if(jiru[z][u-4]==0)
{
game[z][u-4]='x';
jiru[z][u-4]=1;
qi[z][u-4]=1;
system("cls");
shuru();
v++;
break;
}
}
}
}
if(v==0)
{
if((a[7]==1)&&(b[7]==1)&&(c[7]==0))
{
if((jiru[0][0]==1)&&(jiru[1][1]==0)){game[1][1]='x';jiru[1][1]=1;qi[1][1]=1;}
else
if((jiru[1][1]==1)&&(jiru[2][2]==0)){game[2][2]='x';jiru[2][2]=1;qi[2][2]=1;}
else
if((jiru[2][2]==1)&&(jiru[1][1]==0)){game[1][1]='x';jiru[1][1]=1;qi[1][1]=1;}
system("cls");
shuru();
v++;
}
if(v==0)
{
if((a[8]==1)&&(b[8]==1)&&(c[8]==0))
{
if((jiru[0][2]==1)&&(jiru[1][1]==0)){game[1][1]='x';jiru[1][1]=1;qi[1][1]=1;}
else
if((jiru[1][1]==1)&&(jiru[0][2]==0)){game[0][2]='x';jiru[0][2]=1;qi[0][2]=1;}
else
if((jiru[2][0]==1)&&(jiru[1][1]==0)){game[1][1]='x';jiru[1][1]=1;qi[1][1]=1;}
system("cls");
shuru();
v++;
}
if(v==0)
{
int p;
for(p=1;p<9;p++)
{
int h,g;
h=p%3;
g=(p-h)/3;
if((jiru[g][h-1]==0)&&(ren[g][h-1]==0))
{
game[g][h-1]='x';
jiru[g][h-1]=1;
qi[g][h-1]=1;
system("cls");
shuru();
v++;
break;
}
}
system("cls");
shuru();
}
}
}
}
}
}
}
}
}
void tishi() //提示
{
if(i==1)
{
cout << "建议输入1,3,7,9中的一个" << endl;
}
else if(i==2)
{
if((qi[0][0]==1)||(qi[0][2]==1)||(qi[2][0]==1)||(qi[2][2]==1)&&(i==2))
{
cout << "建议输入5" << endl;
}
else if(qi[1][1]==1)
{
cout << "建议输入7" << endl;
}
else if(qi[0][1]==1)
{
cout << "建议输入5" << endl;
}
else if(qi[2][1]==1)
{
cout << "建议输入5" << endl;
}
else if(qi[1][0]==1)
{
cout << "建议输入5" << endl;
}
else if(qi[1][2]==1)
{
cout << "建议输入5" << endl;
}
}
else if((qi[0][0]==1)&&(jiru[1][0]==0)&&(qi[2][0]==1))
{
cout << "建议输入4" << endl;
}
else if((qi[0][0]==1)&&(jiru[0][1]==0)&&(qi[0][2]==1))
{
cout << "建议输入2" << endl;
}
else
if((ren[1][1]==1)&&(jiru[0][2]==0)&&(jiru[2][0]==0)&&(qi[2][0]==0)&&(qi[1][0]==0
)&&(qi[2][1]==0)&&(qi[2][2]==0))
{
cout << "建议输入3" << endl;
}
else if((ren[1][1]==1)&&(jiru[0][0]==0)&&(jiru[2][2]==0))
{
cout << "请在正向的斜排未落子处落子" << endl;
}
else
{
suan();
int u,v=0;
for(u=1;u<4;u++)
{
if(a[u]==2&&((b[u]==2)||(c[u]==2)))
{
cout << "请在第" << u << "行未落子处落子" << endl;
v++;
break;
}
}
if(v==0)
{
for(u=4;u<7;u++)
{
if(a[u]==2&&((b[u]==2)||(c[u]==2)))
{
cout << "请在第" << (u-3) << "列未落子处落子" << endl;
v++;
break;
}
}
if(v==0)
{
if(a[8]==2&&((b[8]==2)||(c[8]==2)))
{
cout << "请在反向的斜排未落子处落子" << endl;
v++;
}
if(v==0)
{
if(a[7]==2&&((b[7]==2)||(c[7]==2)))
{
cout << "请在正向的斜排未落子处落子" << endl;
v++;
}
if(v==0)
{
for(u=1;u<4;u++)
{
if(a[u]==1&&c[u]==1&&b[u]==0)
{
cout << "请在第" << u << "行未落子处落子" << endl;
v++;
break;
}
}
if(v==0)
{
for(u=4;u<7;u++)
{
if(a[u]==1&&c[u]==1&&b[u]==0)
{
cout << "请在第" << (u-3) << "列未落子处落子" << endl;
v++;
break;
}
}
if(v==0)
{
if(a[8]==1&&(b[8]==0&&c[8]==1))
{
cout << "请在反向的斜排未落子处落子" << endl;
v++;
}
if(v==0)
{
if(a[7]==1&&(b[7]==0&&c[7]==1))
{
cout << "请在正向的斜排未落子处落子" << endl;
v++;
}
if(v==0)
{
cout << "请在未落子处落子" << endl;
}
}
}
}
}
}
}
}
}
}
void jixianzou() //人机对战的情况
{
if((game[0][0]=='x'&&game[0][1]=='x'&&game[0][2]=='x')||(game[1][0]=='x'&&game[1
][1]=='x'&&game[1][2]=='x')||(game[2][0]=='x'&&game[2][1]=='x'&&game[2][2]=='x')
||(game[0][0]=='x'&&game[1][0]=='x'&&game[2][0]=='x')||(game[0][1]=='x'&&game[1]
[1]=='x'&&game[2][1]=='x')||(game[0][2]=='x'&&game[1][2]=='x'&&game[2][2]=='x'))
{
cout << "玩家失败" << endl;
}
else
if((game[0][0]=='x'&&game[1][1]=='x'&&game[2][2]=='x')||(game[0][2]=='x'&&game[1
][1]=='x'&&game[2][0]=='x'))
{
cout << "玩家失败" << endl;
}
else
if((game[0][0]=='o'&&game[0][1]=='o'&&game[0][2]=='o')||(game[1][0]=='o'&&game[1
][1]=='o'&&game[1][2]=='o')||(game[2][0]=='o'&&game[2][1]=='o'&&game[2][2]=='o')
||(game[0][0]=='o'&&game[1][0]=='o'&&game[2][0]=='o')||(game[0][1]=='o'&&game[1]
[1]=='o'&&game[2][1]=='o')||(game[0][2]=='o'&&game[1][2]=='o'&&game[2][2]=='o'))
{
cout << "玩家获胜" << endl;
}
else
if((game[0][0]=='o'&&game[1][1]=='o'&&game[2][2]=='o')||(game[0][2]=='o'&&game[1
][1]=='o'&&game[2][0]=='o'))
{
cout << "玩家获胜" << endl;
}
else if(i==10)
{
cout << "平局" << endl;
}
else
{
if(i%2==1)
{
jixia();
i++;
jixianzou();
}
else
{
cout << "是否需要提示(0,1)" << endl;
int q;
cin >> q;
if(q==0)
{
tishi();
}
int t;
cin >> t;
zhuanhua(t);
if((t<0)||t>10||jiru[x][y]==1)
{
cout << "输入错误,请重新输入" << endl;
jixianzou();
}
else
{
renxia(x,y);
cout<< "是否悔棋(Y or N),是否重新开始(C or N),是否结束(T or N)" << endl;
cin >> f;
if(f=='Y')
{
huiqi1(x,y);
jixianzou();
}
else if(f=='C')
{
system("cls");
chushihua();
shuru();
jixianzou();
}
else if(f=='T')
{
}
else
{
renxia(x,y);
i++;
jixianzou();
}
}
}
}
}
void ren1(int choice) //人人对战时人下子 {
if(i%2==1)
{
int h,g;
h=choice%3;
g=(choice-h)/3;
game[g][h-1]='x';
jiru1[choice-1]=1;
system("cls");
shuru();
}
else
{
int h,g;
h=choice%3;
g=(choice-h)/3;
game[g][h-1]='o';
jiru1[choice-1]=1;
system("cls");
shuru();
}
}
void huiqi(int choice) //人人对战时人悔棋
{
int h,g;
h=choice%3;
g=(choice-h)/3;
game[g][h-1]='/';
jiru1[choice-1]=0;
system("cls");
shuru();
}
void xiaqi() //人人对战时的下棋情况
{
if((game[0][0]=='x'&&game[0][1]=='x'&&game[0][2]=='x')||(game[1][0]=='x'&&game[1][1]=='x'&&game[1][2]=='x')||(game[2][0]=='x'&&game[2][1]=='x'&&game[2][2]=='x')||(game[0][0]=='x'&&game[1][0]=='x'&&game[2][0]=='x')||(game[0][1]=='x'&&game[1][1]=='x'&&game[2][1]=='x')||(game[0][2]=='x'&&game[1][2]=='x'&&game[2][2]=='x'))
{
cout << "玩家1获胜" << endl;
}
else
if((game[0][0]=='x'&&game[1][1]=='x'&&game[2][2]=='x')||(game[0][2]=='x'&&game[1][1]=='x'&&game[2][0]=='x'))
{
cout << "玩家1获胜" << endl;
}
else
if((game[0][0]=='o'&&game[0][1]=='o'&&game[0][2]=='o')||(game[1][0]=='o'&&game[1][1]=='o'&&game[1][2]=='o')||(game[2][0]=='o'&&game[2][1]=='o'&&game[2][2]=='o')||(game[0][0]=='o'&&game[1][0]=='o'&&game[2][0]=='o')||(game[0][1]=='o'&&game[1]
[1]=='o'&&game[2][1]=='o')||(game[0][2]=='o'&&game[1][2]=='o'&&game[2][2]=='o'))
{
cout << "玩家2获胜" << endl;
}
else
if((game[0][0]=='o'&&game[1][1]=='o'&&game[2][2]=='o')||(game[0][2]=='o'&&game[1
][1]=='o'&&game[2][0]=='o'))
{
cout << "玩家2获胜" << endl;
}
else if(i==10)
{
cout << "平局" << endl;
}
else
{
int m;
cin >> m;
if(m>9||m<1||jiru1[m-1]==1)
{
cout << "输入错误,请重新输入" << endl;
xiaqi();
}
else
{
ren1(m);
cout << "(是否悔棋Y or N)或(是否重新开始 C or N)或(是否结束游戏 T or N)" <<
endl;
cin >> r;
if(r=='Y')
{
huiqi(m);
xiaqi();
}
else if(r=='C')
{
i=1;
int j,k;
for(j=0;j<3;j++)
{
for(k=0;k<3;k++)
{
game[j][k]='/';
}
}
for(j=0;j<9;j++)
{
jiru1[j]=0;
}
system("cls");
shuru();
xiaqi();
}
else if(r=='T')
{
}
else
{
i++;
system("cls");
shuru();
xiaqi();
}
}
}
}
int main() //主函数
{
cout << " 欢迎进入井字棋游戏!" << endl;
cout << " 本游戏用数字1~9示下棋位置 " << endl;
while(1)
{
if((r=='T')||(f=='T'))
{
break;
}
cout << " 是否下棋 Y or N " << endl;
char y;
cin >> y;
if(y=='N')
{
break;
}
else
{
i=1;
int j,k;
for(j=0;j<3;j++)
{
for(k=0;k<3;k++)
{
game[j][k]='/';
}
}
for(j=0;j<9;j++)
{
jiru1[j]=0;
}
cout << " 人机下棋 or 人人下棋 ( 1 or 2 )" << endl;
int u;
cin >> u;
if(u==2)
{
shuru();
xiaqi();
}
if(u==1)
{
chushihua();
shuru();
jixianzou();
}
}
}
return 0;
}
本文档为【井字棋游戏代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。