在 Flash 中由于右键单击会出现快捷菜单, 所以本游戏未使用鼠标右键以旗帜来标示格子有地雷, 而是自动标记出可以计算出是雷的位置。 原理是若周围未翻开的格子 (Mine.
SOURCE) 和已标记旗帜的格子 (Mine.FLAG) 的个数等于周围雷的个数 (aroundMineCount), 则将周围未翻开的格子标记为旗帜 (若个数刚好等于周围雷的个数, 则表示未点开的格子都是雷, 自动将它们标记)。
//标记出可以计算出是雷的位置
private function flagAllMine():void {
//遍历所有位置
for (var row=0; row<Grid.ROW_COUNT; row++)
for (var col=0; col<Grid.COL_COUNT; col++)
//若该位置为点开,则在周围检测
if (Mines [row] [col].state == Mine.
TRUN_OVER) {
if (Mines [row] [col].aroundMineCount ==
countAroundUnClick(row ,col)) {
flagAroundMine(row ,col);
}
}
}
//统计周围八个格子的未点开的格子和已标记旗帜
//的格子的个数
//(若个数刚好等于周围雷的个数,则表示未点开的
//格子都是雷,自动将它们标记)
private function countAroundUnClick (row:int ,col:
int):Number {
var aroundUnClickCount:Number = 0;
//周围未点开的格子和已标记旗帜的格子的个数
var tempX:Number;//x 位置
var tempY:Number;//y 位置
//遍历周围的八个格子
for (var i=-1; i<=1; i++) {
for (var j=-1; j<=1; j++) {
//去掉中心位置
if (i == 0 && j == 0) {
continue;
}
//获取位置
tempX = col + i;
tempY = row + j;
//确保位置在合法的范围之内
if ((tempX >= 0 && tempX < Grid.
COL_COUNT) &&
(tempY >= 0 && tempY <
Grid.ROW_COUNT)) {
//若该位置不是已点开的格
//子,则将统计个数加 1
if (Mines [tempY] [tempX].state ==
Mine.SOURCE ||
Mines [tempY][tempX]
state == Mine.FLAG)
aroundUnClick-
Count++;
}
}
}
return aroundUnClickCount;
}
//用旗帜标记某位置周围的雷
private function flagAroundMine(row:int ,col:int):void {
var tempX:Number;//x 位置
var tempY:Number;//y 位置
//遍历周围的八个格子
for (var i=-1; i<=1; i++) {
for (var j=-1; j<=1; j++) {
//去掉中心位置
if (i == 0 && j == 0) {
continue;
}
//获取位置
tempX = col + i;
tempY = row + j;
//确保位置在合法的范围之内
if ((tempX >= 0 && tempX < Grid.
COL_COUNT) &&
(tempY >= 0 && tempY <
Grid.ROW_COUNT)) {
//若该位置未点开,则用旗帜
//标记该位置为雷,将剩余雷的个数减一
if (Mines [tempY] [tempX].state ==
Mine.SOURCE) {
Mines [tempY][tempX].
state =Mine.FLAG ;
Mines [tempY][tempX].
setState(Mine.FLAG);
restMineCount--;
trace(restMineCount);
}
}
}
}
}
掌握以上设计思想就可以轻松开发游戏了。
3、游戏设计步骤
3.1、创建 Flash 文件
打开 Flash CS6 软件后, 选择 “文件” → “新建” 选项,系统将弹出 “新建文档” 窗口, 在窗口中选择 “ActionScript3.0” 选项。
3.1.1、设置文档属性
选择菜单 “修改”, 再选择 “文档” 选项, 调出 “文档属性” 对话框。 设置场景的尺寸为 530*550 像素, 背景颜色为白色, 然后单击 “确定” 按钮。 在属性面板设置文档类为Main。 单击 【文件 】 → 【导入 】 → 【导入到舞台 】, 导入素材文件笑脸图片到舞台, 并转变成元件, 实例名为 face。
在工具面板中选择文本工具, 在场景舞台上中间区域写上 “你过关了, 笑脸重新开始” 文字, 并在属性面板中将文本设置为动态文本, 并将实例命名为 win_txt。 同理添加显示剩余雷数动态文本, 并将实例命名为 restMineCount_txt; 显示已用时间动态文本, 并将实例命名为 timeCount_txt (并注意使用嵌入字体)。 并添加 2 个静态文本文字为 “剩余雷数:” 和“已用时间:”。
3.1.2、格子影片剪辑元件
选择菜单 “插入” → “新建元件”。 在新弹出的 “新建元件” 窗口中, 将元件名称设置为 “Grid”, 将元件类型设置为“ 影 片剪 辑 ” , 单 击 “ 确定 ” 按钮后 , Flash 界面 将 转 变 为“Grid” 元件的编辑区。 导入如图 2 所示 14 幅图, 注意每幅图缩放成大小 27*27。 链接类设置为 Grid。
图 2 格子图片素材