这是我很久以前玩过的一一款游戏,前天突然想起来了,就想着自己能不能实现一下。

上几张网页上游戏的图片:

游戏窗口如下:

可以看到,“Refresh”按钮在初始状态下是不可用的,这里默认刚开始生成的游戏界面不会存在“无法消除”的情况。

如图,下图出现了“不可消除”的情况,灰色色块被绿色和橙色色块挡住,橙色色块被红色色块挡住,红色色块被橙色色块挡住……

点击“Refresh”按钮,会弹出一个对话框:点击“Yes”,会刷新游戏窗口。

这时,就可以继续消除了。 当所有色块均被消除时,会弹出Congratulations对话框。

游戏的编写过程主要分为以下几步:

  • 绘制界面

    • 界面比较简单,可以直接实例化控件,采用setGeometry()的方式固定其位置及大小。
    • 响应鼠标点击的矩阵是一个QPushButton数组,一次性将所有按钮实例化。
  • 用彩色色块填充界面
    • 这里需要考虑彩色色块放置的问题。根据对已有的小游戏“十字消除”进行数据统计,空白色块占比大概处于43%~44%。简单起见,这里设置为40%。
    • 首先遍历整个数组,将随机颜色的色块成对的加入按钮中,这里我采用的是一种比较直接的方法,将下标为i的按钮与下标为count-i的按钮处的色块设置为相同的色块,这样可以保证生成的每种色块都为偶数个。
    • 接下来就是放空白色块了。空白色块的数目之前已经确定好,是count的40%。这里,我产生一个无重复的随机数组。代码如下:
      int* getRandValueNoRepeat(int max, int count) {int *res = new int[count];qsrand(time(NULL)); //因为是用Qt编写的,所以用的是qsrand()和qrand()函数int index = 0;for(int i = 0; i < max; ++i) {if(qrand() % (max - i) < count) {res[index++] = i;--count;}}return res;
      }
    • 用随机数组的元素作为下标,向按钮数组中添加空白色块。同样地,为了使最后生成的彩色色块“不落单”,必须使得一对空白色块覆盖一对颜色相同的彩色色块,方法和上面相同。

疑问:这样做会不会使得中间始终为空白呢?

解释:

//一共有308个色块,下标为0~307
//第一步,用彩色色块成对的填充所有按钮。
for(int i = 0; i < 154; i++) {btns[i]...btns[307 - i]...
}
//i最大为153,307-i最小为154,不存在重复填充的情况。这样能够保证彩色色块“不落单”。//第二步,用空白色块随机填充部分按钮。int *randArray = getRandValueNoRepeat(154, 62);
for(int i = 0; i < 62; i++) {int index = randArray[i];btns[index]...btns[307 - index]...
}
delete []randArray;//308 * 0.4 = 123.2,这里选择填充124个空白色块。
//从0~154中随机产生62个不重复的数,最大值为153。
同理,index最大值为154,307-index的最小值为154,不会重复填充空白色块,也保证了彩色色块“不落单”。
  • 根据点击位置判断色块是否消失

    • 首先根据点击的位置求出当前按钮在数组中的下标。
    • 接下来分别向上、下、左、右四个方向寻找,看是否有相同的彩色色块。如果有,则将相同的彩色色块变成空白色块,如果没有,不作任何响应。(四个方向中如果有三个彩色色块相同,一次只将两个色块变为空白色块,这样也是为了保证彩色色块“不落单”。)
    • 彩色色块消失后,要实时更新彩色色块的数目,当数目小至一定值时,“Refresh”按钮变为可用。当遇到“不可消除”的情况时,用户点击“Refresh”按钮,会根据当前的彩色色块数目,重绘出相同数目的彩色色块(与原来色块布局不同),从而实现了刷新。

至此,游戏完成。

