#include<iostream.h>
void dy(char a[][3]); // X 方赋值函数
void dy1(char a[][3]); // O 方赋值函数
void winner();
void pd(char a[][3]); //判断函数
int p=0,h=0; //p为平局计数变量,h=1 为胜利标志
int main()
{
char a[3][3],ans; //ans 为再玩一次的标记
do
{
char k='0';
h=0;
p=0;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{a[i][j]=++k;} //给3*3表格赋上数字
for(int m=0;m<3;m++)
{for(int n=0;n<3;n++)
{cout<<a[m][n]<<" ";} //输出表格
cout<<endl;
cout<<endl;}
while(::h!=1)
{
dy(a);
cout<<endl;
cout<<endl;
for(int m=0;m<3;m++)
{for(int n=0;n<3;n++)
{cout<<a[m][n]<<" ";}
cout<<endl;
cout<<endl;}
pd(a);
if((::p!=9)&&::h!=1) //平局都是第一个人走第9步
{
dy1(a);
cout<<endl;
cout<<endl;
for(int m=0;m<3;m++)
{
for(int n=0;n<3;n++)
{cout<<a[m][n]<<" ";}
cout<<endl;
cout<<endl;
}
pd(a);
}
else if(::h!=1)
{
cout<<"平局"<<endl;
break;
}
}
cout<<"想再来一次吗?(y/n)"<<endl;
cin>>ans;
cout<<endl;
}while(ans=='y'||ans=='Y');
return 0;
}
void dy(char a[][3])
{
int x;
cout<<" X 方选择数字:"<<endl;
cin>>x;
if(x<1||x>9)
{
cout<<"再输一次"<<endl;
cin>>x;}
if(1<=x&&x<=3)
{a[0][x-1]='x';
::p++;
}
else if(4<=x&&x<=6)
{a[1][x-4]='x';
::p++;
}
else if(7<=x&&x<=9)
{a[2][x-7]='x';
::p++;
}
}
void dy1(char a[][3])
{
int y;
cout<<" O 方选择数字:"<<endl;
cin>>y;
if(y<1||y>9)
{
cout<<"再输一次"<<endl;
cin>>y;}
if(1<=y&&y<=3)
{a[0][y-1]='o';
::p++;
}
else if(4<=y&&y<=6)
{a[1][y-4]='o';
::p++;
}
else if(7<=y&&y<=9)
{a[2][y-7]='o';
::p++;
}
}
void winner()
{
cout<<"你赢了"<<endl;
::h=1;
}
void pd(char a[][3])
{
if(a[0][0]==a[1][0]&&a[1][0]==a[2][0])
{winner();}
else if(a[0][0]==a[0][1]&&a[0][1]==a[0][2])
{winner();}
else if(a[2][0]==a[2][1]&&a[2][1]==a[2][2])
{winner();}
else if(a[0][2]==a[1][2]&&a[1][2]==a[2][2])
{winner();}
else if(a[1][0]==a[1][4]&&a[1][4]==a[1][2])
{winner();}
else if(a[0][1]==a[1][1]&&a[1][1]==a[2][1])
{winner();}
else if(a[0][0]==a[1][1]&&a[1][1]==a[2][2])
{winner();}
else if(a[0][2]==a[1][1]&&a[1][1]==a[2][0])
{winner();}
}
各个实现函数好定义,在汇合的时候就头疼了,还是太年轻 -。-
程序中也没考虑有棋不能下的方面。。。。感觉定义一个类更简洁点,欢迎补充讨论~