文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++实现图形界面双人五子棋游戏

2024-04-02 19:55

关注

本文实例为大家分享了C++实现图形界面双人五子棋游戏的具体代码,供大家参考,具体内容如下

设计思路

定义一个Chess类,用16*16的二维数组的来表示一方棋手在棋局上的落子状态。
通过控制键盘←↑→↓来选择落点,getch()函数可获得用户的键盘输入,用coord控制台屏幕上的坐标。
胜利条件:Chess类的成员函数win(),每落一个棋子进行win()的判断,当横向、竖向或斜向存在同一颜色的连续五个棋子时,win()返回值1。

代码如下

#include <windows.h>  
#include <iostream>  
#include<conio.h>
#include<cstring>
using namespace std;  
COORD c;
class Chess
{
private:
    int p[15][15];    
public:
    void newchess()
    {
        for(int i=0;i<16;i++)
            for(int j=0;j<16;j++)
                p[i][j]=0;
    }
    int win()
    {
        int i,j,f;
        for(i=0;i<16;i++)
        {
            j=f=0;
            while(f<5&&j<16)
            {
                if(p[i][j]) f++;
                else f=0;
                j++;
            }
            if(f==5) return 1;
        }
        for(j=0;j<16;j++)
        {
            i=f=0;
            while(f<5&&i<16)
            {
                if(p[i][j]) f++;
                else f=0;
                i++;
            }
            if(f==5) return 1;
        }
        for(i=0;i<12;i++)
        {
            j=f=0;
            while(f<5&&j<12)
            {
                if(p[i+f][j+f]) f++;
                else {f=0;j++;}
            }
            if(f==5) return 1;
        }
        for(i=4;i<16;i++)
        {
            j=f=0;
            while(f<5&&j<12)
            {
                if(p[i-f][j+f]) f++;
                else {f=0;j++;}
            }
            if(f==5) return 1;
        }
        return 0;
    }
    void go(int x,int y)
    {
        p[y][x]=1;
    }
    friend int gochess(int);
}A,B;
void gotoxy(int x, int y) 
{
    COORD coord; 
    coord.X=x; 
    coord.Y=y; 
    SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), coord); 
}
void chessboard()
{
    gotoxy(0,0);
    cout<<"┏━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┓\n";
    for(int i=0;i<13;i++)
    {
        cout<<"┃   │   │   │   │   │   │   │   │   │   │   │   │   │   ┃\n";
        cout<<"┠───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┨\n";
    }
    cout<<"┃   │   │   │   │   │   │   │   │   │   │   │   │   │   ┃\n";
    cout<<"┗━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┛\n";
}

void put(int n)
{
    if(n==1)
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
        cout<<"●\b";
    }
    else 
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
        cout<<"◆\b";
    }
}
int gochess(int n)
{
    int i,k,w;
    while(k=_getch())
    {
        switch(k)
        {
        case 13:
            if(n==1) 
            {
                put(n);
                A.p[c.X/4][c.Y/2]=1;
                return 1;
            }
            else 
            {
                put(n);
                B.p[c.X/4][c.Y/2]=1;
                return 1;
            }
        case 224:
            w=_getch();
            switch(w)
            {
            case 72: 
                for(i=1;c.Y-2*i>=0;i++)
                    if(!A.p[c.X/4][(c.Y-2*i)/2]&&!B.p[c.X/4][(c.Y-2*i)/2])
                        {c.Y-=2*i;break;}
                break;
            case 80:
                for(i=1;c.Y+2*i<=28;i++)
                    if(!A.p[c.X/4][(c.Y+2*i)/2]&&!B.p[c.X/4][(c.Y+2*i)/2])
                        {c.Y+=2*i;break;}
                break;
            case 75:
                for(i=1;c.X-4*i>=0;i++)
                    if(!A.p[(c.X-4*i)/4][c.Y/2]&&!B.p[(c.X-4*i)/4][c.Y/2])
                        {c.X-=4*i;break;}
                break;
            case 77:
                for(i=1;c.X+4*i<=56;i++)
                    if(!A.p[(c.X+4*i)/4][c.Y/2]&&!B.p[(c.X+4*i)/4][c.Y/2])
                        {c.X+=4*i;break;}
                break;
            }
            gotoxy(c.X,c.Y);
        }
    }
}
int game()
{
    chessboard();                 //画棋盘

    A.newchess();B.newchess();    //定义Chess对象A、B
    c.X=28;c.Y=14;
    gotoxy(c.X,c.Y);              //光标居中
    while(1)
    {
        gochess(1);
        if(A.win()) 
            return 1;
        gochess(2);
        if(B.win()) 
            return 2;
    }
}
int main()  
{  
    gotoxy(70,5);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN);
    cout<<"五子棋游戏";
    gotoxy(60,9);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
    cout<<"操作说明:";
    gotoxy(60,11);
    cout<<"选择落点:←↑→↓";
    gotoxy(60,12);
    cout<<"落子:回车键(←┘)";
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);
    int f;
    while(f=game())
    {
        gotoxy(60,16);
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
        if(f==1)
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
            cout<<"红方胜!!";
        }
        else 
        {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
            cout<<"蓝方胜!!";
        }

        gotoxy(60,18);
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
        cout<<"按任意键开始新游戏";
        f=_getch();
        cout<<"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b                     ";
        gotoxy(60,16);
        cout<<"\b\b\b\b\b\b\b\b\b                     ";
    }
}  

运行结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