基于ARM9开发板的扫雷游戏设计 CIS_INITIAL, //初始化状态 CIS_SWEPT, //被挖空状态 CIS_FLAG, //被标识为雷状态 CIS_QUESTION //被标识为疑问状态 };
每次点击一张图片时要先判断图片是在什么状态,再进行后续的操作, 程序如下:
Void *event)
{
if(state == CIS_SWEPT) return ;
switch(event->button()) {
case Qt::LeftButton: switch(state) {
...... } break;
case Qt::RightButton: {
switch(state) {
...... } }
break; } }
当图片状态为挖空是,不执行鼠标事件,然后再判断是鼠标左击事件还是鼠标右击事件,再进行后续操作。
CellItem::mousePressEvent(QGraphicsSceneMouseEvent
24
基于ANM9开发板的扫雷游戏设计 3.4.2 图片交换的设计
当图片的状态标识为可执行鼠标操作是,就要根据是左击还是右击以及图片现在的状态来交换图片,在3.3.1中设计了把图片放到场景中,例如一张图片的标识为CIS_INITIAL,当响应鼠标左击事件是,我们要判断底层数据的值,如下程序所示:
if(num == 0)
setPixmap(*blank);
else if(num >0 )
setPixmap(*digits[num]);
else
setPixmap(*explode);
state = CIS_SWEPT;
每次挖开一张图片后要把此图片的标识符设为被挖空状态,不再响应鼠标事件。
3.4.3 爆炸和递归的设计
当我们左击点开一张图片时,假设此位置是数值,只要此位置交换图片就可以了。但是当此位置是雷时,就会出现所有的雷爆炸,从而失败,所有图片都不再响应鼠标事件,而当此处是空白时,就会响应一个递归函数,自动把周围的图片打开,直到出现数字为止。也就是说此处是数值时不会影响其他图片,是雷或者空白就会影响其他图片的打开。
对于一张图片来说,如果此处是雷,先要设置不再响应鼠标事件,然后交换此处图片为explode,并且判断其他图片是否为雷,是雷的话把图片交换成explode。如果此处是空白,就会调用递归把周围的空白的图片自动翻开,知道遇见数字为止。程序如下:
void SweepMinesScene::Sweep(int x, int y) {
......
Sweep(x-1,y-1); ...... }
25
基于ARM9开发板的扫雷游戏设计 3.4.4 初始化的设计
每个人的喜好各不相同,在初始化设计中可根据每个人的喜好来设置雷区域的长和宽以及雷的个数。在前面已介绍过雷区域默认的宽为5,高为3,雷数为4。初始化设置可以自由改动这三项数值,只要雷数小于宽×高就可以了。
在前面控件的设计中我们设计了“选项”这个控件,当我们点击“选项”控件时会自动弹出一个对话框来让我们输入自己喜好的数值,如图3-11所示:
图3-11 初始化的设计
这属于dialog的设计,在前面控件设计中讲过为每个控件设计了信号槽机制。在工程下新添一个dialog的界面文件,在界面文件中把要弹出的对话框的形状设计好,然后把“选项”控件和dialog链接起来。再设计把dialog文本中的数值赋给底层数据的宽和高就可以了。我们假设设置宽度为10,高度为10,雷数为25,如图3-11所示:
图3-11 扫雷的初始化设计界面
此外此扫雷游戏还可以设计很多小功能,比如设计一个秒表来计算你用了多长时间,设计只要扫雷成功自动弹出一个dialog来提示成功,失败则弹出一个dialog来提示失败等等很多功能,在此不多做设计。
26
基于ANM9开发板的扫雷游戏设计 第四章 硬件部分的设计
前面的设计已完成了在PC机上运行的扫雷游戏,但随着现代社会的进步,现在已进入移动互联网时代,越来越多的人不再满足于在PC机上玩游戏,而是用移动设备玩游戏,比如掌上游戏机、移动电话、智能手机、平板电脑等等。
本章主要设计怎么把PC机上设计的扫雷游戏移植到移动设备上运行。
4.1 硬件介绍
4.1.1 开发板简介
开发板如图4-1所示,该开发板采用三星公司的 S3C2440处理器,并且有在板的64M的SDRAM内存,能完美的支持linux系统。其包括256M的nand flash,2M的nor flash。并且接口资源丰富,本设计用到的接口有以太网RJ45,USB host,USB slave,串口RS232,以及用户LED。本设计主要运用ARM开发板来做移植扫雷应用测试。如图4-1所示:
图4-1 ARM开发板简介
27
基于ARM9开发板的扫雷游戏设计 4.1.2 CPU简介
S3C2440A是韩国三星公司推出的16/32位RISC微控制器,其CPU采用的是ARM920T内核。
(1)特点:
1)具有PLL时钟发生器,主频最高可达533M。 2)内核1.2V供电最高400M,1.3V供电最高533M。 3)存储器支持1.8V、2.5V、3.0V、3.3V。 4)I/O均支持3.3V供电。
5)s3c2440为单机器周期执行指令集。
6)具有电源管理功能,可以使系统以普通方式、慢速方式、空闲方式和掉电方式工作,降低产品功耗。
(2)内核结构:
采用ARM920T内核,具有16KB指令Cache、16KB数据Cache和存储器管理单元MMU,五级流水线,指令高速存储缓冲器(I-Cache),数据高速存储缓冲器(D-cache)提高指令执行效率及数据存储效率,减少主存带宽和响应性带来的影响,加强的ARM体系结构MMU,用于支持winCE、linux等操作系统,内部高级微控制总线(AMBA)体系结构(AMB2.0,AHB/APB)。
(3)存储器控制器特性:
1)S3C2440采用总线结构管理片上外设及内存。
2)S3C2440的存储器管理器提供访问外部存储器的所有控制信号。 3)27位地址信号、32位数据信号、8个片选信号、以及读/写控制信号等。 4)总共有8个存储器bank(bank0—bank7),其中,bank0---bank5为固定128MB,bank6和bank7的容量可编程改变,可以是2、4、8、16、32、64、128MB,最大共1GB。bank0可以作为引导ROM,其数据线宽只能是16位和32位,其它存储器的数据线宽可以是8位、16位和32位。
5)8个存储器bank: bank0--bank5:SRAM、ROM。 Bank6—bank7:SRAM、ROM SDRAM。 6)s3c2440支持两种启动方式:
NOR FLASH启动,即代码直接写入NOR FLASH,运行时直接在NOR FLASH上运行。
NAND FLASH启动方式,即代码烧到NAND FLASH中,借助片内4K的sram,
28