flash打字游戏源代码

这是一个关于Flash打字游戏的源代码实现。游戏包括开始、说明、计分和结束等逻辑。当玩家击中50个苹果时获胜,丢失20个则失败。游戏使用计时器控制苹果下落,监听键盘事件进行打字判断,同时更新得分。
摘要由CSDN通过智能技术生成

package{
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.utils.setTimeout;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.text.TextField;
import flash.display.DisplayObject;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFieldAutoSize;
import flash.display.SimpleButton;
public class Game extends Sprite{
private var Fruit_MC:MovieClip = new MovieClip();
private var Score_MC:MovieClip;
private var Score:uint = 0;//初始分数
private var Get_Num:uint = 0; //击中个数
private var Lose_Num:uint = 0;//丢失个数
private var myTimer:Timer;//计时器
private var loseNum:int = 20;//丢失20个即失败
private var getNum:int =50;//击中50个即胜利
private var False_MC:MovieClip;
private var Win_MC:MovieClip;
private var bool:Boolean;
public function Game(){
stage.scaleMode=StageScaleMode.EXACT_FIT ;
//整个应用程序在指定区域中可见,但不尝试保持原始高宽比
stage.align=StageAlign.TOP_LEFT;
//舞台顶部左对齐
init();//初始化
}
private function init():void{
Btn_MC.Play_Btn.addEventListener(MouseEvent.CLICK,playGame);
//侦听“开始”按钮的鼠标单击事件,调用playGame()函数开始游戏
Btn_MC.Intro_Btn.addEventListener(MouseEvent.CLICK,GameIntro);
//侦听“说明”按钮的鼠标单击事件,调用GameIntro()函数弹出游戏说明界面
}
//开始游戏
private function playGame(event:MouseEvent):void{
BG.alpha=0.8;
//定义背景的Alpha透明度
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDown);
//侦听键盘的按下事件
hideAll(root);
//隐藏游戏开始界面
Score_Show(); //显示记录分数
Fruit_Show(null); //开始掉落苹果
var delay:uint = 2000;
//定义掉落苹果的间隔时间
var repeat:uint = 100;
//定义掉落苹果的次数
myTimer = new Timer(delay,repeat);
//创建Timer实例
myTimer.addEventListener(TimerEvent.TIMER,Fruit_Show);
//侦听Timer实例的时间事件,并调用Fruit_Show()函数开始掉落苹果
myTimer.start();
//启动计时器
addEventListener(Event.ENTER_FRAME,False);
//侦听时间轴事件,判断是否到达失败条件
addEventListener(Event.ENTER_FRAME,Win);
//侦听时间轴事件,判断是否到达胜利条件
}
//失败
private function False(event:Event):void{
if (Lose_Num>=loseNum){
//如果丢失苹果的个数大于等于游戏设置的个数20
removeEventListener(Event.ENTER_FRAME,False);
removeEventListener(Event.ENTER_FRAME,Win);
//移除侦听时间轴事件
myTimer.reset();
//如果计时器正在运行,则停止计时器,并将currentCount属性设回为0
myTimer.removeEventListener(TimerEvent.TIMER,Fruit_Show);
//移除侦听Timer实例的时间事件
Del_All();
//删除舞台中所有苹果
removeChild(Fruit_MC);
//将苹果容器删除
False_MC = new false_mc();
//实例化游戏失败界面对象
False_MC.x = stage.stageWidth/2;
False_MC.y = stage.stageHeight/2;
//定义游戏失败界面的位置
addChild(False_MC);
//将游戏失败界面显示在舞台中
bool=false;
//定义游戏失败
False_MC.Replay_Btn.addEventListener(MouseEvent.CLICK,Replay);
//侦听重新开始按钮的鼠标单击事件,调用Replay()函数重新开始游戏
}
}
//重新开始
private function Replay(event:MouseEvent):void{
Score=0;
Get_Num=0;
Lose_Num=0;
//将总分数、击中数和丢失数设置为0
Score_MC.Score_Text.text=“0”;
Score_MC.Get_Text.text=“0”;
Score_MC.Lose_Text.text=“0”;
//将总分数、击中数和丢失数动态文本的值设置为0
if (bool==false){
//如果为失败条件
removeChild(False_MC);
//移除游戏失败界面
}else{
removeChild(Win_MC);
//移除游戏胜利界面
}
playGame(null)
//开始游戏
}
//胜利
private function Win(event:Event):void{
if (Get_Num>=getNum){
//如果击中个数大于等于游戏设置的击中个数50
removeEventListener(Event.ENTER_FRAME,False);
removeEventListener(Event.ENTER_FRAME,Win);
//移除侦听时间轴事件
myTimer.reset();
myTimer.removeEventListener(TimerEvent.TIMER,Fruit_Show);
Del_All();
removeChild(Fruit_MC);
Win_MC = new win_mc();
//实例化游戏胜利界面对象
Win_MC.x = stage.stageWidth/2;
Win_MC.y = stage.stageHeight/2;
//定义游戏胜利界面对象的位置
addChild(Win_MC);
//将游戏胜利界面对象显示在舞台中
bool=true;
Win_MC.Replay_Btn.addEventListener(MouseEvent.CLICK,Replay)
//侦听“重新开始”按钮的鼠标单击事件
}
}
private function Score_Show():void{
var rect:Sprite = new Sprite();
//创建Sprite对象
var w:int = stage.stageWidth;
var h:int = 40;
//定义对象的宽度和高度
var X:int = 0;
var Y:int = stage.stageHeight-h;
//定义对象的坐标
rect.graphics.beginFill(0x000000);
rect.graphics.drawRect(X,Y,w,h)
rect.graphics.endFill();
//根据指定参数绘制一个矩形
rect.alpha=0.5;
//定义矩形的Alpha透明度
addChild(rect);
//将矩形显示在舞台中
Score_MC = new score();
//实例化显示分数界面对象
Score_MC.x = 20;
Score_MC.y = Y;
//定义显示分数界面的位置
addChild(Score_MC);
//将显示分数界面显示在舞台中
}
//按键
private function keyDown(event:KeyboardEvent):void{
var keyCode:uint = event.charCode;
//获取按键的键盘码
var str:String = String.fromCharCode(keyCode)
//将键盘码转换为相应的字母
var mc = Fruit_MC.getChildByName(str);
//根据该字母查询相同名称的苹果对象
if (mc){
//如果该苹果对象存在
Score +=10; //总分数加10
Score_MC.Score_Text.text = Score.toString();

			Get_Num +=1;
			//击中个数加1
			Score_MC.Get_Text.text = Get_Num.toString();
			
			mc.gotoAndPlay(2);  //苹果对象跳转到第2帧播放爆炸动画
			mc.addEventListener(Event.ENTER_FRAME,endFrameHandler);
		}
	}
	private function endFrameHandler(event:Event):void{
		var mc:MovieClip = event.target as MovieClip;
		if(mc.currentFrame==mc.totalFrames){
		//如果苹果对象播放到最后一帧
			Fruit_MC.removeChild(mc);
			//将该对象从容器中删除
			mc.removeEventListener(Event.ENTER_FRAME,endFrameHandler);
		}
	}
	//显示水果
	private function Fruit_Show(event:TimerEvent):void{
		var Letter_Num:int = Math.round(Math.random()*26)+65;
		//随机生成大写字母ASCII码
		var letter_Num:int = Math.round(Math.random()*26)+97;
		//随机生成小写字母ASCII码
		var Letter_text:String=String.fromCharCode(Letter_Num);
		var letter_text:String=String.fromCharCode(letter_Num);
		//将大小写字母的ASCII码转换为字母
		var Fruit:fruit = new fruit();
		//实例化苹果对象
		var i:int = Math.round(Math.random()*1);
		//随机生成0或1,以便随机显示小写字母还是大写字母
		if (i==0){
		//如果i变量为0
			Fruit.letter.text=letter_text;
			//将小写字母显示在苹果对象上
			Fruit.name = letter_text;
			//定义苹果对象的名称为该小写字母
		}else{
			Fruit.letter.text=Letter_text;
			//将大写字母显示在苹果对象上
			Fruit.name = Letter_text;
			//定义苹果对象的名称为该大写字母
		}
		Fruit.mouseChildren=false;
		//定义对象的子项不支持鼠标
		Fruit_MC.addChild(Fruit);
		//将苹果对象加入到容器中
		addChild(Fruit_MC);
		//将容器显示在舞台上
		Fruit.x = Math.round(Math.random()*(stage.stageWidth-2*Fruit.width)+Fruit.width);
		Fruit.y = -Fruit.height;
		//随机生成苹果对象的位置
		Fruit.addEventListener(Event.ENTER_FRAME,Fruit_Down);
		//侦听苹果对象的时间轴事件,调用Fruit_Down()函数向下掉落
	}
	//水果掉落
	private function Fruit_Down(event:Event):void{
		var mc:MovieClip = event.target as MovieClip;
		//实例化目标事件对象
		if (Lose_Num>=loseNum){
		//如果丢失苹果的个数大于游戏设置的丢失个数
			mc.removeEventListener(Event.ENTER_FRAME,Fruit_Down);
			//移除时间轴事件,停止掉落苹果
		}
		mc.y += 2;  
		//实现苹果向下掉落
		if (mc.y>=stage.stageHeight){
		//如果苹果对象的y坐标大于等于舞台调度
			Fruit_MC.removeChild(mc);
			//将该苹果对象从容器中删除
			mc.removeEventListener(Event.ENTER_FRAME,Fruit_Down);
			//移除侦听该对象的时间轴事件,停止掉落
			Lose_Num +=1;
			//丢失个数加1
			Score_MC.Lose_Text.text = Lose_Num.toString();
			//将丢失个数显示在动态文本中
		}
	}
	//显示游戏说明界面
	private function GameIntro(event:MouseEvent):void{
		var Intro_MC:intro_mc = new intro_mc();
		//实例化游戏说明界面对象
		Intro_MC.x = stage.stageWidth/2;
		Intro_MC.y = stage.stageHeight/2;
		//定义游戏说明界面对象的位置
		addChild(Intro_MC);
		//将游戏说明界面显示在舞台中
		Intro_MC.Close_Btn.addEventListener(MouseEvent.CLICK,closeWindow);
		//侦听游戏说明界面的中关闭按钮,调用closeWindow()函数关闭游戏说明窗口			
	}
	//关闭游戏说明窗口
	private function closeWindow(event:MouseEvent):void{
		var mc:MovieClip = event.target.parent as MovieClip;
		//实例化事件目标对象(游戏说明界面)
		removeChild(mc);
		//将游戏说明界面删除
	}
	//隐藏实例
	private function hideAll(obj:Object):void{
		var num:int= obj.numChildren;
		//获取指定对象的子对象个数
		while(obj.numChildren!=1){
		//如果子对象的个数不等于1
			num--;
			//个数自减1
			obj.getChildAt(num).visible=false;
			//将指定索引的子对象设置为不可见
			if (num<=1){
			//如果子对象的个数小于等于1
				break;  //跳出循环
			}
		}
		Btn_MC.Play_Btn.removeEventListener(MouseEvent.CLICK,playGame);
		Btn_MC.Intro_Btn.removeEventListener(MouseEvent.CLICK,GameIntro);
		//移除侦听“开始”和“说明”按钮的鼠标单击事件
	}
	private function Del_All():void{
		if (Fruit_MC){
		//如果苹果容器存在
			while (Fruit_MC.numChildren !=0){
			//当苹果容器中的子对象个数不为0
				Fruit_MC.removeChildAt(0);
				//删除该容器最底层的对象
			}
		}
	}
}

}

