贪吃蛇-白鹭引擎

/**

*

* @author

*

*/

class Game {

private _root: egret.DisplayObjectContainer;

public constructor(root: egret.DisplayObjectContainer) {

this._root = root;

this.init();

this.creatdiren();

}

public colorArr: Array<number> = [0xff0000,0x18ff00,0x009cff,0xe400ff,0xffe400,0xff8b8b];

//红色 绿色  蓝色 紫色e400ff 黄色ffe400 粉色 ff8b8b

//背景

private bg: egret.Sprite = null;

private snake: Snake;

//主角移动的速度

private vx: number = 0;

private vy: number = 0;

//舞台宽高

private stageW: number = 0;

private stageH: number = 0;

//按钮

private leftBtn: egret.TextField = null;

private rightBtn: egret.TextField = null;

private topBtn: egret.TextField = null;

private bottomBtn: egret.TextField = null;

private uiSprite: egret.Sprite = null;

private SnakeGrop: Array<Snake>;

private EnemyGrop: Array<EnemySnake> = [];

private touchType: string;

private touchTypeOld: string;

private init() {

this.stageH = egret.MainContext.instance.stage.stageHeight;

this.stageW = egret.MainContext.instance.stage.stageWidth;

//添加背景

this.bg = new egret.Sprite();

this.bg.graphics.beginFill(0x000000);

this.bg.graphics.drawRect(0,0,500,500);

this.bg.graphics.endFill();

this._root.addChild(this.bg);

this.SnakeGrop = [];

this.EnemyGrop = [];

//第一个蛇

this.snake = new Snake(0xffffff);

this.SnakeGrop.push(this.snake);

this._root.addChild(this.snake);

this.uiSprite = new egret.Sprite();

this._root.addChild(this.uiSprite);

this.leftBtn = new egret.TextField();

this.leftBtn.text = "左";

this.leftBtn.x = 0;

this.leftBtn.y = 50;

this.uiSprite.addChild(this.leftBtn);

this.rightBtn = new egret.TextField();

this.rightBtn.text = "右";

this.rightBtn.x = 100;

this.rightBtn.y = 50;

this.uiSprite.addChild(this.rightBtn);

this.topBtn = new egret.TextField();

this.topBtn.text = "上";

this.topBtn.x = 50;

this.topBtn.y = 0;

this.uiSprite.addChild(this.topBtn);

this.bottomBtn = new egret.TextField();

this.bottomBtn.text = "下";

this.bottomBtn.x = 50;

this.bottomBtn.y = 50;

this.uiSprite.addChild(this.bottomBtn);

this.uiSprite.x = (this.stageW - this.uiSprite.width) / 2;

this.uiSprite.y = this.stageH - this.uiSprite.height;

this.bottomBtn.touchEnabled = true;

this.topBtn.touchEnabled = true;

this.leftBtn.touchEnabled = true;

this.rightBtn.touchEnabled = true;

this.bottomBtn.addEventListener(egret.TouchEvent.TOUCH_TAP,this.onTouchBegin,this);

this.topBtn.addEventListener(egret.TouchEvent.TOUCH_TAP,this.onTouchBegin,this);

this.leftBtn.addEventListener(egret.TouchEvent.TOUCH_TAP,this.onTouchBegin,this);

this.rightBtn.addEventListener(egret.TouchEvent.TOUCH_TAP,this.onTouchBegin,this);

this._root.addEventListener(egret.Event.ENTER_FRAME,this.onEnterFrame,this);

}

private onTouchBegin(e: egret.TouchEvent) {

this.touchType = e.target.text;

if(this.touchTypeOld == null) {

this.touchTypeOld = this.touchType;

}

if(e.target.text == "左") {

if(this.touchTypeOld == "右") {

this.vx = 10;

this.vy = 0;

this.touchTypeOld = "右";

} else {

this.vx = -10;

this.vy = 0;

this.touchTypeOld = "左";

}

}

else if(e.target.text == "右") {

if(this.touchTypeOld == "左") {

this.vx = -10;

this.vy = 0;

this.touchTypeOld = "左";

} else {

this.vx = 10;

this.vy = 0;

this.touchTypeOld = "右";

}

}

else if(e.target.text == "上") {

if(this.touchTypeOld == "下") {

this.vy = 10;

this.vx = 0;

this.touchTypeOld = "下";

} else {

this.vy = -10;

this.vx = 0;

this.touchTypeOld = "上";

}

}

else if(e.target.text == "下") {

if(this.touchTypeOld == "上") {

this.vy = -10;

this.vx = 0;

this.touchTypeOld = "上";

} else {

this.vy = 10;

this.vx = 0;

this.touchTypeOld = "下";

}

}

}

private foodColor: number;

private onEnterFrame(e: egret.Event) {

if(this.cheackHit()) {

this.zhangda(true);

this.xiaoChu();

this.creatdiren();

} else {

this.zhangda(false);

}

if(this.SnakeGrop[0].x > 490) {

this.SnakeGrop[0].x = 0;

} else if(this.SnakeGrop[0].x < 0) {

this.SnakeGrop[0].x = 490;

} else if(this.SnakeGrop[0].y > 490) {

this.SnakeGrop[0].y = 0;

} else if(this.SnakeGrop[0].y < 0) {

this.SnakeGrop[0].y = 490;

}

}

private cheackHit(): boolean {

for(var i = 0;i < this.EnemyGrop.length;i++) {

if(this.snake.x == this.EnemyGrop[i].x && this.snake.y == this.EnemyGrop[i].y) {

this.foodColor = this.EnemyGrop[i].enemyColor;

this._root.removeChild(this.EnemyGrop[i]);

this.EnemyGrop.splice(i,1);

return true;

}

}

}

private xiaoChu() {

let type: number = 0;

if(this.SnakeGrop.length >= 4) {

for(var i = this.SnakeGrop.length - 1;i > 0;i--) {

if(this.SnakeGrop[i - 1].SnakeColor ==  this.SnakeGrop[i].SnakeColor) {

type++;

}

}

}

console.log(this.SnakeGrop);

if(type == 2) {

let snakenum = this.SnakeGrop.length - 1;

this._root.removeChild(this.SnakeGrop[snakenum]);

this._root.removeChild(this.SnakeGrop[snakenum - 1]);

this._root.removeChild(this.SnakeGrop[snakenum - 2]);

this.SnakeGrop.pop();

this.SnakeGrop.pop();

this.SnakeGrop.pop();

}

}

private zhangda(vol: boolean) {

if(vol) {

var _snake = new Snake(this.foodColor);

this.SnakeGrop.push(_snake);

this._root.addChild(_snake);

}

if(this.SnakeGrop.length > 1) {

for(var i = this.SnakeGrop.length - 1;i > 0;i--) {

this.SnakeGrop[i].x = this.SnakeGrop[i - 1].x;

this.SnakeGrop[i].y = this.SnakeGrop[i - 1].y;

}

}

this.SnakeGrop[0].x += this.vx;

this.SnakeGrop[0].y += this.vy;

}

private creatdiren() {

for(var i = this.EnemyGrop.length;i < 8;i++) {

var diren = new EnemySnake(this.colorArr[this.colorRandom()]);

//            console.log(this.colorArr[this.colorRandom()]);

diren.x = this.zhengshuten();

diren.y = this.zhengshuten();

this._root.addChild(diren);

this.EnemyGrop.push(diren);

}

}

private zhengshuten(): number {

var num: number = 0;

num = Math.floor(Math.random() * 490);

if(num % 10 != 0) {

var mo = num % 10;

num = num - mo;

return num;

} else {

return num;

}

}

private colorRandom(): number {

let num: number = 0;

num = Math.floor(Math.random() * 6);

return num;

}

}

