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平台上,开发者利用ActionScript(AS)这一强大的脚本语言,将贪食蛇游戏搬上网络,让更多人能够在线体验。...
在这个项目中,你拥有的是基于ECLIPSE开发环境实现的贪食蛇游戏源码。下面我们将深入探讨这个项目涉及的编程知识和技术。 1. **贪食蛇游戏机制**: 贪食蛇游戏的基本原理是控制一个由多个方块组成的身体在网格上...
《Java实现贪食蛇游戏详解》 贪食蛇游戏,作为一个经典的计算机程序设计题目,深受学生和编程爱好者的喜爱。它的基本玩法是控制一条不断移动的蛇去吃食物,每吃到一个食物,蛇的长度就会增加,而游戏区域不变,增加...
本教程将通过分析"Java版的贪食蛇游戏源码"来探讨游戏设计的基本原理和Java编程技术。 贪食蛇游戏是一款经典的休闲小游戏,其基本玩法是控制蛇移动,吃食物后蛇身会增长,碰到边界或自己的身体则游戏结束。这个项目...
这个源码提供了在Android设备上实现贪食蛇游戏的完整代码,让我们深入探讨一下其中涉及的关键技术和知识点。 1. **Android Studio集成开发环境**: Android开发通常使用Google提供的Android Studio,它基于IntelliJ ...
易语言源码易语言2D贪食蛇源码.rar 易语言源码易语言2D贪食蛇源码.rar 易语言源码易语言2D贪食蛇源码.rar 易语言源码易语言2D贪食蛇源码.rar 易语言源码易语言2D贪食蛇源码.rar 易语言源码易语言2D贪食蛇源码....
【Java贪食蛇源码程序】是一个基于Java Swing开发的经典游戏——贪食蛇的源代码实现。这个程序展示了如何利用Java编程语言构建一个图形用户界面(GUI)游戏,并且提供了可运行的jar文件,用户只需拥有JRE(Java运行...
【Java小游戏_贪食蛇(源码)】是一款基于Java编程语言开发的简易版贪食蛇游戏,适合初学者学习和研究。这个项目不仅包含了完整的源代码,而且已经实现了基本的游戏逻辑,玩家可以运行并体验游戏。通过分析和理解这...
【C#贪食蛇源码】是一个基于C#编程语言实现的经典游戏——贪食蛇的完整源代码。这个游戏,通常被称为“SnakeGame”,是许多程序员初学编程时接触的典型项目,因为它涉及到基本的控制逻辑、图形绘制以及事件处理等...
java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏 java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏 java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏java贪食蛇游戏...
3. 时间与事件处理:贪食蛇游戏的运行需要定时器来控制游戏速度,比如蛇的移动速度、食物的生成频率等。易语言中的事件驱动编程模型能很好地处理这类问题。 4. 数据结构与算法:游戏中的蛇体由一系列坐标点组成,...
java贪食蛇源码
源程序可以在 Borland C++ 5.0 和 6.0 版本下编译通过 游戏操作: 按上下左右移动光标键, 每吃一个“豆”加一分,并且蛇的长度加一。...撞到边缘、墙壁、和蛇本身,游戏结束。 包含源代码和可以运行的程序
《贪食蛇源码win32api:深入解析Windows API在游戏编程中的应用》 贪食蛇是一款经典的计算机游戏,其源码分析可以帮助我们理解Windows API在游戏编程中的实际运用。Windows API(Application Programming Interface...
**贪食蛇游戏源码详解** 贪食蛇是一款经典的手机小游戏,它在各种移动设备上都非常流行,尤其在早期的J2ME(Java Micro Edition)平台上。本文将深入解析使用J2ME编写的贪食蛇游戏源码,帮助初学者理解和学习游戏...
【cocos2d-x 贪食蛇源码】是一个基于C++开发的、使用cocos2d-x框架实现的经典游戏项目。cocos2d-x是一个开源的游戏开发框架,广泛应用于2D游戏开发,它支持多平台,包括iOS、Android、Windows等。这个项目旨在提供一...
java贪食蛇游戏jav贪食蛇游戏java开发源码a开发源码开发源码java贪食蛇游戏java开发源码开发源码ja贪食蛇游戏java开发贪食蛇游戏java开发源码源码va开发源码
在本文中,我们将深入探讨一个用C#编程语言和WinForms技术编写的贪食蛇源码,通过分析源码,学习C#的基础语法、事件处理、图形界面设计以及游戏逻辑的实现。 首先,C#是一种面向对象的编程语言,由微软公司开发,...
通过分析和理解这个Java Swing贪食蛇的源码,开发者不仅可以学习到Swing组件的使用,还能了解游戏编程的基本逻辑,包括状态管理、事件处理、图形绘制等。这对于提升Java桌面应用开发技能非常有帮助。同时,这也是一...