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

Radinka ·
更新时间:2024-11-14
· 1090 次阅读

本文实例为大家分享了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                     ";     } }  

运行结果



五子棋游戏 c+ 界面 五子棋 C++ 图形界面

需要 登录 后方可回复, 如果你还没有账号请 注册新账号