时间: 2024-10-10 05:46:44

贪吃蛇-白鹭引擎的相关文章

使用Love2D引擎开发贪吃蛇游戏

今天来介绍博主最近捣腾的一个小游戏[贪吃蛇],贪吃蛇这个游戏相信大家都不会感到陌生吧.今天博主将通过Love2D这款游戏引擎来为大家实现一个简单的贪吃蛇游戏,在本篇文章当中我们将会涉及到贪吃蛇的基本算法.Lua语言编程等基本的内容,希望能够对大家开发类似的游戏提供借鉴和思考,文章中如有不足之处,还希望大家能够谅解,因为博主的游戏开发基本就是这样慢慢摸索着学习,所以难免会有不足的地方. 游戏算法 我们首先来看看贪吃蛇是怎么移动的? 通过这四张图的演示,我们可以发现这样一个规律: 蛇的移动其实是将蛇

Love2D游戏引擎制作贪吃蛇游戏

代码地址如下:http://www.demodashi.com/demo/15051.html Love2D游戏引擎制作贪吃蛇游戏 内附有linux下的makefile,windows下的生成方法请查看: for windows 预览游戏 love2d游戏引擎重要函数 详情: love2d wiki love.load:当游戏开始时被调用且仅调用一次 love.draw:回调函数,每帧更新一次游戏画面 love.update:回调函数,每帧更新一次游戏状态 love.keypressed:回调函

WebGL实现HTML5的3D贪吃蛇游戏