引用: //定义nub,为下面的球体复制做准备... var num:Number = 0; //定义xian,此处设置的目的为当球下落到一定程序的时候(即超出屏幕的范围的时候),运行后面的程序,此方法的目的是为了 //让系统不会因为复制太多球体而变得很慢.此处的值是场景的y值,可以随便设... var xian:Number = 450; //定义新my_array类,此处为随机出现在黄色球体中的文字,内容可以自己随便加入... var my_array:Array = new Array(); my_array = ["欢", "迎", "光", "临", "淘", "沙", "网"]; //定义加载第一个球体函数... function jiazai_ball1() { //num的值不断递加... num++; //定义一个变量ball2,变量的对象为复制第一个球体为新实例名为"第一个球+num"到num层... var ball2 = attachMovie("ball", "ball"+num, num); //定义ball2的x座标值为随机数... ball2._x = Math.floor(Math.random()*750); //此处运用一个语句switch...即可选择性调用函数... switch (moshi_txt.text) { case "小写练习" : //此处返回一个随机值... numb = random(26)+97; //此处不要忘了跳出语句... break; case "大写练习" : numb = random(26)+65; break; //这个函数,我是第一次用到,感谢酱色度,还有小南,当然最感谢的还是Hbro... //当前面的条件都不成立时,就运行下面的程序... default : moshi_txt.text = "综合练习"; //这里,又要用到变量.先定义一个变量...这里有点难度.即是说:当前面都不成立的时候,就用到这里.而且要包含两种可能. //这个时候,就又要用到随机函数了...这个随机函数其实是属于整个default程序的... var xuan_tt = random(2); if (xuan_tt == 1) { numb = random(26)+97; } else { numb = random(26)+65; break; } } ball2.onEnterFrame = function() { //当ball2运行的时候,就移动y座标,这样才能形成动画... this._y += 3; if (this._y>=xian) { //当移动到一定位置的时候,就删除影片.这样,才不会形成系统越来越慢...... removeMovieClip(this); } }; //球体上的动态文本框中的文本就将上面的随机字符转换为编码.每个键盘按键都对应得有一个编码的...具体可以查询: //http://www.taoshaw.com/taoshaw/article.asp?id=1309 ball2.text.text = String.fromCharCode(numb); } //此处为复制的另一个球体的函数... function jiazai_ball2() { var ball3 = attachMovie("balld", "balld"+num, num); ball3._x = Math.floor(Math.random()*750); ball3.onEnterFrame = function() { this._y += 5; if (this._y>=xian) { removeMovieClip(this); } }; numb = random(26)+97; /*如果希望黄色的小球也出现随机字母,则使用ball3.text.text=String.fromCharCode(nmub);*/ ball3.text.text = my_array[Math.floor(Math.random()*my_array.length)]; } //将刚才的球体加载函数调用进场景中...... function diao1() { jiazai_ball1(); } function diao2() { jiazai_ball2(); } //设置diao1函数调用的时间半隔...... id1 = setInterval(diao1, 1000); id2 = setInterval(diao2, 5000); xiaoxie_btn.onRelease = function() { moshi_txt.text = "小写练习"; }; daxie_btn.onRelease = function() { moshi_txt.text = "大写练习"; }; 元件"ball"中第一帧中的代码: 引用: stop(); //定义鼠标侦听类... var keyListener = new Object(); keyListener.onKeyDown = function() { //判断键盘转化的符号与球体的动态文本框中的内空所对应的编码是否符合... if (text.text.charCodeAt(0) == Key.getAscii()) { gotoAndPlay(2); } }; Key.addListener(keyListener); 关于加分及其他效果。都是很简单的代码。 把代码发在这里,希望大家能提建议。呵呵。也希望大家各抒己见。对我进行批评或者表扬。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值