#include<iostream>
using namespace std;
int Hsheng(char a[][15]);//判斷o子是否獲勝的函數
int Bsheng(char a[][15]);//判斷x子是否獲勝的函數
int he(char a[][15]);//判斷是否平局(也就是棋盤下滿了)的函數
void qipan(char a[15][15])//執行輸出棋盤命令
{ for(int i=0;i<15;i++) //打印棋盤
{ for(int j=0;j<15;j++)
cout<<a[i][j];
cout<<endl; } }
int main()
{ char a[15][15]; int x,y;
for(int i=0;i<15;i++)
for(int j=0;j<15;j++)
a[i][j]=' '; qipan(a);
while(1)//用循環語句執行o,x交替下子,這些while語句看起來似乎是個死循環~實際上都會經過break結束
{ int a1=1;
while(1)
{ for(;a1;)
{ cout<<"請輸入o子下的位置:"; //輸入o子的位置
cin>>x>>y; if(a[x][y]=='o'||a[x][y]=='x')//判斷是否已有子
{cout<<"已有子請重下"<<",";continue;}
else if(x>=15||y>=15){cout<<"輸入錯誤請重輸"<<",";continue;}
else { a[x][y]='o'; a1=0;}
} break;}
qipan(a);//下好o子後將棋盤顯示
if(Hsheng(a))//判斷o子是否已經獲勝
{ cout<<"o子獲勝"<<endl; break; }
while(1)//下x子
{ cout<<"請輸入x子下的位置:";
cin>>x>>y;
if(a[x][y]=='o'||a[x][y]=='x'||x>=15||y>=15)
{ for( ; a[x][y]=='o'||a[x][y]=='x'; )
{ cout<<"已有子請重下";
cout<<"請輸入x子下的位置:";
cin>>x>>y;continue; }
for ( ; x>=15||y>=15||x; )
{ cout<<"輸入錯誤請重輸"<<","; //判斷輸入棋子位置是否正確
cout<<"請輸入x子下的位置:";
cin>>x>>y;continue ;}
a[x][y]='x';break; }
else
{ a[x][y]='x'; break; } }
qipan(a);//再壹次輸出棋盤
if(Bsheng(a))//判斷x子是否已經獲勝
{ cout<<"x子獲勝"<<endl; break; }
if(he(a))//判斷是否平局
{ cout<<"平局"<<endl; break; } }
return 0; }
int Hsheng(char a[][15])
{ int i,j;//判斷橫著的5個是否都相等
for(i=0;i<15;i++)
for(j=0;j<15;j++)
if(a[i][j]=='o'&&a[i][j+1]=='o'&&a[i][j+2]=='o'&&a[i][j+3]=='o'&&a[i][j+4]=='o')
return 1;
for(j=0;j<15;j++)//判斷豎著的5個是否都相等
for(i=0;i<15;i++)
if(a[i][j]=='o'&&a[i+1][j]=='o'&&a[i+2][j]=='o'&&a[i+3][j]=='o'&&a[i+4][j]=='o')
return 1;
for(i=0;i<15;i++)//判斷左斜5個
for(j=0;j<15;j++)
if(a[i][j]=='o'&&a[i+1][j+1]=='o'&&a[i+2][j+2]=='o'&&a[i+3][j+3]=='o'&&a[i+4][j+4]=='o')
return 1;
for(i=0;i<15;i++)//右斜5個
for(j=14;j>3;j--)
if(a[i][j]=='H'&&a[i+1][j-1]=='o'&&a[i+2][j-2]=='o'&&a[i+3][j-3]=='o'&&a[i+4][j-4]=='o')
return 1;
return 0; }
int Bsheng(char a[][15])//同o,只是改字符
{ int i,j;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
if(a[i][j]=='x'&&a[i][j+1]=='x'&&a[i][j+2]=='x'&&a[i][j+3]=='x'&&a[i][j+4]=='x')
return 1;
for(j=0;j<15;j++)
for(i=0;i<15;i++)
if(a[i][j]=='x'&&a[i+1][j]=='x'&&a[i+2][j]=='x'&&a[i+3][j]=='x'&&a[i+4][j]=='x')
return 1;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
if(a[i][j]=='x'&&a[i+1][j+1]=='x'&&a[i+2][j+2]=='x'&&a[i+3][j+3]=='x'&&a[i+4][j+4]=='x')
return 1;
for(i=0;i<15;i++)
for(j=14;j>3;j--)
if(a[i][j]=='x'&&a[i+1][j-1]=='x'&&a[i+2][j-2]=='x'&&a[i+3][j-3]=='x'&&a[i+4][j-4]=='x')
return 1;
return 0; }
int he(char a[][15])
{ for(int i=0;i<15;i++)
for(int j=0;j<15;j++)
{ if(a[i][j]==' ')//當棋盤全部子都不是' '時才能return 1,即棋盤已下滿
return 0;
}
return 1;
}
希望能幫到妳!!