js1k.com收集了小于1k的javascript小例子,里面有很多很炫很酷的游戏和特效,今年规则又增加了新花样,传统的classic类型基础上又增加了WebGL类型,以及允许增加到2K的++类型,多次想尝试提交个小游戏但总无法写出让自己满意还能控制在这么小的字节范围. 自己写不出来,站在巨人肩膀总是有机会吧,想起<基于HTML5的电信网管3D机房监控应用>这篇提到的threejs,babylonjs和Hightopo的几种基于WebGL的3D引擎,突然想挑战下自己实现个100行JS的3D小

C++贪吃蛇——(1)

做一个贪吃蛇的游戏,不用现成的游戏引擎直接使用控制台.第一个内容应该是需求分析,任何程序都应该基于需求分析来进行.否则全凭脑补,走一步看一步那回滚代码都会让你喊GG. 那么做一个控制台的贪吃蛇游戏需要啥子东西. 1.node类保存坐标点 2.map保存整张地图 3.蛇.蛇的长度.蛇的方向 4.食物结点.食物是否被吃了 5.蛇的移动速度 6.游戏是否失败/结束.游戏是否开始 7.类方法:移动.上下左右.自动生成食物 8.游戏分数(吃到食物的个数) 暂时就想到这么多,还有啥子东西....慢慢想,慢慢

C++控制台游戏之贪吃蛇——(1)

做一个贪吃蛇的游戏,不用现成的游戏引擎直接使用控制台.第一个内容应该是需求分析,任何程序都应该基于需求分析来进行.否则全凭脑补,走一步看一步那回滚代码都会让你喊GG. 那么做一个控制台的贪吃蛇游戏需要啥子东西. 1.node类保存坐标点 2.map保存整张地图 3.蛇.蛇的长度.蛇的方向 4.食物结点.食物是否被吃了 5.蛇的移动速度 6.游戏是否失败/结束.游戏是否开始 7.类方法:移动.上下左右.自动生成食物 8.游戏分数(吃到食物的个数) 暂时就想到这么多,还有啥子东西....慢慢想,慢慢

WebGL实现HTML5贪吃蛇3D游戏

js1k.com收集了小于1k的javascript小例子,里面有很多很炫很酷的游戏和特效,今年规则又增加了新花样,传统的classic类型基础上又增加了WebGL类型,以及允许增加到2K的++类型,多次想尝试提交个小游戏但总无法写出让自己满意还能控制在这么小的字节范围. 自己写不出来,站在巨人肩膀总是有机会吧,想起<基于HTML5的电信网管3D机房监控应用>这篇提到的threejs,babylonjs和Hightopo的几种基于WebGL的3D引擎,突然想挑战下自己实现个100行JS的3D小

unity5 和UGUI的小Demo贪吃蛇

有时间学习Unity5练练手, 一个贪吃蛇小Demo 简单的2D场景, 对象都是Sprite,需要设置前后的显示层级,从蛇头到蛇尾的Order in Layer 的值是1000 递减1,所以显示的效果是具有鳞片的层叠. 蛇的每一节都有一个脚本 SnakePart.cs 记录这节的位置.方向包括计算值. 蛇没吃一个苹果,就会实例化产生一节, 其中新产生的这节上有一个新脚本 NewSnakePart.cs 主要的作用就是初始化把这节添加到蛇的末端包括初始化位置.方向. GameManager.cs

Cocos2d-js 贪吃蛇实战项目,H5游戏开发

Cocos2d-js 贪吃蛇实战项目 课程简介: 本课程主要用Cocos2d-js实现了贪吃蛇实战项目,主要介绍了环境搭建和项目的创建,引擎架构的分析,入口类,场景的切换,屏幕触摸,Node与Schedule计划任务,通过贪食蛇游戏案例来对所有的知识进行贯穿和应用,对游戏原型的设计,实现UI流程,对节点进行封装.游戏逻辑和游戏触摸的实现,在游戏中添加音乐和音效,从Mac平台打包发布到web.从中你会学到如何实现屏幕绘图.事件处理.集合使用.场景跳转.节点封装等技术. 课程大纲: 本课程一共7讲,

手把手教学h5小游戏 - 贪吃蛇

简单的小游戏制作,代码量只有两三百行.游戏可自行扩展延申. 源码已发布至github,喜欢的点个小星星,源码入口:game-snake 游戏已发布,游戏入口:http://snake.game.yanjd.top 第一步 - 制作想法 游戏如何实现是首要想的,这里我的想法如下: 利用canvas进行绘制地图(格子装). 利用canvas绘制蛇,就是占用地图格子.让蛇移动,即:更新蛇坐标,重新绘制. 创建四个方向按钮,控制蛇接下来的方向. 随机在地图上绘制出果子,蛇移动时"吃"到果子,增