#include <iostream>
using namespace std;
const char symbol[11][4]={"┌","┬","┐","├","┼","┤","└","┴","┘","○","●"}; //制表符及两枚棋子
int x=0,y=0,a[15][15]={0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
6,7,7,7,7,7,7,7,7,7,7,7,7,7,8}; //棋子的横纵坐标,以及15X15个可放棋子的位置
int UsedBy[15][15]={0}; //用来标记棋位被占用的情况,0表示未使用,1、2分别表示被玩家1、玩家2占用
void DrawChessboard() //用来绘制棋盘
{
cout<<" 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4"<<endl; //在第一行显示,用以标示棋位的列坐标
for(int i=0;i<=14;i++) //使用循环语句
{
if (i!=0)
cout<<endl;
cout<<i%10; //输出棋位的行坐标
for (int j=0;j<=14;j++)
cout<<symbol[a[i][j]]; //输出八种不同位置的制表符
}
cout<<endl;
}
void Player1 () //玩家1下棋子
{
cout<<"请1号玩家输入要下的棋子的坐标(先行后列,用空格隔开):";
while (cin>>x>>y)
{
if (UsedBy[x][y]==0 && x>=0 && x<=14 && y>=0 && y<=14)
{
UsedBy[x][y]=1; //将指定坐标的棋位标记为玩家1的棋子占用
a[x][y]=9; //为放置玩家1的棋子做准备
system ("cls"); //清屏
DrawChessboard(); //重新绘制棋盘
break;
}
else
cout<<"输入错误,1号玩家请重新输入:";
}
}
void Player2 () //玩家2下棋子,下列过程类似函数Player1
{
cout<<"请2号玩家输入要下的棋子的坐标(先行后列,用空格隔开):";
while (cin>>x>>y)
{
if (UsedBy[x][y]==0 && x>=0 && x<=14 && y>=0 && y<=14)
{
UsedBy[x][y]=2;
a[x][y]=10;
system ("cls");
DrawChessboard();
break;
}
else
cout<<"输入错误,2号玩家请重新输入:";
}
}
int judge (int x,int y,int player) //用来判断胜负
{
int lianzi=1; //用来标记同一种棋子连着的最多个数
for (int m=-1;m<=0;m++)
for (int n=-1;n<=1;n++)
{
if (m!=0 || n!=0)
{
for (int i=1;i<=4;i++)
{
if (x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && UsedBy[x+i*m][y+i*n]==player)
lianzi++;
else
break;
}
for(i=-1;i>=-4;i--)
{
if (x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && UsedBy[x+i*m][y+i*n]==player)
lianzi++;
else
break;
}
if(lianzi>=5)
return 1; //返回值为0表示当前判断的玩家已经胜出
else
lianzi=1;
}
}
return 0; //返回值为0表示当前判断的玩家没有胜出
}
void main ()
{
system ("title 五子棋二人对战平台"); //程序运行窗口的标题
system ("color 60"); //用来设置程序运行窗口的背景色与前景色
system ("mode con cols=40 lines=25"); //用来设置程序运行窗口的宽高
DrawChessboard();
while (1)
{
Player1 (); //玩家1输入棋子的坐标
if (judge(x,y,1)==1) //判断玩家1是否获胜
{
cout<<"1号玩家获胜!"<<endl;
break;
}
Player2 (); //玩家2输入棋子的坐标
if (judge(x,y,2)==1) //判断玩家2是否获胜
{
cout<<"2号玩家获胜!"<<endl;
break;
}
}
}