这篇文章主要为大家详细介绍了C++实现图形界面双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了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语言基础全局变量与局部变量教程详解 2022-12-31
- C++中的atoi 函数简介 2023-01-05
- C利用语言实现数据结构之队列 2022-11-22
- 一文带你了解C++中的字符替换方法 2023-07-20
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26
- C++详细实现完整图书管理功能 2023-04-04
- 如何C++使用模板特化功能 2023-03-05
- 详解c# Emit技术 2023-03-25
- C/C++编程中const的使用详解 2023-03-26
- C语言 structural body结构体详解用法 2022-12-06