热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

利用c++和easyx图形库做一个低配版扫雷游戏

这篇文章主要介绍了用c++和easyx图形库做一个低配版扫雷游戏,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

游戏界面

由于这个游戏是我抱着玩一玩的心态做出来的,所以没有过多的去设计界面,也没有去找游戏的资源(图片、游戏音效等)。仅使用了不同颜色的方块来表示游戏中方块的状态和种类。(绿色为初始状态(未翻转的状态),黄色为翻转后的背景颜色,蓝色表示已插旗的方块,红色代表地雷)

图1 游戏主菜单界面

图1游戏的主菜单

图二 模式一的游戏界面(20*20 40个雷)

图2 模式1的游戏界面

图三 模式二的游戏界面(10*10 20个雷)

图3 模式2的游戏界面

图四 游戏成功界面

图四 游戏成功界面

图五 游戏失败界面

游戏失败界面

2.全部代码

#include
#include
#include
#include
using namespace std;
#define POINTWIDTH 30
//雷的数量
int mineCnt;
int mapSize;
//已翻转的个数
int _count;
//是否有雷
bool mine[20][20] = { false };
//是否已翻转
bool overturned[20][20] = { false };
bool flaged[20][20] = { false };
//游戏模式
int mode;
//游戏重新开始的标志
int cmd = 1;
//游戏结束标志
bool gameOver;
//玩家获胜标志
bool _win;
//小方格(坐标)
typedef struct point {
 int x;
 int y;
 point(int _x, int _y) {
 x = _x; y = _y;
 }
}point;
//计算周围的地雷数量
int getAroundMineCnt(point p) {
 int cnt=0;
 for (int i = p.x - 1; i <= p.x + 1; i++) {
 for (int j = p.y - 1; j <= p.y + 1; j++) {
  if (i >= 0 && i <20 && j >= 0 && j <20 && mine[i][j])
  cnt++;
 }
 }
 return cnt;
}
//画点(小方格)
void drawPoint(point p,int color) {
 setfillcolor(color);
 fillrectangle(p.x*POINTWIDTH +140,p.y*POINTWIDTH +140, p.x * POINTWIDTH + 140+ POINTWIDTH, p.y * POINTWIDTH + 140+ POINTWIDTH);
}
//画地雷(红色方块代替)
void drawMine(point p) {
 setfillcolor(RED);
 fillrectangle(p.x * POINTWIDTH + 140, p.y * POINTWIDTH + 140, p.x * POINTWIDTH + 140+POINTWIDTH, p.y * POINTWIDTH + 140+POINTWIDTH);
}
//画旗(蓝色方块代替)
void drawflag(point p) {
  flaged[p.x][p.y] = true;
 drawPoint(p, BLUE);
}
//游戏结束对话框与"重玩"、"退出"
void gameover(int &cmd) {
 gameOver = 1;
 for (int i = 0; i  500 && m.y <550 && m.x>200 && m.x <350)
  break;
 else if (m.mkLButton&&m.y > 500 && m.y <550 && m.x>550 && m.x <700) {
  cmd = 0;
  break;
 }
 }
}
//游戏胜利对话框与"重玩"、"退出"
void win(int &cmd) {
 _win = 1;
 setfillcolor(LIGHTGRAY);
 fillrectangle(200, 300, 700, 550);
 rectangle(200, 500, 350, 550);
 rectangle(550, 500, 700, 550);
 setbkmode(1);
 settextstyle(60, 0, 0);
 outtextxy(300, 400, _T("You Win!"));
 settextstyle(38, 0, 0);
 outtextxy(220, 510, _T("Restart"));
 outtextxy(560, 510, _T("  Quit"));
 MOUSEMSG m;
 while (1) {
 m = GetMouseMsg();
 if (m.mkLButton&&m.y > 500 && m.y <550 && m.x>200 && m.x <350)
  break;
 else if (m.mkLButton&&m.y > 500 && m.y <550 && m.x>550 && m.x <700) {
  cmd = 0;
  break;
 }
 }
}
//翻转
void overturn(point p,int t) {
 settextstyle(POINTWIDTH*0.8 , POINTWIDTH*0.8 , 0);
 settextcolor(BLACK);
 if (t == 1) {
 if (!mine[p.x][p.y]) {
  _count++;
  drawPoint(p, YELLOW);
  overturned[p.x][p.y] =true ;
  //判断周围的雷的数量是否为0,为0则翻转该方块周边的8个方块
  if (getAroundMineCnt(p) != 0) {
  int cnt = getAroundMineCnt(p);
  _TCHAR a[3];
  _stprintf_s(a, L"%d", cnt);
  outtextxy(p.x*POINTWIDTH+POINTWIDTH*0.1+ 140, p.y*POINTWIDTH+POINTWIDTH*0.1 + 140, a);
  if (_count == mapSize * mapSize - mineCnt) { win(cmd); return; }
  }
  else {
  for (int i = p.x - 1; i <= p.x + 1; i++) {
   for(int j=p.y-1;j<=p.y+1;j++)
   if (i >= 0 && i = 0 && j  140 && m.x <140+mapSize*POINTWIDTH && m.y > 140 && m.y <140+mapSize*POINTWIDTH)
 {
  point p((m.x - 140) / POINTWIDTH, (m.y - 140) / POINTWIDTH);//将鼠标点击的坐标转换成对应位置的方块
  if(!overturned[p.x][p.y])
  overturn(p,1);
 }
 if (m.mkRButton&&m.x > 140 && m.x <740 && m.y > 140 && m.y <740)
 {
  point p((m.x - 140) / POINTWIDTH, (m.y - 140) / POINTWIDTH);
  if(!overturned[p.x][p.y])
  overturn(p, 2);
 }
 if (gameOver) return;
 else if (_win) return;
 }
}
//初始化游戏界面
void initGameface() {
 if(mode==1)
 rectangle(140, 140, 740, 740);
 else rectangle(140, 140, 440, 440);
 setbkcolor(LIGHTGRAY);
 cleardevice();
 setbkcolor(YELLOW);
 point p(0, 0);
 for (int i = 0; i  300 && m.x <580 && m.y>400 && m.y <500)
  break;
 else if (m.mkLButton&&m.x > 300 && m.x <580 && m.y>530 && m.y <630)
  if (mode == 1) {
  mode = 2;
  rectangle(300, 530, 580, 630);
  outtextxy(320, 550, L"困    难");
  }
  else {
  mode = 1;
  rectangle(300, 530, 580, 630);
  outtextxy(320, 550, L"简    单");
  }
 else if (m.mkLButton&&m.x > 300 && m.x <580 && m.y>660 && m.y <760) {
  cleardevice();
  MOUSEMSG mm;
  while (1) {
  mm = GetMouseMsg();
  if (mm.mkLButton) break;
  }
  startInterface(mode);
 }
 }
}
//初始化游戏
void initgame(int mode) {
 _win = 0;
 _count = 0;
 gameOver = 0;
 if (mode == 1) {
 mineCnt= 40;
 mapSize = 20;
 }
 else {
 mineCnt = 20;
 mapSize = 10;
 }
 for (int i = 0; i 

3. 符加说明:本程序使用了简单好用的easyx图形库:可以Easyx官网中下载安装,且Easyx官网提供的文档详细的介绍了各种函数的用法,很容易上手。

总结

以上所述是小编给大家介绍的利用c++和easyx图形库做一个低配版扫雷游,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!


推荐阅读
  • 手把手教你使用GraphPad Prism和Excel绘制回归分析结果的森林图
    本文介绍了使用GraphPad Prism和Excel绘制回归分析结果的森林图的方法。通过展示森林图,可以更加直观地将回归分析结果可视化。GraphPad Prism是一款专门为医学专业人士设计的绘图软件,同时也兼顾统计分析的功能,操作便捷,可以帮助科研人员轻松绘制出高质量的专业图形。文章以一篇发表在JACC杂志上的研究为例,利用其中的多因素回归分析结果来绘制森林图。通过本文的指导,读者可以学会如何使用GraphPad Prism和Excel绘制回归分析结果的森林图。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • SeMITechnologies正在使用矢量搜索引擎Weaviate构建的内容。SeMI的首席执行官兼联合创始人BobvanLuijt说,它是一种独特的AI优先数据库,使用机器学习 ... [详细]
  • OleDbDataAdapter充当DataSet和数据源之间的桥梁,用于检索和保存数据。OleDbDataAdapter通过以下方法提供这个桥接器:使用Fill将数据从数 ... [详细]
  • Win7激活错误代码0xc004e003怎么解决?
    一般情况下当我们在安装win7系统之后,都是需要进行激活才能够正常使用所有功能,而最近有用户反映说win7激活失败提示错误代码0xc004e003,这是怎么回事?怎么解决呢?为此, ... [详细]
  • java代码利用aspose,java初学者代码
    本文目录一览:1、aspose.cellsjava合并excel ... [详细]
  • exportdefaultclassIndexextendsComponent{Taro.setNavigationBarTitle({title:this.$rout ... [详细]
  • 云开发与
    大家好,今天我来为大家分享一下,Linux命令查询小程序中的WePY云开发实践。WhyWePY首先,先分享一下为什么要选择WePY?在项目开始进行选型的时候,我可选的底层框架有We ... [详细]
  • C#datatable序列化后整数带有小数点或者小数点变成整数原来datatable的列有个datatype属性,可以指定为int类型或者decimal类型的,如果指定int类型, ... [详细]
  • 将熊猫数据框中的浮点数转换为整数原文:https://www. ... [详细]
  • 安卓ndk开发!高级Android晋升之View渲染机制,附答案
    缘起深圳市腾讯计算机系统有限公司成立于1998年11月,是中国最大的互联网综合服务提供商之一,也是中国服务用户最多的互联网企业之一。腾讯业务多元化& ... [详细]
  • 动态分页实现
    Code分页存储过程CREATEprocedurePagersqlstrnvarchar(4000),--查询字符串currentpageint,--第N页pagesizeint- ... [详细]
  • 优酷如何去广告?优酷去广告方法
    优酷如何去广告?优酷应该是大家最常使用的视频播放器了,然而优酷的广告也是很多,那么要如何去除烦心的广告呢?下面小编给大家分享优酷去广告的小技巧,请大家笑纳!步骤如下:1、找到hos ... [详细]
  • idea 正则表达式搜索替换应用详解_正则表达式
    这篇文章主要介绍了idea正则表达式搜索替换应用详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值, ... [详细]
  • 提交后Activity4新 ... [详细]
author-avatar
幸福的小馋豆
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有