C++实现图形界面双人五子棋游戏
【C++实现图形界面双人五子棋游戏】本文实例为大家分享了C++实现图形界面双人五子棋游戏的具体代码,供大家参考,具体内容如下
设计思路
定义一个Chess类,用16*16的二维数组的来表示一方棋手在棋局上的落子状态。
通过控制键盘←↑→↓来选择落点,getch()函数可获得用户的键盘输入,用coord控制台屏幕上的坐标。
胜利条件:Chess类的成员函数win(),每落一个棋子进行win()的判断,当横向、竖向或斜向存在同一颜色的连续五个棋子时,win()返回值1。
代码如下
#include#include #include #include 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、Bc.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"; }}
运行结果
文章图片
文章图片
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- Python|Python face_recognition实现AI识别图片中的人物
- C语言递归思想实现汉诺塔详解
- 利用python实现你说我猜游戏的完整实例
- C++代码实现五子棋小游戏
- 固定宽度布局开发WebApp如何实现多终端下自适应()
- 什么是爬虫(Python爬虫框架有哪些?)
- PyTorch实战(神经网络在图像识别中的实现)
- PyTorch开发(深度神经网络的实现)
- PyTorch图像识别实现介绍
- Html+Css+JS|【网页制作】jQuery操作css实现设置箭头图片