@TOC
前言
该文字主要讲解游戏逻辑代码实现,代码直接复制粘贴是无法直接运行的,直接运行可以在下文的传送门下载(0积分下载),下载好直接点击解决方案运行即可(需要按照要求安装easyx) ,或者去gitee查看源码,传送门在下文。
更新时间: 2022、5、18 、16:11
演示视频传送门: 传送门
源码见:
效果图展示
游戏开始界面
游戏介绍页面:
游戏倒计时:
游戏界面
游戏失败:
彩蛋:星星是会动的
游戏BGM:
歌名:SAD(Clap Your Hands) 在线听 彩蛋BGM:Mistleoe 在线听 游戏过程全部BGM都在资源里了,包括倒计时,消行,彩蛋音乐,游戏音乐
俄罗斯方块游戏逻辑
俄罗斯方块是在一块特定的长方形区域进行游戏运行,还有一个显示下一个方块的区域,得到的分数可以用一个变量贮存,然后在窗口打印出来,那么此时要完成这些基本游戏逻辑我们需要选择一个好的图形工具,可以画方块,可以画游戏区域和下一个方块提示,我们这里选择由C++开发的easyx图形开发库来实现,整个游戏开发最难的部分在于 如何在地图动态标记方块,方块贮存的数据结构,触底判断等。
- 第一步难度:⭐⭐
1.用函数绘出所需窗口,设置好每一步的像素(还有一个方法是可以通过电脑的画图绘图出来,然后在游戏直接加载,注意加载像素和窗口像素要一样,这样可以美观的显示游戏区域了像这样:两张图对比)…)这个是最关键的一步,因为这里不配置好,后面要改的话已全部都要改,所以这里花时间是没问题的 2.
1.游戏窗口
也可以美观使用画图画一个一样的图 见文章 开发心得
2.游戏欢迎界面(这里比较简单 主要是利用了递归函数保持页面存在和按键接受)
3.倒计时页面
- 第二步难度:⭐⭐⭐
实现游戏逻辑(按照难度从小到大排序)
1.方块实现下落功能, 2.触边判断(包括触底,触左,触右,实现了最重要触底,触右触左判断就可以举一反三了), 3.随机生成方块,以及显示下一个出现的方块, 4.方块用怎样的数据结构来存储 5.消行实现
1.方块实现逻辑:
每一个方块使用4 * 4的数组存贮,总共有七种基本类型,其中每一种需要旋转四次,则共有28中类型的方块,那么建立一个3维的数组 int Block[BLOCKTYPE][4][4](注:BLOCKTYPE 宏定义为28) 其中BLOCKTYPE 用rand() 函数随机生成,种子是系统时间 srand(time(NULL));,这就实现了方块的贮存以及第一个方块随机生成
特别注意: 有些小伙伴可能会问为什么 有些方块模型旋转了 也是一样啊,比如田形状方块,只用一个数组存贮就好啦,为什么要弄四个一样的呢?这是因为后面在实现方块旋转逻辑时 旋转一次是BLOCKTYPE加一,且要保持时同一方块类型,就需要BLOCKTYPE加一后变为4的倍数时减去4,回到原来方块类型。
代码实现:
2.方块绘图
因为我们设置20行 10 列的游戏区域(像素为 600 x 300) 则每一个 方块 对呀像素为30 所以设置文字大小为30像素
代码实现:
3.方块清除
实现方块下落功能就是 设置延时 每过 0.3s 纵坐标加30像素 ,然后 方块清除函数再画一个一样的方块 不过 是和底色一样的白色 ,就相当于 墙弄脏了 油漆刷墙一样 消去原先绘出的方块
- 第三步难度:⭐⭐
1.实现消行音效,2.游戏开始音效,3.游戏暂停同时停止音效(这里有个难点就是重新播放不会从 原本暂停地方重新播放,如果要实现我的想法是弄一个计时器)4.保存游戏分数最高记录
- 代码优化建议
1、进行函数封装,可以分为几个头文件,例如实现页面窗口绘图的函数声明的,放在UI.h头文件中(use interface) 实现游戏逻辑函数声明的放在APP.h头文件中,再分别在UI.cpp,APP.cpp中进行函数实现,在主函数main.cpp中引入UI.h和APP.h文件 再运行主函数,
更新中————