“别踩白块儿"游戏源代码分析和下载(一)
2014-07-17 10:24
513 查看
本帖最后由 lch123go 于 2014-7-9 17:51 编辑 “别踩白块儿”是目前非常火的一款游戏,游戏非常简单刺激。关于具体怎么火法怎么玩我就不多说了,相信看到本文的朋友们都非常地清楚。 什么游戏火,我们都想知道自己能不能也弄一个玩玩,我也花了点时间弄了一个,游戏代码将会开源,利人利己,大家一起提高,希望各位多多支持。 下面介绍如何用OGEngine游戏引擎完成“别踩白块儿”游戏的经典模式。 源码下载地址 一、最终实现的部分效果截图1、刚开始时,最下面有一栏为***,紧接着上面每一行都是有一个黑色块,其余为白色块,准备冲啊..... 2、游戏中,在游戏过程中都有一个计时器,记录当前所进行的时间。冲啊.....注意别点到了白块儿。 3、玩家如果误点了白色块,会出现游戏失败界面,如果之前有创立过最佳成绩,则会显示出来,记录的是完成任务所用的时间,时间越短说明你越厉害。点击“重来”即会重新开始。 4、游戏进行到最后会出现绿色栏,游戏胜利界面,会显示本次所用时间,如果刷新了记录则标记“新纪录”字样,如果没有刷新记录则还会显示历史最佳记录。大伙努力挑战新记录吧! 二、创建Block类游戏中要用到很多方块,所以我们单独创建一个方块类Block。Block是一个个白块或者黑块,单个块元素,这里我们的Block继承矩形Rectangle,每个Block用矩形来展示。 1、声明一些所需要的成员变量 public class Block extends Rectangle { // 游戏场景 private GameScene mGameScene; // 此block的颜色类型,白色还是黑色? private int colorType; // block 所在的行 private int row; // block 所在的列 private int column; // ======================get&set======================== public int getRow() { return row; } public void setRow(int row) { this.row = row; } public int getColumn() { return column; } public int getColorType() { return colorType; } // ===================================================== 复制代码 2、构造器1,初始化blocks时用到,当为最底部一行时设为*** /** * 构造器1,初始化blocks时用到 * @param pGameScene 游戏场景 * @param row block所在的行 * @param column block所在的列 * @param pWidth block的宽 * @param pHeight block的高 * @param blackIndex 用来确定是否是黑块,如果blackIndex == column时设为黑块 * @param pVertexBufferObjectManager */ public Block(GameScene pGameScene, int row, int column, float pWidth, float pHeight, int blackIndex, VertexBufferObjectManager pVertexBufferObjectManager) { super(column * pWidth, (3 - row) * pHeight, pWidth - 1, pHeight - 1, pVertexBufferObjectManager); this.mGameScene = pGameScene; this.row = row; this.column = column; if (row == 0) { // 第一行设置为黄块 this.setColor(Color.YELLOW); } else { // 初始化block的颜色数据,是白块还是黑块? initBlockData(column, blackIndex); } // 设置可以相应触碰事件 this.setIgnoreTouch(false); } 复制代码 3、构造器2,新增blocks时用到 /** * 构造器2,新增blocks时用到 * @param pGameScene 游戏场景 * @param column block所在的列 * @param pWidth block的宽 * @param pHeight block的高 * @param blackIndex 来确定是否是黑块,如果blackIndex == column时设为黑块 * @param pVertexBufferObjectManager */ public Block(GameScene pGameScene, int column, float pWidth, float pHeight, int blackIndex, VertexBufferObjectManager pVertexBufferObjectManager) { super(column * pWidth, 0, pWidth - 1, pHeight - 1, pVertexBufferObjectManager); this.mGameScene = pGameScene; this.column = column; // 初始化block的颜色数据,是白块还是黑块? initBlockData(column, blackIndex); // 设置可以相应触碰事件 this.setIgnoreTouch(false); } 复制代码 4、实现函数initBlockData初始化block的颜色数据,是白块还是黑块 /** * 初始化block的颜色数据,是白块还是黑块? * @param column * @param blackIndex */ private void initBlockData(int column, int blackIndex) { if (blackIndex == column) { // 设置为黑块 this.setColor(Color.BLACK); this.colorType = ConstantUtil.COLOR_BLACK; } else { // 设置为白块 this.setColor(Color.WHITE); this.colorType = ConstantUtil.COLOR_WHITE; } } 复制代码 5、每个block 实现触碰监听,当按下时,调起在GameScene中实现的touchBlock方法。 记得设置可以相应触碰事件setIgnoreTouch(false); @Override public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) { // 触碰事件监听 if (pSceneTouchEvent.isActionDown()) { // 点击到Block时进行的逻辑处理 mGameScene.touchBlock(this); } return true; } 复制代码 三、创建GameScene类GameScene类是游戏场景类,是本游戏的主要部分,主要实现游戏界面及相关逻辑。 1、先看看其成员变量 public class GameScene extends Scene { /** 块的宽 **/ private float blockWidth = 0; /** 块的高 **/ private float blockHight = 0; /** 用于装当前所有生成但未被删除的block **/ private List<Block[]> blockList; /** 当前生成的块的行数 **/ private int linesLength = 5; /** 游戏状态 **/ private int gameStatus = ConstantUtil.GAME_START; /** 移动步数 **/ private int moveNum = 0; /** 成功界面 **/ private SuccGroup mSuccGroup; /** 失败界面 **/ private FailGroup mFailGroup; /** 计时管理类 **/ private TimerTool mTimerTool; /** 显示计时的Text **/ private Text timerText; /**游戏提示语**/ private AnimatedSprite game_tip; // 用于Z索引排序 private static final int pZIndex_middle = 2; private static final int pZIndex_top = 3; 复制代码 2、计算每个block 块的宽高 // 镜头里显示的是4*4的块,所以用镜头宽的四分之一作为块宽 blockWidth = this.getCameraWidth() / 4; blockHight = this.getCameraHeight() / 4; 复制代码 3、 初始blocks,先创建4*5表格,使用时候再一行行增加 /** * 初始化blocks */ private void initBlocks() { Random mRandom = new Random(); int blackIndex = 0; // 初始blocks,先创建4*5表格,使用时候再一行行增加 for (int row = 0; row < linesLength; row++) {// 行 // 一行blocks Block[] rowBolcks = new Block[4]; // 随机一个黑块所在位置 blackIndex = mRandom.nextInt(4); for (int column = 0; column < 4; column++) {// 列 rowBolcks[column] = new Block(this, row, column, blockWidth, blockHight, blackIndex, getVertexBufferObjectManager()); this.attachChild(rowBolcks[column]); } blockList.add(rowBolcks); } } 复制代码 http://www.eoeandroid.com/forum-863-1.html www.ogengine.com |
相关文章推荐
- "别踩白块儿"游戏源代码分析和下载(二)
- PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第三篇(分数)
- PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第二篇(算法)
- PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第四篇(关卡)
- 雄踞AppStore榜首的游戏<别踩到白块儿>源代码分析和下载(第一篇)----它怎么也能爆红?
- Fruit Ninja(水果忍者)游戏源代码下载、分析(中)---可运行Android,Ios,Window,Mac,Html5平台
- 雄踞AppStore榜首的游戏<别踩到白块儿>源代码分析和下载(一)
- PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第四篇(关卡)
- PopStar(消灭星星)游戏源代码下载、分析及跨平台移植—第一篇(界面) 推荐
- Fruit Ninja(水果忍者)游戏源代码下载、分析(下)---可运行Android,Ios,Window,Mac,Html5平台
- Fruit Ninja(水果忍者)游戏源代码下载、分析(中)---可运行Android,Ios,Window,Mac,Html5平台
- Fruit Ninja(水果忍者)游戏源代码下载、分析(下)---可运行Android,Ios,Window,Mac,Html5平台
- 2014-05-08雄踞AppStore榜首的游戏<别踩到白块儿>源代码分析和下载(一)
- Fruit Ninja(水果忍者)游戏源代码下载、分析(上)---可运行Android,Ios,Window,Mac,Html5平台
- PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第三篇(分数)
- Fruit Ninja(水果忍者)游戏源代码下载、分析(上)---可运行Android,Ios,Window,Mac,Html5平台
- PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第二篇(算法)
- 雄踞AppStore榜首的游戏<别踩到白块儿>源代码分析和下载(第一篇)----它怎么也能爆红?
- PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第一篇(界面)
- 电子书下载:Delphi 源代码分析(清晰版)