最近學ActionScript3.0 以下為自己寫的一個小遊戲。盡量以最少的代碼,實現功能
遊戲原理:看代碼注釋
遊戲規則:類似於【勁舞團】遊戲,玩家可以按UP,DOWN,LEFT,RIGHT鍵來操控遊戲。
打掉相應的箭頭則得分,否則失手。
箭頭落到底線沒有被打掉,則為失手。
失手10次,遊戲結束。
得分過30,升一級。難度加大。
先建一個箭頭的類Baby.as 。提供四種不同造型的箭頭
package {import flash.display.Sprite;import flash.filters.ConvolutionFilter;/** * ... * @author kkkloveyou */public class Baby extends Sprite {private var color:uint = 0xFFFFFF;private var direction:uint;private const LEFT:uint = 37;private const RIGHT:uint = 39;private const UP:uint = 38;private const DOWN:uint = 40;public var flag:int = 0;public function Baby(direction:uint):void {this.direction = direction;switch (direction) {case LEFT:drawLeft();break;case RIGHT:drawRight();break;case UP:drawUp();break;case DOWN:drawDown();break;default:break;}}public function drawRight():void {graphics.lineStyle(3,0xff0000);//左面graphics.moveTo(-60,-30);graphics.lineTo(-60,30);graphics.lineTo(30, 30);graphics.lineTo(30,40);graphics.lineTo(60, 0);graphics.lineTo(30,-40);graphics.lineTo(30, -30);graphics.lineTo( -60, -30);flag = 39;}public function drawLeft():void {graphics.lineStyle(3,0x00ff00);//右面graphics.moveTo(60,-30);graphics.lineTo(60,30);graphics.lineTo(-30, 30);graphics.lineTo(-30,40);graphics.lineTo(-60, 0);graphics.lineTo(-30,-40);graphics.lineTo(-30, -30);graphics.lineTo(60, -30);flag = 37;}public function drawUp():void {graphics.lineStyle(3,0x00ffff);//上面graphics.moveTo(-30,60);graphics.lineTo(30,60);graphics.lineTo(30, -30);graphics.lineTo(40,-30);graphics.lineTo(0, -60);graphics.lineTo(-40,-30);graphics.lineTo(-30, -30);graphics.lineTo( -30, 60);flag = 38;}public function drawDown():void {graphics.lineStyle(3,0x001177);//下面graphics.moveTo(-30,-60);graphics.lineTo(30,-60);graphics.lineTo(30, 30);graphics.lineTo(40,30);graphics.lineTo(0, 60);graphics.lineTo(-40,30);graphics.lineTo(-30, 30);graphics.lineTo( -30, -60);flag = 40;}}}
再建一個控制類Main.as 用來控制遊戲
package{ import flash.display.Sprite; import flash.events.Event; import flash.events.KeyboardEvent; import flash.text.TextField; import flash.text.TextFormat; import flash.ui.Keyboard;public class Main extends Sprite{public var arr:Array;//儲存下落箭頭的數組public var time:uint;public var errorTxt:TextField;//錯誤顯示文本public var trueTxt:TextField;//正確顯示文本public var levelTxt:TextField;//等級文本public var meTxt:TextField;//作者文本public var errorCount:int = 0;//錯誤總計變數public var trueCount:int = 0;//正確總計變數public var levelCount:int = 1;//當前關卡等級public var speed:uint = 5; //箭頭移動速度public function Main(){init();}public function init():void{this.addEventListener(Event.ENTER_FRAME,loopHandler);stage.addEventListener(KeyboardEvent.KEY_DOWN,downHandler);arr = new Array();time = 0;errorTxt = new TextField();trueTxt = new TextField();levelTxt = new TextField();meTxt = new TextField();errorTxt.text = "失手: "+errorCount;trueTxt.text = "得分: " + trueCount;levelTxt.text = "等級: " + levelCount;meTxt.text = "衛哥作品";levelTxt.x = 50;levelTxt.y = 50;errorTxt.x = 50;errorTxt.y = 150;trueTxt.x = 50;trueTxt.y = 250;meTxt.x = 700;meTxt.y = 550;this.addChild(errorTxt);this.addChild(trueTxt);this.addChild(levelTxt);this.addChild(meTxt);}public function downHandler(event:KeyboardEvent):void{errorCount++;if (errorCount >= 10) {stage.removeEventListener(KeyboardEvent.KEY_DOWN, downHandler);this.removeEventListener(Event.ENTER_FRAME,loopHandler);}for(var i:Number = arr.length-1;i>=0;i--){//判斷鍵盤按下的索引值是否和情境裡的字母符合.如果符合則消去var baby:Baby = arr[i] as Baby;if ( baby ){if(baby.flag == event.keyCode){this.removeChild(arr[i]);arr.splice(i,1);trueCount++;errorCount--; break;}}}if (trueCount >= 30) {levelCount++;//級數升級,得手清零speed += 3; //級數升級,速度增大,難度增大trueCount = 0; }errorTxt.text = "失手: "+errorCount;trueTxt.text = "得分: " + trueCount;levelTxt.text = "等級: " + levelCount}public function loopHandler(event:Event):void{time++;if(time>=10){time = 0; var baby:Baby = new Baby(int(Math.random() * 4) + 37); //隨機產生箭頭類型 baby.x = stage.stageWidth / 2; baby.y = 30;this.addChild(baby);arr.unshift(baby);}for(var i:Number = arr.length-1;i>=0;i--){arr[i].y+=speed; //箭頭速度if(arr[i].y>=stage.stageHeight){this.removeChild(arr[i]);arr.splice(i,1);errorCount++;errorTxt.text = "失手: "+errorCount;break;}}if (errorCount >= 10) {stage.removeEventListener(KeyboardEvent.KEY_DOWN, downHandler);this.removeEventListener(Event.ENTER_FRAME,loopHandler);}}}}
項目示範地址:http://up.qqhello.com/qzone/73e11069e924b6d6df5198f9440a2403.swf