`
ch_kexin
  • 浏览: 899338 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

flash as3 游戏 贪食蛇 源码

 
阅读更多
package
{
	import adobe.utils.CustomActions;
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.text.FontStyle;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.utils.Timer;
	import flash.events.TimerEvent;
	import flash.display.DisplayObject;
	/**
	 * ...
	 * @author
	 */
	public class Main extends Sprite {
		public static var snakeType:String ;//运动方向
		public var snakeLong:int ;//长度
		public var snakeBody:Array ;//身体数组
		public var outBodyArr:Array ;//还没吃到的身体
		public var timer:Timer;//世界间隔
		public var score:int ;//分数
		public var scoreTxt:TextField = new TextField();
		public static var p1:Head;
		public function Main():void {
			//监听添加舞台
			if (stage) startgame();
			else addEventListener(Event.ADDED_TO_STAGE, startgame);
		}
		//开始游戏
		public function startgame(e:Event = null):void {
			var menu:Menu = new Menu();
			menu.x = 250; menu.y = 200;
			stage.scaleMode = "showAll";
			stage.addChild(menu);
			stage.addEventListener(KeyboardEvent.KEY_UP,init);
		}
		//初始化
		private function init(e:KeyboardEvent = null):void {
			if (e.keyCode!=13) {
				return;
			}
			stage.removeEventListener(KeyboardEvent.KEY_UP, init);
			stage.removeChildAt(1);
			removeEventListener(Event.ADDED_TO_STAGE, init);
			//初始化数值
			snakeBody = new Array();
			outBodyArr = new Array();
			snakeLong = 4;
			score = 0;
			snakeType = "right";
			//创建头部
			p1 = new Head;
			p1.x = 100;
			p1.y = 300;
			snakeBody.push(p1);//把头部添加到身体数组
			//继续添加身体
			for (var i:int = 1; i <snakeLong ; i++) {
				var b:Body = new Body();
				b.x = p1.x - 20*i-1;
				b.y = p1.y;
				snakeBody.push(b);
				stage.addChild(b);
			}
			stage.addChild(p1);//添加到舞台
			//世界时间开始了
			timer = new Timer(100);
			timer.addEventListener(TimerEvent.TIMER, onTimerHandler);
			timer.start();
			randMakeBody();//生成一个还没吃到的身体
			//添加键盘监听
			stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeydownHandler);
			  //积分text
			  scoreTxt.text = "Score:" + score;
			  stage.addChild(scoreTxt);
		}
		//世界时间句柄
		public function onTimerHandler(event:Event):void {
			//超出屏幕就gameover
			if (p1.x<0 || p1.x>780 || p1.y>580 || p1.y<0) {
				  gameOver();
			}
			/*
			 * ****游戏核心:***
			 * 遍历body
			 * 每次后面一个body的位置都reset成前一个body的位置
			 */
			for (var i:int =snakeBody.length-1; i>0  ; i--) {
					 snakeBody[i].x =snakeBody[i-1].x;
					 snakeBody[i].y = snakeBody[i - 1].y;
					 //头碰到身体的话就over
					 if (snakeBody[i+1]) {
						 if (p1.hitTestObject(snakeBody[i+1])) {
							  gameOver();
						 }
					 }
			}
			//根据snakeType移动snake
			switch(snakeType) {
				case "up":
				  p1.up();
				break;
				case "down":
				  p1.down();
				break;
				case "left":
				  p1.left();
				break;
				case "right":
				  p1.right();
				break;
			}
			//吃外面的身体,遍历outBodyArr,然后碰撞检测,可能这方法不好,但是这小游戏可以吧?
			for ( i = 0; i <outBodyArr.length;i++ ) {
				if (p1.hitTestObject(outBodyArr[i])) {
					stage.removeChild(outBodyArr[i]);
					outBodyArr.splice(i, 1);
					//吃完一个再生产一个
					randMakeBody();
					var b:Body = new Body();
					b.x = -30; b.y = -30;//先隐藏到舞台外
					stage.addChild(b);
					snakeBody.push(b);
					if (timer.delay-5>0) {
						timer.delay -= 5;//加快速度
					}
					//积分
					score++;
					scoreTxt.text = "score:"+score;
				}
			}
		}
		//键盘响应,更改移动状态
		public function onKeydownHandler(event:KeyboardEvent):void {
			switch(event.keyCode) {
				case 37:
				 if (snakeType != "right") {
				   snakeType = "left";
				 }
				break;
				case 39:
				 if (snakeType != "left") {
				   snakeType = "right";
				 }
				break;
				case 38:
				 if (snakeType != "down") {
				   snakeType = "up";
				 }
				break;
				case 40:
				 if (snakeType != "up") {
					snakeType = "down";
				 }
				break;
			}
		}
		//在舞台随机生成可以吃的身体
		public function randMakeBody():void {
			var x:int = Math.random()*780 +1;
			var y:int = Math.random()*580 +1;
			var randBody:Body = new Body();
			randBody.x = x;
			randBody.y = y;
			stage.addChild(randBody);
			outBodyArr.push(randBody);
		}
		//gamemover
		public function gameOver():void {
			//清屏
			  while (stage.numChildren> 1) {
				  stage.removeChildAt(1);
			  }
			  //取消世界时间
			  timer.removeEventListener(TimerEvent.TIMER, onTimerHandler);
			  //显示"gameover"
			  var txt:TextField = new TextField();
			  var textformat:TextFormat = new TextFormat;
			  textformat.size =30;
			  txt.text = "Game Over! nSCORE:"+score+"nnPass Enter to restart";
			  txt.setTextFormat(textformat);
			  txt.width = 300; txt.height = 170;
			  txt.x = stage.stageWidth/2-txt.width/3 ; txt.y = stage.stageHeight/2-txt.height/2;
			  stage.addChild(txt);
			 //键盘监听,以致restart
			 stage.addEventListener(KeyboardEvent.KEY_UP,init);
		}
	}
}


分享到:
评论

相关推荐

    flash贪食蛇源码

    《深入剖析Flash贪食蛇游戏源码》 贪食蛇,这款经典的电子游戏,自诞生以来就深受全球玩家喜爱。在Flash平台上,开发者利用ActionScript(AS)这一强大的脚本语言,将贪食蛇游戏搬上网络,让更多人能够在线体验。...

    很好的贪食蛇游戏源码

    在这个项目中,你拥有的是基于ECLIPSE开发环境实现的贪食蛇游戏源码。下面我们将深入探讨这个项目涉及的编程知识和技术。 1. **贪食蛇游戏机制**: 贪食蛇游戏的基本原理是控制一个由多个方块组成的身体在网格上...

    java写的贪食蛇源码

    《Java实现贪食蛇游戏详解》 贪食蛇游戏,作为一个经典的计算机程序设计题目,深受学生和编程爱好者的喜爱。它的基本玩法是控制一条不断移动的蛇去吃食物,每吃到一个食物,蛇的长度就会增加,而游戏区域不变,增加...

    Java 版的贪食蛇游戏源码

    本教程将通过分析"Java版的贪食蛇游戏源码"来探讨游戏设计的基本原理和Java编程技术。 贪食蛇游戏是一款经典的休闲小游戏,其基本玩法是控制蛇移动,吃食物后蛇身会增长,碰到边界或自己的身体则游戏结束。这个项目...

    andorid 贪食蛇源码

    这个源码提供了在Android设备上实现贪食蛇游戏的完整代码,让我们深入探讨一下其中涉及的关键技术和知识点。 1. **Android Studio集成开发环境**: Android开发通常使用Google提供的Android Studio,它基于IntelliJ ...

    易语言源码易语言2D贪食蛇源码.rar

    易语言源码易语言2D贪食蛇源码.rar 易语言源码易语言2D贪食蛇源码.rar 易语言源码易语言2D贪食蛇源码.rar 易语言源码易语言2D贪食蛇源码.rar 易语言源码易语言2D贪食蛇源码.rar 易语言源码易语言2D贪食蛇源码....

    Java贪食蛇源码程序

    【Java贪食蛇源码程序】是一个基于Java Swing开发的经典游戏——贪食蛇的源代码实现。这个程序展示了如何利用Java编程语言构建一个图形用户界面(GUI)游戏,并且提供了可运行的jar文件,用户只需拥有JRE(Java运行...

    Java小游戏_贪食蛇(源码)

    【Java小游戏_贪食蛇(源码)】是一款基于Java编程语言开发的简易版贪食蛇游戏,适合初学者学习和研究。这个项目不仅包含了完整的源代码,而且已经实现了基本的游戏逻辑,玩家可以运行并体验游戏。通过分析和理解这...

    C#贪食蛇源码

    【C#贪食蛇源码】是一个基于C#编程语言实现的经典游戏——贪食蛇的完整源代码。这个游戏,通常被称为“SnakeGame”,是许多程序员初学编程时接触的典型项目,因为它涉及到基本的控制逻辑、图形绘制以及事件处理等...

    java贪食蛇游戏.zip

    java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏 java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏 java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏...

    易语言2D贪食蛇源码.zip易语言项目例子源码下载

    3. 时间与事件处理:贪食蛇游戏的运行需要定时器来控制游戏速度,比如蛇的移动速度、食物的生成频率等。易语言中的事件驱动编程模型能很好地处理这类问题。 4. 数据结构与算法:游戏中的蛇体由一系列坐标点组成,...

    java贪食蛇源码

    java贪食蛇源码

    贪食蛇 C++ 源码

    源程序可以在 Borland C++ 5.0 和 6.0 版本下编译通过 游戏操作: 按上下左右移动光标键, 每吃一个“豆”加一分,并且蛇的长度加一。...撞到边缘、墙壁、和蛇本身,游戏结束。 包含源代码和可以运行的程序

    贪食蛇源码win32api

    《贪食蛇源码win32api:深入解析Windows API在游戏编程中的应用》 贪食蛇是一款经典的计算机游戏,其源码分析可以帮助我们理解Windows API在游戏编程中的实际运用。Windows API(Application Programming Interface...

    J2ME 贪食蛇游戏源码

    **贪食蛇游戏源码详解** 贪食蛇是一款经典的手机小游戏,它在各种移动设备上都非常流行,尤其在早期的J2ME(Java Micro Edition)平台上。本文将深入解析使用J2ME编写的贪食蛇游戏源码,帮助初学者理解和学习游戏...

    cocos2d-x 贪食蛇源码

    【cocos2d-x 贪食蛇源码】是一个基于C++开发的、使用cocos2d-x框架实现的经典游戏项目。cocos2d-x是一个开源的游戏开发框架,广泛应用于2D游戏开发,它支持多平台,包括iOS、Android、Windows等。这个项目旨在提供一...

    贪食蛇游戏java开发源码

    java贪食蛇游戏jav贪食蛇游戏java开发源码a开发源码开发源码java贪食蛇游戏java开发源码开发源码ja贪食蛇游戏java开发贪食蛇游戏java开发源码源码va开发源码

    C#编写的贪食蛇源码

    在本文中,我们将深入探讨一个用C#编程语言和WinForms技术编写的贪食蛇源码,通过分析源码,学习C#的基础语法、事件处理、图形界面设计以及游戏逻辑的实现。 首先,C#是一种面向对象的编程语言,由微软公司开发,...

    java Swing 贪食蛇 源码

    通过分析和理解这个Java Swing贪食蛇的源码,开发者不仅可以学习到Swing组件的使用,还能了解游戏编程的基本逻辑,包括状态管理、事件处理、图形绘制等。这对于提升Java桌面应用开发技能非常有帮助。同时,这也是一...

Global site tag (gtag.js) - Google Analytics