Qt-十字消除小游戏相关推荐

  1. html扑克牌游戏源码,html5扑克牌消除小游戏源码

    特效描述:html5扑克牌 消除小游戏源码.html5扑克牌消除小游戏源码 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 $(function(){ //实现随机洗牌 neusoft ...

  2. cocos creator 2.4.5消除小游戏新玩法消星星源码H5+安卓+IOS三端源码

    cocos creator 2.4.5消除小游戏新玩法消星星源码H5+安卓+IOS三端源码,开发脚本为typeScript方便扩展和阅读,支持cocos creator2.X版本,完整的源码可直接运营 ...

  3. QT横板格斗小游戏——基于网编的重构

    QT横板格斗小游戏--基于网编的重构 一.项目概览 二.具体功能设计 2.1 Npc基类 2.2 Boss子类 2.3 Hero类 2.4 Widget类 2.5 GameContral基类 2.6 ...

  4. 【原生JS】做一个打字消除小游戏,学习摸鱼两不误

    JS打字消除小游戏 话不多说先看效果! 页面布局: CSS样式: JS文件(重点): 话不多说先看效果! JS打字消除游戏 页面布局: <!DOCTYPE html> <html&g ...

  5. 黑马Qt翻金币小游戏——拓展到100关

    目录 前言: 一.拓展--增加到100功能实现: 二.拓展--下一关实功能现 三.最后分享ChooseWindow.h.ChooseWindow.cpp和PlayWindow.h.PlayWindow ...

  6. C3—Qt实现五子棋小游戏(二)2021.11.08

    Qt实现五子棋小游戏(二) qt实现五子棋(一) 步骤: 第二大步是创建主界面将绘制界面和界面元素的初始化分开逻辑更为清晰.所谓界面是指frame.背景.标题.界面大小等内容:界面元素是指例如为com ...

  7. C++/QT 贪吃蛇小游戏 界面设计

    C++/QT 贪吃蛇小游戏 界面设计 前言:本文所写的贪吃蛇是笔者初学QT练手的小项目,做出来的界面较为粗糙.由于很久没有接触C++,程序中类封装的不是很规范.写这篇文章,权当是记录生活了,手动狗头. ...

  8. QT实现五子棋小游戏

    学习QT的过程中,为了加深自己的一些基础操作,也为了想装x,就自己写了一个五子棋小游戏,目前界面没写完整,游戏主题部分可以玩. 五子棋游戏主要的操作有三个. 第一: void MainWindow:: ...

  9. QT做的小游戏,技术成长ing(莫名押韵_dog)

    做这个项目记录的一些笔记. 说明:翻金币项目是一款经典的益智类游戏,我们需要将金币都翻成同色,才视为胜利.首先,开始.选关.游戏.胜利界面如下: 游戏的代码和软件资源请点击自取[资源在此](提取码:7 ...

  10. 通关大一编程实践,用C++基础和Qt实现FlappyBird小游戏

    目录 内容简介 项目要求 项目实现 素材导入 核心思路 思路的转变:从main到mainwindow 如何让游戏动起来 如何设计一个物体类 如何从键盘输入操作 如何绘制图片 如何初始化 项目源码 内容 ...

最新文章

  1. J. Med. Chem. | 通过负向设计优化筛选化合物库
  2. 批量选中删除(包含全选)---jsp,servlet
  3. Windows7 IIS7.5 HTTP Error 503 The service is unavailable 另类解决方案
  4. 7445 oracle,Oracle 10g impdp 报 ORA-7445 [_INTEL_FAST_MEMCPY.A] 解决方法
  5. Intent实现页面跳转
  6. 如何获取网页付费隐藏链接_如何将SEO变成可衡量的收入来源
  7. 设计轻松应用素材 | 免抠png和图标上哪找
  8. 如何在Ubuntu 18.04上安装/卸载NodeJS
  9. 【NA】高斯积分公式(二)
  10. 机器学习中特征空间、欧式空间、希尔伯特空间以及特征空间
  11. php在线解密,zend在线解密
  12. 泰坦尼克号各种因素对存活率的影响
  13. 微信小程序自定义tabbar以及闪烁问题
  14. 2012人类将从“微博体”过渡到“微媒体”。至于你信不信,反正我信了
  15. c语言 交互式电子白板案例,交互式电子白板教学案例——电子白板让修改习作不再难...
  16. 最新PHP对接微信支付,发起商家转账API,商家转账到零钱
  17. Zeal--一款支持207个离线文档的浏览器
  18. 快递e栈控制台版实现心得
  19. 美赛BOOM数学建模1-2蒙特卡洛法
  20. HttpReques

热门文章

  1. 算法大亨Carl的面试简历长啥样?同款模板让你脱胎换骨
  2. cdr通用稳定高性能版本 且兼容win10
  3. 三调数据库标注插件v1.2
  4. linux系统安装gaussview_Linux系统安装Python
  5. 量子化学计算机程序,量子化学
  6. 腾讯视频国际版(Android)电量测试方法研究与总结
  7. 100套PPT模板用于论文答辩、工作方案等
  8. 史诗级互联网电商系统的演进过程详解
  9. 一款万能企业邮箱,高效且实用,速看!
  10. 计算机专业课件制作,计算机科学与技术专业毕业论文--多媒体课件设计与制作.doc...