trace(arr[i]);
}
}
functionaddBomb(bombNumber:
int){//给雷区添加k个地雷
if(bombNumber>m*n){
return;
}
vari,j,k;
while(bombNumber>0){
k=int(Math.random()*m*n);
i=int(k/n);
j=k%m;
if(cells[i][j]!
=1){
cells[i][j]=1;
bombNumber--;
}
}
}
代码2:
vararounds:
Array=calAround(cells);
trace("每个位置周围的地雷数为:
");
trace2DArray(arounds);
functioncalAround(arr):
Array{
//请补充完整
}
functionaround(i:
int,j:
int):
int{
//请补充完整
}
五、注意事项
1、不能看电影、听音乐、聊天、浏览网页;
2、实训结果发送到教师邮箱;
六、实训报告要求及成绩评定
1、认真填写实训报告表中的各项内容。
2、按照实际操作的顺序把实训的过程填写好。
3、学生书写的语句可以不相同,但要求最后结果要能出来。
实训成绩在符合要求的前提下,根据最后程序的完成质量与难度评定。
实训二弹球程序的实现
一、实训目的
1、了解Flash中的坐标系统;
2、理解帧延迟循环及其应用;
3、掌握将简单的物理运动公式应用到Flash中的方法;
4、运用影片剪辑嵌套技术将运动封装在剪辑中;
二、实训设备与环境
Windows操作系统+Adobeflashcs4软件
三、实训要求
在FlashCS4中,创建一个小球,并设计让它模拟在重力条件下的弹跳运动。
其中重力和阻尼系数可以任意设置。
选做:
让作品中出现100个这样的弹球。
四、实训步骤与要点
1)打开FlashCS4Professional,选择【文件】|【新建】,或者按Ctrl+N,弹出新建文档对话框。
选择“Flash文档(ActionScript3.0)”,按确定新建一个Flash文档。
1)设置文档尺寸为800×600,背景为黑色,帧频率为50。
点击“确定”按钮。
2)将图层1改名为“弹球”,然后在弹球图层绘制一个小球。
选中小球,设置小球的宽高都为40,然后按F8,将其转化为元件,类型为影片剪辑,中心位置为几何中心。
3)选中这个弹球,在属性面板中设置实例名称为ball。
4)点击弹球图层第3帧,然后按F5插入非关键帧。
这样ball对象在三帧内都有效。
5)新建图层,改名为action。
然后在其第1帧进行程序的初始化,输入代码1。
6)点击action图层的第2帧,按F6插入关键帧,在这一帧放置被重复执行的关键代码。
输入代码2。
提示:
当在拖动状态下,通过前后时刻的坐标计算当前的速度。
当在非拖动状态下,则根据加速度修改速度、根据速度计算下一时刻坐标,根据坐标位置进行反弹、碰撞损失等计算,然后将坐标赋值给ball对象。
7)点击action图层的第3帧,按F6插入关键帧,然后输入帧跳转语句:
gotoAndPlay
(2);
这段代码让时间轴播放头跳回第2帧,于是形成典型的三帧循环。
8)按Ctrl+S保存文件,然后选择【控制】|【测试影片】,或者按Ctrl+Enter测试影片,直到达到原定效果。
尝试修改各个运动参数,看有什么效果。
9)继续编写代码,实现在屏幕上显示100个这样的弹球。
(自行完成)
代码1:
vardragging:
Boolean=false;//状态参数,指明是否正在被拖动
varg:
Number=0.1;//重力参数
varzuni:
Number=0.998;//空气阻尼系数
varpzss=0.1;//碰撞损失参数
varspeedx=0;//x方向的速度
varspeedy=0;//y方向的速度
varnewx=ball.x;//当前时刻的坐标
varnewy=ball.y;
varoldx=newx;//前一时刻的坐标
varoldy=newy;
varstageHeight=600,stageWidth=800;//屏幕的尺寸
varradio=ball.width/2;//小圆的半径
ball.addEventListener(MouseEvent.MOUSE_DOWN,dragBall);
ball.addEventListener(MouseEvent.MOUSE_UP,dropBall);
functiondragBall(evt:
MouseEvent){
dragging=true;
evt.target.startDrag();
}
functiondropBall(evt:
MouseEvent){
dragging=false;
evt.target.stopDrag();
}
代码2:
if(dragging){
newx=ball.x;
newy=ball.y;
speedx=newx-oldx;
speedy=newy-oldy;
oldx=newx;
oldy=newy;
}else{
speedy=(speedy+g)*(zuni);
speedx=speedx*(zuni);
newx=ball.x+speedx;
newy=ball.y+speedy;
if(newxstageWidth-radio){
speedx=-speedx*(1-pzss);
}else{
ball.x=newx;
}
if(newystageHeight-radio){
speedy=-speedy*(1-pzss);
}else{
ball.y=newy;
}
}
五、注意事项
1、不能看电影、听音乐、聊天、浏览网页;
2、实训结果发送到教师邮箱;
六、实训报告要求及成绩评定
1、认真填写实训报告表中的各项内容。
2、按照实际操作的顺序把实训的过程填写好。
3、实训成绩在符合要求的前提下,根据最后程序的完成质量评定。
实训三打字游戏的实现
一、实训目的
进一步掌握Flash中坐标系统的应用以及帧延迟循环的应用,在此基础上,运用人机交互的技术,实现一个美观实用的完整的Flash打字游戏。
二、实训设备与环境
Windows操作系统+Adobeflashcs4软件
三、实训要求
游戏开始之后,在屏幕下方不断出现上升的气球,每个气球上面都有一个字母,敲击键盘上对应的字母后,气球破裂。
游戏时间为1~5分钟,游戏结束后要显示打字的速度和准确率。
四、实训步骤与要点
1)制作气球角色
气球是一个类似弹球的角色,它内部时间轴的延迟循环实现了自动上漂以及爆炸后文字下落的运动效果,并提供一些对外函数,从而实现设置气球颜色、设置字母、爆炸等等视觉效果。
气球角色对外的属性和方法如下:
属性和方法
说明
inStage:
Boolean
气球是否在舞台上(上漂)的标识符
idle:
Boolean
气球是否空闲的标识符
setColor(col:
uint)
设置气球的颜色
init(index:
int)
初始化气球的各个状态
bomb()
气球爆炸
blast(speedLevel:
int)
发射气球
已经完成了气球角色的时间轴如下图所示:
气球角色的时间轴
它有三个可视对象:
气球皮肤、气球外框和显示字母的动态文本框。
其中气球皮肤用来设置气球的色彩以及爆炸的动画和声音效果,这里不再赘述。
设置三个对象的实例名称分别为edge、skin、txt_char。
action图层的第1帧代码为:
第2帧代码为:
this.y+=speed;
if(this.y<=-20){//气球已经飘出舞台外
MovieClip(parent).loseBalloon();
this.y=420;
init();
}
if(this.y>=440){//打落的字符已经掉出舞台外。
init();
}
第3帧的代码为:
gotoAndPlay
(2);
在库中选中气球剪辑,点击右键选择“链接”,钩选“为ActionScript导出”,设置其链接名字为Balloon。
2)游戏主场景设计
已完成的游戏主场景时间轴入下图所示:
打字游戏的主时间轴
其中背景为一张静态的图片。
按钮图层放置着游戏各个阶段所需的可视对象。
第一帧的作用是显示游戏名字、说明并等待开始。
设置“开始”按钮的实例名称为:
bt_start。
第2帧的作用是提供游戏中的几个参数设置。
三个组合框组件分别用来设置游戏速度等级、游戏时间和同时在舞台上的气球的最大数量。
在参数栏中设置它们的数据项(DataProvider)。
设置三个组合框的实例名称分别为:
cmb_speed、cmb_time、cmb_maxCount,设置“OK”按钮的实例名称为bt_OK。
第3帧为游戏中界面,在背景的基础上增加了游戏成绩的动态显示。
它们为多个动态文本框,如下图所示:
游戏中成绩的动态显示
设置三个动态文本框的实例名称分别为:
txt_count、txt_percent、txt_timeLeft。
第4帧为游戏结束后的成绩显示。
设置两个动态文本框的实例名称分别为:
txt_typeSpeed、txt_finallyPercent,设置“重玩”按钮的实例名称为:
bt_restart。
3)程序编程
主时间轴的所有代码都在action图层上,其中第1帧的代码设置了游戏的初始参数,以及创建26个字母键所对应的气球数组,并响应玩家点击“开始”按钮的操作。
第2帧的代码的作用是当玩家点击“OK”按钮之后,根据玩家的参数设置,初始化游戏中的各个变量并进入游戏中。
第3帧的代码用来实现游戏的程序逻辑。
基本过程就是侦听玩家敲击键盘的事件,并根据按键、舞台上的气球情况等判断得分还是失分,这通过onPressKey函数实现。
随机发射气球的函数也比较重要,它控制着上漂气球的数量,通过blast函数实现。
第4帧的代码的代码用来显示最后的成绩并等待玩家点击“重玩”按钮的操作。
4)测试程序,直到达到原定的效果为止。
五、注意事项
3、不能看电影、听音乐、聊天、浏览网页;
4、实训结果发送到教师邮箱;
六、实训报告要求及成绩评定
4、认真填写实训报告表中的各项内容。
5、按照实际操作的顺序把实训的过程填写好。
6、实训成绩在符合要求的前提下,根据最后程序的完成质量评定。
实训四Flash角色设计的实现
一、实训目的
理解角色设计思想,设计战场生存记游戏中的主要角色:
英雄、大炮和炮弹并熟练使用。
二、实训设备与环境
Windows操作系统+Adobeflashcs4软件
三、实训要求
设计游戏:
一个英雄在一个空旷的战场上被包围了,四周布满了大炮。
大炮总是会往英雄所在的位置开炮,按方向键进行上下左右跑动。
这里将游戏分为若干个角色。
其中主要角色包括:
1)英雄:
它可以在屏幕的范围内到处跑动,躲避炮弹的袭击。
如果被炮弹打中游戏就结束了。
2)大炮:
它总是能够自动对准英雄所在的方向,然后随机地打出炮弹。
3)炮弹:
被发射出来以后就沿着一条直线运动直到运动到屏幕范围之外,当碰到英雄的时候英雄将被打中而死去。
实验简化为英雄可以到处跑,大炮总是对准英雄,随机打出炮弹,但炮弹对英雄不起作用。
也就是完成大炮、英雄、炮弹三个角色的主要功能即完成本实验。
四、实训步骤与要点
1)新建Flash文档(ActionScript3.0),设置文档的帧频率为50,大小为490*540。
2)导入声音:
导入三个声音文件,它们分别是跑动的声音、爆炸的声音的开炮的声音。
分别链接为RunningSound、BombSound、ShootSound输出。
3)设计英雄
确定这个角色的成员为:
成员
成员描述
status
角色当前所处的状态
run(direction)
向指定的方向跑动
stand()
站立不动
dead()
死去
设计这个角色的动画,将这个角色的动画展开如下图所示:
将动画串在一个剪辑中。
总共8帧,第1帧空白,2~8帧内容与上图编号顺序对应。
对齐这些素材,使得播放时是一个完整的动画效果。
在这个剪辑的时间轴上新建图层,改名为action,设置第2帧的帧标签为stop,第3帧为run,第8帧为dead(先将它们设置为关键帧)。
在第1、2、3、7、8帧处编写相关代码。
于是完成了这个角色的设计,后面将把这个角色用于多个游戏中。
测试这个角色的方法:
将这个角色应用在游戏中。
步骤如下:
a)将做好的英雄剪辑从库中拖出置于舞台上。
由于剪辑的第一帧是空白的,所以我们这个时候在舞台上看到的是一个空心的圆圈。
b)选中这个剪辑实例,在属性栏中设置它的实例名称为hero。
c)在主时间轴剪辑中新建图层,改名为action,然后在第一帧输入相应代码:
保存文件,然后按Ctrl+Enter测试程序,看时候能够用键盘方向键控制这个角色的四处跑动。
4)制作炮弹
炮弹在被创建之后直线运动,这个我们已经能够轻松实现了。
炮弹角色应该包含如下的成员:
成员
成员描述
setEnemy(enemy)
给炮弹注册一个敌人
setSpeed(jiaodu,speed)
设置炮弹发射的角度和速度
moveBall()
以当前速度移动一次炮弹
repeat()
重复执行的代码,与enterFrame事件配合
事实上,当炮弹被复制后设置它的位置、速度、注册敌人之后,其它所有操作都在repeat函数中自动完成,不需要添加更多的代码。
已经做好的炮弹剪辑的时间轴如下图所示:
炮弹剪辑的时间轴
其中炮弹图层第1帧绘制一个大约5*5尺寸的小圆素材,表示炮弹,接着2~4帧为小圆爆破的一个小动画。
在action图层第1帧中输入相应代码:
第2帧设置帧标签为bomb,并输入以下代码:
vars=newBombSound();
s.play();
这段代码指示当炮弹爆炸的时候播放爆炸的声音,其中BombSound是爆炸音效的链接名称。
到第4帧时炮弹已经爆炸完毕,应该删除这个炮弹。
代码如下:
stop();
removeEventListener(Event.ENTER_FRAME,repeat);
parent.removeChild(this);
完成炮弹的设计后,将其链接为Bullet以备使用。
5)设计大炮
这里设计的大炮非常“聪明”,它总能知道英雄在哪里,并不时向英雄发出致命的炮弹。
很明显,这又是通过延迟一段时间就重复执行一段代码来实现。
由于炮管需要在运行时旋转,所以设计成一个独立的剪辑嵌套在大炮剪辑内。
设计好的大炮如下图所示:
大炮剪辑的可视对象
炮管的原点即为大炮剪辑的原点,这样在程序中控制它的旋转就会比较方便。
设置炮管的实例名称为paoguan。
由于后面需要精确确定炮弹的初始位置,所以在炮管剪辑内又嵌着炮头剪辑,以便用它的坐标来确定炮弹的出口。
炮头的实例名称设置为paotou。
大炮剪辑只有一帧,在这一帧上输入相应的代码:
这里德代码首先确定炮弹要瞄准的对象(enemy),然后重复执行一段代码。
这段代码的作用是跟踪enemy的位置,让炮管瞄准enemy,并且按一定的随机几率发射炮弹。
这里将enemy硬性设置为其父层级的hero实例。
将大炮剪辑从库中拖出置于舞台上,可以多复制几个剪辑,排布于舞台的四周,保存文件,按Ctril+Enter测试程序,看是否达到原定的要求。
五、注意事项
5、不能看电影、听音乐、聊天、浏览网页;
6、实训结果发送到教师邮箱;
六、实训报告要求及成绩评定
7、认真填写实训报告表中的各项内容。
8、按照实际操作的顺序把实训的过程填写好。
9、实训成绩在符合要求的前提下,根据最后程序的完成质量评定。
实训五扫雷游戏的实现
一、实训目的
掌握二维编码方式编码地雷地图的方法,然后运用二维地图实现扫雷游戏的各个部分的算法,最终实现整个扫雷游戏。
二、实训设备与环境
Windows操作系统+Adobeflashcs4软件
三、实训要求
模拟实现类似于Windows自带的小游戏“扫雷”。
可以手动地设置难度级别,或者可以直接设置地图的尺寸,和地雷的数量,然后开始游戏。
四、实训步骤与要点
1)制作方块角色
很明显,扫雷游戏中的每一个方格,都是一个雷区单元角色的实例。
这个雷区单元应该包含如下的成员:
成员
成员描述
discovered
是否被打开了
haveMine
是否有地雷
haveFlag
是否有旗帜
i、j
雷区单元所在的位置
各个界面
如未打开、显示地雷、爆炸、显示周围雷数等界面
showMine()
显示地雷界面
showExplode()
显示地雷爆炸界面
showInit()
显示初始化时的界面
showAround(num)
显示地雷被排除的界面
flag()
显示/隐藏旗帜
方块角色的每一帧的内容如下图所示:
第一帧有相应的初始化代码
第二帧为默认的状态,时间轴应该停止在这一帧。
代码:
stop();
至此我们已经完成这个角色的设计,在库中选中这个方块剪辑,点击右键,选择“链接…”,将其链接为Cell输出。
2)布置场景
扫雷游戏只有一帧。
时间轴如图所示:
界面中有几个文本框,各文本框的实例名称分别为:
txtLineCount、txtRowCount、txtMineCount、txtMineLeft。
开始按钮的实例名称为:
bt_start,预设下拉框的实例名称为:
mode。
设置预设下拉框内的相应数据选项。
3)编写代码
本游戏的所有代码都集中在第一帧上。
其中各种变量都是程序中要使用到的,通过setMode方法可以选择预设的游戏参数。
通过startGame进行游戏的初始化。
startGame是游戏的一个关键部分。
其函数的定义如下:
functionstartGame(e:
MouseEvent){
if(!
init()){
returnfalse;
}
fillCells();//平铺方块
setMines();//设置地雷
activeCells();//激活地图
}
自上而