c++游戏五子棋游戏

 咱们不说废话,开始吧

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值