学术堂首页 | 文献求助论文范文 | 论文题目 | 参考文献 | 开题报告 | 论文格式 | 摘要提纲 | 论文致谢 | 论文查重 | 论文答辩 | 论文发表 | 期刊杂志 | 论文写作 | 论文PPT
学术堂专业论文学习平台您当前的位置:学术堂 > 计算机论文 > flash论文

Flash扫雷游戏设计思路与步骤(4)

来源:学术堂 作者:周老师
发布于:2016-10-21 共7626字
  3.2、游戏文档类

  选择 “文件” → “新建” 选项, 系统将弹出 “新建文档”窗口。 在窗口中选择 “ActionScript 文件” 选项。 这样在 Flash中新建一个 ActionScript 类文件, 将其命名为 Main.as。 导入包及相关类:

package {
import flash.display.MovieClip;
import flash.text.TextField;
import flash.utils.Timer;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;
import flash.events.ContextMenuEvent;

  类成员变量定义:

public class Main extends MovieClip {
private var restMineCount:Number = 15;//剩余雷的个数//注:用格子元件排列来布局,格子元件可显示雷、数字等
private var isStart:Boolean = true;//游戏是否开始//(游戏开始后才计时)
private var isOver:Boolean = false;//游戏是否结束
private var Mines:Array =new Array();//所有格子的数组
private var timer:Timer = new Timer(1000);//计时//器,为游戏计时时间间隔为1000 毫秒(1 秒)
public static const LEFT_MARGIN:Number = 11;//格子的左边距
public static const TOP_MARGIN:Number = 61;//格子的上边距
public static const HORIZONTAL_SPACING:Number = 2;//格子间的横向间隔
public static const VERTICAL_SPACING:Number= 2;//格子间的纵向间隔
private var myMenu: ContextMenu;//右键菜单

  构造函数 Main() 对调用 init() 动态添加所有的格子, 同时在添加表情的 “鼠标按下” 事件的侦听, 其单击事件响应函数设置为 faceMouseDownHandler()。 添加计时器的 “计时” 事件, 每间隔一秒刷新显示剩余雷数。 调用 LayMines() 随机在格子中布雷, 最后自定义右键菜单 ContextMenu, 声明菜单新项, 显示名为 “扫雷———右键标示雷”。

public function Main() {
init();
win_txt.visible=false; //成功文字提示不可见添加表情的“鼠标按下”事件
face.addEventListener (MouseEvent.
MOUSE_DOWN, faceMouseDownHandler);//添加计时器的“计时”事件,刷新剩余雷显示,刷新计时显示
timer.addEventListener (TimerEvent.TIMER,
timerHandler);
timer.start();
refreshRestMineCount();
refreshTimeCount();
LayMines(); // 布雷设置右键菜单需要 ContextMenu 类定义了一个 ContextMenu 类型的对象 myMenu,这个对象将用来对菜单的操作
myMenu = new ContextMenu();
myMenu.hideBuiltInItems();//隐藏系统内置的菜单声明菜单新项,显示名为“扫雷———显示所有雷”
var item:ContextMenuItem = new ContextMenu-Item("扫雷———显示所有雷");
//添加到菜单显示项目数组(定义这个菜单项的响应事件)
myMenu.customItems.push(item);item.addEventListener (ContextMenuEvent.MENU_ITEM_SELECT,menuSelect);
this.contextMenu = myMenu;
}//初始化,创建所有的格子
private function init():void {
//…
}
private function menuSelect(e:ContextMenuEvent):void {
trace("menuSelect");
displayAllMine();//显示全部雷
}//表情的“鼠标按下”事件处理,将计时清零,重新生成雷等
private function faceMouseDownHandler (event:
MouseEvent):void {//将剩余雷的个数还原,并显示剩余雷的个数
restMineCount = Mine.MINE_COUNT;
refreshRestMineCount();//将计时清零
timer.reset();
refreshTimeCount();//还原格子的状态(因前局游戏排放了雷,所以需要清除还原)
for (var row=0; row<Grid.ROW_COUNT; row++) {
for (var col=0; col<Grid.COL_COUNT; col++) {
Mines[row][col].isMine = false;
Mines[row][col].setState(Mine.SOURCE);
}
}
isStart = true;//标记游戏开始(游戏开始,才开始计时)
timer.start();
LayMines(); // 布雷
win_txt.visible=false; //成功文字提示不可见
isOver = false;//标记游戏未结束
}
//计时器的“计时”事件处理,刷新显示已用时间(秒)
private function timerHandler(event:TimerEvent):void {//是否开始,游戏开始后,“计时”事件处理才有效
if (isStart) {
refreshTimeCount();//游戏用时若大于或等于 200 秒,则游戏结束
if (timer.currentCount >= 200) {endGame();
}
}
}
//更新显示剩余的雷个数
private function refreshRestMineCount():void {
restMineCount_txt.text = restMineCount.toString();
}
//更新显示已用时间
private function refreshTimeCount():void {
timeCount_txt.text = timer.currentCount.toString();
}
//游戏结束,停止计时,显示全部雷,标记游戏未开//始,标记游戏结束
private function endGame():void {
timer.stop();
displayAllMine();
isStart = false;
isOver = true;
}//显示全部雷
private function displayAllMine():void {//遍历所有位置
for (var row=0; row<Grid.ROW_COUNT;row++) {
for (var col=0; col<Grid.COL_COUNT;col++) {
//若该位置未点开,且为雷,则将雷显示出来
if (Mines[row][col].isMine)
Mines[row][col].setState(Mine.MINE);
}
}
}
//检测是否过关,若剩余雷的个数为 0,则过关
private function checkPass():Boolean {
if (restMineCount == 0) {
return true;
} else {
return false;
}
}
//…其余相关代码见前文//添加格子的“鼠标移入”事件
private function gridMouseOverHandler (event:MouseEvent):void {
var gridTarget:Grid =(Grid) (event.currentTar-get);//当前格子
gridTarget.alpha=0.6; //透明度,调节范围是//从透明(0%) 到完全饱和(100%)。}//添加格子的“鼠标移出”事件
private function gridMouseOutHandler (event:MouseEvent):void {
var gridTarget:Grid =(Grid) (event.currentTar-get);//当前格子
gridTarget.alpha=1;
}

  4、结语

  采用格子 Grid 类对象数组实现扫雷游戏, 并且能够显示剩余的雷数和显示所花费的时间信息, 读者可以适当修改将此游戏改成任意设置雷数和行列的扫雷, 使得游戏更具挑战性, 从而更吸引玩家。

相关标签:
  • 报警平台
  • 网络监察
  • 备案信息
  • 举报中心
  • 传播文明
  • 诚信网站