wxDevcpp自带的example中有很多示例代码,这几天看了扫雷(bombs)程序的代码,在这里大致写一下设计的思路。
1、概述
每次扫雷游戏开始后雷的布局,都取决于计算机随机产生的一个一维数组m_field,我们将一个格子称为cell。
每一个数组元素自然使用m_field[x+y*m_width]表示,其中:
x = fx/(m_cellWidth*X_UNIT);
y = fy/(m_cellHeight*Y_UNIT);
fx表示鼠标光标所在位置的横坐标,
m_cellWidth*X_UNIT表示的是一个cell的横向长度(X_UNIT表示4个像素的单位长度),所以x就表示cell的横向位置,与之类似的可以推知y表示cell的纵向位置。
x+7*m_width用于将空间分布的(x,y)的cell变为一维数组来表示。
设定数组元素m_field[x+y*m_width]的格式如下:
Bit |
11 |
10 |
9 |
8 |
7 |
6 |
5-0 |
Menning |
EXPLODED |
MARKED |
BOMB |
HIDDEN |
SELECTED |
|
MASK |
并定义相应的参数值:
#define BG_HIDDEN 0x100。IsHidden函数:返回m_field[x+y*m_width] & BG_HIDDEN,bit8=1,判断是否是隐藏状态的cell;
#define BG_BOMB 0x200。IsBomb函数:返回m_field[x+y*m_width] &G_BOMB,bit9=1,判断是否是是雷的cell;
#define BG_MARKED 0x400:IsMarked函数:返回m_field[x+y*m_width] &