#include<iostream>
#include<vector>
using namespace std;
int a,x,y,m,n;
int ty[8]={-1,0,1,-1,1,-1,0,1},tx[8]={-1,-1,-1,0,0,1,1,1};
char c[2]={'*','&'};
vector<vector<char>> chessboard;
void start();
void remake_chessboard();
void print_chessboard();
bool uzi(int m,int n,int t);
int op(int m,int n,int t,int s);
void start()
{
while(1)
{
puts("请输入棋盘大小(格式:长*宽)");
scanf("%d*%d",&x,&y);
if(x>=5&&x<=20&&y>=5&&y<=20) break;
puts("不支持这个大小哦,请重新输入(,,・ω・,,)");
}
remake_chessboard();
puts("游戏开始了呦");
print_chessboard();
puts("(*代表黑棋,&代表白棋)");
for(int k=0;;k++)
{
switch(k&1)
{
case 0:puts("轮到黑棋(*)了");break;
case 1:puts("轮到白棋(&)了");break;
}
while(1)
{
puts("请输入要下的位置(格式:x y)");
scanf("%d%d",&m,&n);
if(m>0&&m<=x&&n>0&&n<=y&&chessboard[m][n]==' ') break;
else puts("这个地方不能下棋哦(,,・ω・,,)");
}
switch(k&1)
{
case 0:chessboard[m][n]='*';break;
case 1:chessboard[m][n]='&';break;
}
print_chessboard();
if(uzi(m,n,k&1)) break;
}
}
bool uzi(int m,int n,int t)
{
for(int i=0;i<4;i++)
{
if(op(m,n,t,i)+op(m,n,t,7-i)>=4)
{
if(t) puts("白棋赢了!");
else puts("黑棋赢了!");
return true;
}
}
return false;
}
int op(int m,int n,int t,int s)
{
m+=tx[s],n+=ty[s];
if(m>0&&m<=x&&n>0&&n<=y&&chessboard[m][n]==c[t]) return 1+op(m,n,t,s);
return 0;
}
void remake_chessboard()
{
chessboard.resize(x+2);
for(int i=0;i<chessboard.size();i++)
chessboard[i].resize(y+2);
for(int i=0;i<=x+1;i++)
for(int j=0;j<=y+1;j++)
if(i==0||i==x+1) chessboard[i][j]='-';
else if(j==0||j==y+1) chessboard[i][j]='|';
else chessboard[i][j]=' ';
}
void print_chessboard()
{
for(auto i:chessboard)
{
for(auto j:i)
printf("%c",j);
puts("");
}
}
int main()
{
puts("五子棋");
while(1)
{
puts("(请输入对应数字?:1.开始游戏;0.结束游戏;)");
scanf("%d",&a);
if(!a) break;
else if(a==1) start();
else puts("你输入了什么Σヽ(゚Д ゚; )ノ,只有0和1啊喂(#`Д´)ノ");
}
return 0;
}