实验三打字游戏的实现.doc_第1页
实验三打字游戏的实现.doc_第2页
实验三打字游戏的实现.doc_第3页
实验三打字游戏的实现.doc_第4页
实验三打字游戏的实现.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

闽江学院教案课程名称Flash游戏编程 任课老师: 肖刚上机实验须知实验名称:打字游戏的实现实验目的:在掌握Flash中坐标系统的应用以及帧延迟循环的应用的基础上,结合人机交互的技术,实现一个美观实用的完整的Flash打字游戏。实验环境:1) 高档微机2) Windows操作系统中文版3) Flash CS3 Professional中文版实验原理:通过侦听Flash的键盘事件,获取事件对象,然后通过事件对象的keyCode值可以确认发生事件的是哪个按键。例如按下J键,那么Flash就会自动产生一个键盘事件对象,其keyCode值为74。每个按键都有一个唯一的键控代码,如附录所示。其它知识点基本上涵盖在坐标系统与延迟帧循环中,这里不再赘述。实验内容:本游戏开始之后,在屏幕下方不断出现上升的气球,每个气球上面都有一个字母,敲击键盘上对应的字母后,气球就会破裂。游戏时间为15分钟,游戏结束后会显示打字的速度和准确率。游戏分析:打字游戏的原理非常简单,只要侦听键盘事件,并判断键盘所代表的字母是否在屏幕上,并做相应的处理即可。实验步骤:1) 制作气球角色气球是一个类似弹球的角色,它内部时间轴的延迟循环实现了自动上漂以及爆炸后文字下落的运动效果,并提供一些对外函数,从而实现设置气球颜色、设置字母、爆炸等等视觉效果。气球角色对外的属性和方法如下:属性和方法说明inStage: Boolean气球是否在舞台上(上漂)的标识符idle: Boolean气球是否空闲的标识符setColor(col:uint)设置气球的颜色init(index:int)初始化气球的各个状态bomb()气球爆炸blast(speedLevel:int)发射气球已经完成了气球角色的时间轴如下图所示:气球角色的时间轴它有三个可视对象:气球皮肤、气球外框和显示字母的动态文本框。其中气球皮肤用来设置气球的色彩以及爆炸的动画和声音效果,这里不再赘述。设置三个对象的实例名称分别为edge、skin、txt_char。action图层的第1帧代码为:var inStage:Boolean,idle:Boolean;var speed:Number;/气球的速度var index:int;/气球的索引var g:Number;/重力加速度stop();function setColor(col) var ct:ColorTransform = new ColorTransform();ct.color=col;skin.transform.colorTransform =ct;function init(i:int=-1) index=iif (index!=-1) txt_char.text=String.fromCharCode(index+65);/设置气球的各个初始状态setColor(uint(Math.random()*0x88FFFF);edge.visible=true;skin.gotoAndStop(1);gotoAndStop(1);this.y=420;inStage=false;idle=true;g=0;speed=-2;function bomb() edge.visible=false;skin.gotoAndPlay(2);inStage=false;g=0.5;speed=-speed;function blast(speedLevel:int=2) this.x=Math.random()*510+20;speed=speed*speedLevel;inStage=true;idle=false;play();第2帧代码为:this.y += speed;if (this.y=440) /打落的字符已经掉出舞台外。init();第3帧的代码为:gotoAndPlay(2);在库中选中气球剪辑,点击右键选择“链接”,钩选“为ActionScript导出”,设置其链接名字为Balloon。2) 游戏主场景设计已完成的游戏主场景时间轴入下图所示:打字游戏的主时间轴其中背景为一张静态的图片。按钮图层放置着游戏各个阶段所需的可视对象。第1帧的界面如下图所示:打气球游戏的第1帧这一帧的作用是显示游戏名字、说明并等待开始。设置“开始”按钮的实例名称为:bt_start。第2帧的界面如下图所示:打气球游戏的第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帧的代码如下:import flash.events.TimerEvent;import flash.utils.Timer;/游戏参数的初始值var speedLevel:int=1;var time:int=2;var maxCount:int=5;var matchCount:int,loseCount:int,timeLeft:int,percent:int;var timer:Timer;/创建气球数组var balloonList:Array=new Array();for (var i=0; i26; i+) var balloon:Balloon=new Balloon();balloon.init();addChild(balloon);balloonList.push(balloon);stop();bt_start.addEventListener(MouseEvent.CLICK,startGame);function startGame(MouseEvent) gotoAndStop(setting);这一帧的代码设置了游戏的初始参数,以及创建26个字母键所对应的气球数组,并响应玩家点击“开始”按钮的操作。第2帧的代码如下:stop();bt_OK.addEventListener(MouseEvent.CLICK,init);function init(MouseEvent) matchCount=0;loseCount=0;speedLevel=int(cmb_speed.value);time=int(cmb_time.value);maxCount=int(cmb_maxCount.value);timeLeft=time*60;timer= new Timer(1000, timeLeft);timer.start();for (var i=0; i26; i+) MovieClip(balloonListi).init(i);gotoAndStop(playing);这一帧的作用是当玩家点击“OK”按钮之后,根据玩家的参数设置,初始化游戏中的各个变量并进入游戏中。第3帧的代码如下:/用来处理玩家的按键操作stage.addEventListener(KeyboardEvent.KEY_DOWN,onPressKey);/用来递减游戏的剩余时间timer.addEventListener(TimerEvent.TIMER, onTimer);/用来处理时间结束时的操作timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerOut);/按一定的随机时间发射新的气球stage.addEventListener(Event.ENTER_FRAME,blast);stop();updateView();/更新界面上的成绩和倒计时时间显示function onPressKey(k:KeyboardEvent) /通过键控代码确定按键的索引var index=k.keyCode-65;if (index26) /非字母键,肯定是按错了。loseCount+; else if (balloonListindex.inStage=true) /这个字母键正好在舞台上matchCount+;balloonListindex.bomb(); else /这个字母不在舞台上loseCount+;updateView();function onTimer(TimerEvent) timeLeft-;txt_timeLeft.text=String(timeLeft);function onTimerOut(TimerEvent) stage.removeEventListener(KeyboardEvent.KEY_DOWN,onPressKey);stage.removeEventListener(Event.ENTER_FRAME,blast);gotoAndStop(score);function updateView() txt_count.text=String(matchCount+loseCount);if (loseCount=0) txt_percent.text=100; else txt_percent.text=String(int(100*matchCount/(matchCount+loseCount);function blast(Event) /按一定的随机几率发射气球if (Math.random()*100/speedLevel5) return;var inStageCount:int=0;for (var i=0; i=maxCount) /舞台上已经有足够多的气球trace(Enough);return;/随机寻找一个不在舞台上的气球do i=int(Math.random()*26); while (balloonListi.idle=false);trace(blast+i);/产生一个新的气球MovieClip(balloonListi).blast(speedLevel);function loseBalloon() loseCount+;if (timeLeft0) updateView();这一帧的代码用来实现游戏的程序逻辑。基本过程就是侦听玩家敲击键盘的事件,并根据按键、舞台上的气球情况等判断得分还是失分,这通过onPressKey函数实现。随机发射气球的函数也比较重要,它控制着上漂气球的数量,通过blast函数实现。第4帧的代码如下:bt_restart.addEventListener(MouseEvent.CLICK,startGame);txt_typeSpeed.text=String(Math.round(matchCount+loseCount)/time);txt_finallyPercent.text=String(int(100*matchCount/(matchCount+loseCount);这一帧的代码用来显示最后的成绩并等待玩家点击“重玩”按钮的操作。4) 测试程序,直到达到原定的效果为止。自此完成了打字游戏的制作,这个游戏运行时的一个截图如下所示:打字游戏的截图截图中的字母O和M为气球被打爆后正在下落的字母。附录键控代码与ASCII代码对照表下表列出了标准键盘上字母 A 到 Z 和数字 0 到 9 的键,及其相应的键控代码值,以及相应的ASCII键控代码。键控代码对每个按键具有唯一性,而ASCII键控代码则对每一个字符具有唯一性。这些值用于在 ActionScript 中标识这些键:字母或数字键键控代码ASCII 键控代码字母或数字键键控代码ASCII 键控代码A6565a6597B6666b6698C6767c6799D6868d68100E6969e69101F7070f70102G7171g71103H7272h72104I7373i73105J7474j74106K7575k75107L7676l76108M7777m77109N7878n78110O7979o79111P8080p80112Q8181q81113R8282r82114S8383s83115T8484t84116U8585u85117V8686v86118W8787w87119X8888x88120Y8989y89121Z9090z9012204848553531494965454250507555535151856564525295757下表列出了数字键盘上的按键的键控代码值与ASCII键控代码。数字键盘上的按键键控代码A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论