咱们不说废话,开始吧
#include<iostream>
using namespace std;
const int N=10;
char Map[N][N]; // 地图
int n = 8; // 棋盘大小
int cnt = 0; // 步数
void Initialize() // 初始化地图
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
Map[i][j]='*'; // 初始为'*'表示无棋
}
}
}
void PrintMap() // 输出地图
{
cout<<" ";
for(int i=0;i<n;i++)
{
cout<<i+1<<" "; // 横坐标标号
}
cout<<endl;
for(int i=0;i<n;i++)
{
cout<<" "<<i+1<<" | "; // 竖坐标标号
for(int j=0;j<n;j++)
{
cout<<Map[i][j]<<" "; // 输出地图内容
}
cout<<endl;
}
cout<<endl;
}
bool CheckWin(int x,int y,char ch) // 判断是否赢了
{
// 检查横行
int cnt=1;
for(int j=y+1;j<n;j++)
{
if(Map[x][j]==ch)
cnt++;
else
break;
}
for(int j=y-1;j>=0;j--)
{
if(Map[x][j]==ch)
cnt++;
else
break;
}
if(cnt>=5)
return true;
// 检查竖行
cnt=1;
for(int i=x+1;i<n;i++)
{
if(Map[i][y]==ch)
cnt++;
else
break;
}
for(int i=x-1;i>=0;i--)
{
if(Map[i][y]==ch)
cnt++;
else
break;
}
if(cnt>=5)
return true;
// 检查斜线
cnt=1;
for(int i=x+1,j=y+1;i<n&&j<n;i++,j++)
{
if(Map[i][j]==ch)
cnt++;
else
break;
}
for(int i=x-1,j=y-1;i>=0&&j>=0;i--,j--)
{
if(Map[i][j]==ch)
cnt++;
else
break;
}
if(cnt>=5)
return true;
// 检查反斜线
cnt=1;
for(int i=x-1,j=y+1;i>=0&&j<n;i--,j++)
{
if(Map[i][j]==ch)
cnt++;
else
break;
}
for(int i=x+1,j=y-1;i<n&&j>=0;i++,j--)
{
if(Map[i][j]==ch)
cnt++;
else
break;
}
if(cnt>=5)
return true;
return false;
}
void PlayGame() // 游戏主函数
{
int x,y;
char ch = 'X'; // 初始为'X'先手
while(cnt < n*n) // 最多下n*n步
{
cout<<ch<<"'s turn: ";
cin>>x>>y;
if(x<1||x>n||y<1||y>n) // 坐标无效
{
cout<<"Invalid position!"<<endl;
continue;
}
if(Map[x-1][y-1] != '*') // 此处已有棋子
{
cout<<"This position is already taken!"<<endl;
continue;
}
Map[x-1][y-1] = ch; // 下棋
cnt++;
PrintMap(); // 显示地图
if(CheckWin(x-1,y-1,ch)) // 判断是否赢了
{
cout<<ch<<" wins!"<<endl;
return;
}
if(ch=='X')
ch='O'; // 交换下棋方
else
ch='X';
}
cout<<"Tie game!"<<endl; // 没有胜者
}
int main()
{
cout<<"=========================="<<endl;
cout<<" Welcome to the game of Gobang"<<endl;
cout<<"=========================="<<endl<<endl;
Initialize();
PrintMap();
PlayGame();
return 0;
}

3万+

被折叠的 条评论
为什么被折叠?



