扫雷程序解说文档
扫雷这个函数主要由 findthebomb.cpp findthebombapplication.cpp findthebombappui.cpp
findthebombappview.cpp findthebombdocument.cpp 五个文件组成.。 其中 findthebomb.cpp
findthebombapplication.cpp findthebombdocument.cpp 三个文件的内容主要是 symbian 框架,
这里不作过多讲解。 这里主要说明一下 findthebombappui.cpp findthebombappview.cpp 两个
文件中的函数及其作用。
先用 vs2003 运行此程序,会发现扫雷这个程序有以下几个功能:
1. 界面上有可视的格子,同时格子外周有边框
2. 有一个提示格,提示现在所在的位置
3. 上下左右 4 个方向键可以控制提示格的移动
4. 按下确定键后,程序会根据所在位置的不同状况(有雷与否)而有不同的提示
A. 如果所在位置是雷所在的位置,游戏结束,玩家输
B. 如果所在的位置不是雷所在的位置,系统会判断这个位置周围有多少雷,并显示
出来。如果周围也没有类,系统会自动打开周围的格子,直到周围有雷的格子停
止(这句话有些绕口,不过玩过扫雷的朋友应该能理解)并立刻显示打开过的格
子的状况
5. 判断胜利与失败:
6. 标记雷
7. 发现标记的地方不是雷,可以直接打开这个格子
8. 帮助,提示游戏规则
9. 重新开始
下面我想针对以上所列的 9 个功能,具体介绍一下这些功能都是又什么函数实现的:
界面上有可视的格子,同时格子外周有边框
实现这个功能的函数其实很容易找到,先介绍一下 SizeChanged()这个函数他的声明如下:
void CFindTheBombAppView::SizeChanged()
这个函数主要实现的是,把屏幕分为 81 个格子,这样利用指针函数可以有效地对每一个格子进行编辑。
但是这 81 个格子的边缘不可见,所以 用 Draw 函数(void CFindTheBombAppView::Draw(const
TRect& /*aRect*/) ) 来 画 出 所 有 格 子 的 四 周 , 至 于 周 边 的 边 框 , 函 数 中 也 有 讲 解 , 主 要 是
DrawBetweenRects 的原因这个自己可以理解
有一个提示格,提示现在所在的位置
void CFindTheBombTile::Draw(const TRect& /*aRect*/)下有一个语句
if (IsFocused())
{
gc.SetBrushColor(KRgbYellow);
}
这是问题的关键