当前位置:文档之家› 小游戏说明

小游戏说明

关于《搞怪碰碰球》

搞怪碰碰球是一个简单的益智游戏,游戏开始画面会先出现5个球。玩家
只要把5颗以上颜色相同的球练成一线,无论直的横的或是斜的,就可以把球
消掉。但是每移动一次,若是无法消掉任何颜色的球时,画面上就会再增加3
个球。另外,画面还会不时出现白色发光的魔法球,它可充当任何颜色的球,
帮助它们尽快连成一线。
当画面上的空格都被小球塞满,而再也无法移动时,就算是游戏结束。一
次消去5颗球可得10分,而每多消一颗球则加5分。游戏结束还有成绩排名,让
玩家可检视自己的成绩是否有进步。
面对越来越多各种不同颜色的球,你是否开始手忙脚乱,意识不清了呢?
头好壮壮的你,究竟能否搞定这些顽皮的小毛球呢?

【开发文档】

【项目名称】搞怪碰碰球

【项目类型】2D游戏(益智类)

【概要说明】
为积极参与易语言公司“易语言应用程序大奖赛”活动,使用易语言对游戏
进行移植。考虑到代码检视方便,所有图片与音效资源全部放入资源中。
游戏算法并不复杂,主要由球位移动判断、消球处理判断、随机球处理、动
画处理和配置文件处理几个部分组成。
广度优先算法实现迷宫解法,完成球位移动判断,在遍历的过程中建立遍历
树以获取最短路径。
消球处理算法类似五子棋算法,从当前球位向周边八个方位进行同色球检查,
完成横、竖、左斜、右斜四组方向的统计。
白球处理采取将白球替换成其它7种颜色球形,分别进行消球处理判断,其结
果会有重复,在子程序外部进行过滤。

【详细说明】
游戏规则:游戏区为9×9区域大小,开局随机放入5个新球。球可以在通路区
域任意移动,5球或5球以上同色球连成直(斜)线即可消除。若移动而未能消除
球,则随机加入3个新球。每次加入新球后,都会预先提示下一次将加入的3个新
球球色。

功能分布:游戏功能(游戏、开始新局)、荣誉榜(使用文本文件保存游戏
记录)、游戏说明(图文)

窗口定义:主游戏窗口(_启动窗口),荣誉榜窗口,入榜提示窗口,游戏失
败提示窗口,游戏说明窗口,退出确认窗口。

全局变量:无。不使用全局变量传递参数,使用子程序实现程序集变量在不
同窗口中的参数传递。

主要程序集变量:
球位 整数型数组 成员数81(9×9)用来保存当前各球位球色,空位置0
后继球 整数型数组 开局成员数5 局中成员数3
选中球位 整数型 记录当前被选中的球位
分数 整数型

记录当前局游戏分数
荣誉榜 文本型数组 前7位为分数,后跟玩家名称。分数不足7位自动补0
玩家名称 文本型 入榜后,由入榜窗口回传所输入的玩家名称
控件被激活 逻辑型 控件音效控制用

动画处理:使用时钟组件进行球位选中动画控制。加入缓冲画板,避免去除
球形#品红透明色时所产生的画面闪动。

【主要函数说明】
画球形()
每次画球形位图前先会重画底色,擦除原图片。因此判断球色为0时,代表仅
擦除而不画球形,实现动画效果。

画随机后继球()
通过后继球数组成员数动态判断要画球的个数,每画一个后继球就判断是否可
消除。
此处要注意,自动增加的球被消除后,必需立刻将相应球位加入空位数组中。

计算球位绝对坐标()
计算相对坐标球位()
计算球位相对坐标()
换算用,减少代码复杂度。

判断球位连通性()
关键算法之一。从当前球位开始向上下左右做广度优先遍历,使用标志数组记
录当前球位是否已访问过,0代表未访问过,大于0是该球位的父球位号(建遍历树
的过程)。反复此过程,若遍历到目的球位,则通路有效,并根据标志数组所保存
的父球位号进行回溯,获取最短路径。若全部遍历却未遇到目的球位,则通路无效。

判断是否可消除()
关键算法之一。首先判断欲检查球位是否是白球,如果是,则换为另7种颜色的
球分别做尝试。注意这样做可能会导致球位重复被计算,需在外部做过滤。
每种颜色的球向其球位西方和东方(横向),北方和南方(竖向),西北方和
东南方(左上右下斜向),西南方和东北方(左下右上斜向)分四组做检查,统计
同色球。若同色球数>=5,则加入返回数组中。注意可能一次有多组被消除,比如V
型、L型等组型,因此必须每个组向都检测一遍。同时消去多组时,中心位会被重复
计算,同样需要在外部做过滤。

【开发记录】
1. 原打算设窗口随意移动为真,但导致左下角网站链接图片框点击失效,放弃。
2. 原打算设为固定边框,标题栏为空,但任务条中显示也为空。如果设在任务条中
显示为假,用着不方便,尝试只在最小化时让在任务条中显示为真,但没有效果,
放弃。
3. 安装程序源码未加入参赛作品压缩包中,仅提供主程序源码。

【开发错误记录】
2.53版与3.8版易语言窗口背景图片存在色差问题,原因不明。
因程序在2.53版环境下开发,导致在3.8版环境中,图形按钮底色与窗口图形
背景底色不符(2.53版不存在此问题),单独为3.8版源代码处理了图形按钮图片
底色(

使用透明色会发生消隐现象,不考虑)。易语言中无自身版本检测命令,无
法实现自动识别替换。
2.53版子程序集变量在递归调用时出现重用现象(似乎被认为是静态变量),
为部分子程序单独增加静态变量保证数据有效性。3.8版易语言不存在此问题。
2.53版画板左键被按下事件子程序在快速点击,子程序频繁被调用时,出现数
据错误,也是子程序集变量问题造成,将所有处理事件()命令取消,确保每个子程
序代码执行完毕方能接收新消息。3.8版编译环境不存在此问题。



=====================================

相关主题
文本预览
相关文档 最新文档