首页技术教程极客学院eoe

eoe 移动开发者论坛

 找回密码
 加入eoe

QQ登录

只需一步,快速开始

查看: 11784|回复: 23
收起左侧

“别踩白块儿"游戏源代码分析和下载(一)

  [复制链接]

11

主题

31

帖子

267

e币
发表于 2014-7-9 16:58:16 | 显示全部楼层 |阅读模式
本帖最后由 lch123go 于 2014-7-9 17:51 编辑

“别踩白块儿”是目前非常火的一款游戏,游戏非常简单刺激。关于具体怎么火法怎么玩我就不多说了,相信看到本文的朋友们都非常地清楚。
什么游戏火,我们都想知道自己能不能也弄一个玩玩,我也花了点时间弄了一个,游戏代码将会开源,利人利己,大家一起提高,希望各位多多支持。
下面介绍如何用OGEngine游戏引擎完成“别踩白块儿”游戏的经典模式。


一、最终实现的部分效果截图
1、刚开始时,最下面有一栏为黄色,紧接着上面每一行都是有一个黑色块,其余为白色块,准备冲啊.....

2、游戏中,在游戏过程中都有一个计时器,记录当前所进行的时间。冲啊.....注意别点到了白块儿。

3、玩家如果误点了白色块,会出现游戏失败界面,如果之前有创立过最佳成绩,则会显示出来,记录的是完成任务所用的时间,时间越短说明你越厉害。点击“重来”即会重新开始。

4、游戏进行到最后会出现绿色栏,游戏胜利界面,会显示本次所用时间,如果刷新了记录则标记“新纪录”字样,如果没有刷新记录则还会显示历史最佳记录。大伙努力挑战新记录吧!
  

二、创建Block
游戏中要用到很多方块,所以我们单独创建一个方块类BlockBlock是一个个白块或者黑块,单个块元素,这里我们的Block继承矩形Rectangle,每个Block用矩形来展示。

1、声明一些所需要的成员变量
  1. public class Block extends Rectangle {
  2.         // 游戏场景
  3.         private GameScene mGameScene;
  4.         // 此block的颜色类型,白色还是黑色?
  5.         private int colorType;
  6.         // block 所在的行
  7.         private int row;
  8.         // block 所在的列
  9.         private int column;
  10.         // ======================get&set========================
  11.         public int getRow() {
  12.                 return row;
  13.         }
  14.         public void setRow(int row) {
  15.                 this.row = row;
  16.         }
  17.         public int getColumn() {
  18.                 return column;
  19.         }
  20.         public int getColorType() {
  21.                 return colorType;
  22.         }
  23.         // =====================================================
复制代码

2、构造器1,初始化blocks时用到,当为最底部一行时设为黄色
  1.         /**
  2.          * 构造器1,初始化blocks时用到
  3.          * @param pGameScene 游戏场景
  4.          * @param row block所在的行
  5.          * @param column block所在的列
  6.          * @param pWidth block的宽
  7.          * @param pHeight block的高
  8.          * @param blackIndex 用来确定是否是黑块,如果blackIndex == column时设为黑块
  9.          * @param pVertexBufferObjectManager
  10.          */
  11.         public Block(GameScene pGameScene, int row, int column, float pWidth,
  12.                         float pHeight, int blackIndex,
  13.                         VertexBufferObjectManager pVertexBufferObjectManager) {
  14.                 super(column * pWidth, (3 - row) * pHeight, pWidth - 1, pHeight - 1,
  15.                                 pVertexBufferObjectManager);
  16.                 this.mGameScene = pGameScene;
  17.                 this.row = row;
  18.                 this.column = column;
  19.                 if (row == 0) {
  20.                         // 第一行设置为黄块
  21.                         this.setColor(Color.YELLOW);
  22.                 } else {
  23.                         // 初始化block的颜色数据,是白块还是黑块?
  24.                         initBlockData(column, blackIndex);
  25.                 }
  26.                 // 设置可以相应触碰事件
  27.                 this.setIgnoreTouch(false);
  28.         }
复制代码

3、构造器2,新增blocks时用到
  1. /**
  2.          * 构造器2,新增blocks时用到
  3.          * @param pGameScene 游戏场景
  4.          * @param column block所在的列
  5.          * @param pWidth block的宽
  6.          * @param pHeight block的高
  7.          * @param blackIndex 来确定是否是黑块,如果blackIndex == column时设为黑块
  8.          * @param pVertexBufferObjectManager
  9.          */
  10.         public Block(GameScene pGameScene, int column, float pWidth, float pHeight,
  11.                         int blackIndex, VertexBufferObjectManager pVertexBufferObjectManager) {
  12.                 super(column * pWidth, 0, pWidth - 1, pHeight - 1,
  13.                                 pVertexBufferObjectManager);
  14.                 this.mGameScene = pGameScene;
  15.                 this.column = column;
  16.                 // 初始化block的颜色数据,是白块还是黑块?
  17.                 initBlockData(column, blackIndex);
  18.                 // 设置可以相应触碰事件
  19.                 this.setIgnoreTouch(false);
  20.         }
复制代码

4、实现函数initBlockData初始化block的颜色数据,是白块还是黑块
  1. /**
  2.          * 初始化block的颜色数据,是白块还是黑块?
  3.          * @param column
  4.          * @param blackIndex
  5.          */
  6.         private void initBlockData(int column, int blackIndex) {
  7.                 if (blackIndex == column) {
  8.                         // 设置为黑块
  9.                         this.setColor(Color.BLACK);
  10.                         this.colorType = ConstantUtil.COLOR_BLACK;
  11.                 } else {
  12.                         // 设置为白块
  13.                         this.setColor(Color.WHITE);
  14.                         this.colorType = ConstantUtil.COLOR_WHITE;
  15.                 }
  16.         }
复制代码

5、每个block 实现触碰监听,当按下时,调起在GameScene中实现的touchBlock方法。
记得设置可以相应触碰事件setIgnoreTouch(false);
  1. @Override
  2.         public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
  3.                         float pTouchAreaLocalX, float pTouchAreaLocalY) {
  4.                 // 触碰事件监听
  5.                 if (pSceneTouchEvent.isActionDown()) {
  6.                         // 点击到Block时进行的逻辑处理
  7.                         mGameScene.touchBlock(this);
  8.                 }
  9.                 return true;
  10.         }
复制代码

三、创建GameScene
GameScene类是游戏场景类,是本游戏的主要部分,主要实现游戏界面及相关逻辑。

1、先看看其成员变量
  1. public class GameScene extends Scene {
  2.         /** 块的宽 **/
  3.         private float blockWidth = 0;
  4.         /** 块的高 **/
  5.         private float blockHight = 0;
  6.         /** 用于装当前所有生成但未被删除的block **/
  7.         private List<Block[]> blockList;
  8.         /** 当前生成的块的行数 **/
  9.         private int linesLength = 5;
  10.         /** 游戏状态 **/
  11.         private int gameStatus = ConstantUtil.GAME_START;
  12.         /** 移动步数 **/
  13.         private int moveNum = 0;
  14.         /** 成功界面 **/
  15.         private SuccGroup mSuccGroup;
  16.         /** 失败界面 **/
  17.         private FailGroup mFailGroup;
  18.         /** 计时管理类 **/
  19.         private TimerTool mTimerTool;

  20.         /** 显示计时的Text **/
  21.         private Text timerText;
  22.         
  23.         /**游戏提示语**/
  24.         private AnimatedSprite game_tip;

  25.         // 用于Z索引排序
  26.         private static final int pZIndex_middle = 2;
  27.         private static final int pZIndex_top = 3;
复制代码

2、计算每个block 块的宽高
  1. // 镜头里显示的是4*4的块,所以用镜头宽的四分之一作为块宽
  2.                 blockWidth = this.getCameraWidth() / 4;
  3.                 blockHight = this.getCameraHeight() / 4;
复制代码

3、 初始blocks,先创建4*5表格,使用时候再一行行增加
  1.         /**
  2.          * 初始化blocks
  3.          */
  4.         private void initBlocks() {
  5.                 Random mRandom = new Random();

  6.                 int blackIndex = 0;
  7.                 // 初始blocks,先创建4*5表格,使用时候再一行行增加
  8.                 for (int row = 0; row < linesLength; row++) {// 行
  9.                         // 一行blocks
  10.                         Block[] rowBolcks = new Block[4];
  11.                         // 随机一个黑块所在位置
  12.                         blackIndex = mRandom.nextInt(4);
  13.                         for (int column = 0; column < 4; column++) {// 列
  14.                                 rowBolcks[column] = new Block(this, row, column, blockWidth,
  15.                                                 blockHight, blackIndex, getVertexBufferObjectManager());
  16.                                 this.attachChild(rowBolcks[column]);
  17.                         }
  18.                         blockList.add(rowBolcks);
  19.                 }
  20.         }
复制代码

本贴先介绍到这里接下来请看 : “别踩白块儿"游戏源代码分析和下载(二 )


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入eoe

x
头像被屏蔽

0

主题

6

帖子

74

e币
发表于 2015-8-16 22:49:45


★大品牌,娱乐城,搏彩公司,顶级信誉,点击了解更多详情★
★缅甸赌场,美女荷官视讯等玩法多多!存取火速到账,老品牌,高信誉★
【皇家国际娱乐城】开户投注地址:http://link.nob99.com打造公平公正的网络搏彩,
跟现场同步,现场客人证明一切,最低存款100,最高无上限。
您好:【皇家国际娱乐城】在线客服24小时为您提供服务!
500万提款3分钟内到帐。可申请试玩。现场客人证明一切!
感谢您对本公司的支持,祝生活愉快。
开户热线:18313223380  开户QQ:447486669。
【皇家国际】官网:  http://link.nob99.com

1

主题

14

帖子

47

e币
发表于 2014-7-10 09:56:46 | 显示全部楼层
很不错的东东,感谢分享。。。先把源码给收下了。。
发表于 2014-7-12 11:05:25 | 显示全部楼层
立马开发一个玩玩

5

主题

28

帖子

159

e币
发表于 2014-7-14 09:53:21 | 显示全部楼层
路过看看。。。
发表于 2014-8-1 16:32:37 | 显示全部楼层
要是给个免费连接就好了。。。。

11

主题

31

帖子

267

e币
 楼主| 发表于 2014-8-4 11:37:49 | 显示全部楼层
玉米之家 发表于 2014-8-1 16:32
要是给个免费连接就好了。。。。

源码免费下载链接:http://www.ogengine.com/info/OGEngine_bcbkym.rar
发表于 2014-8-4 17:34:12 | 显示全部楼层
lch123go 发表于 2014-8-4 11:37
源码免费下载链接:http://www.ogengine.com/info/OGEngine_bcbkym.rar

多谢楼主。。。。。
发表于 2014-8-5 11:02:06 | 显示全部楼层
感谢楼主分享,thank you!
发表于 2014-8-6 09:33:12 | 显示全部楼层
谢谢分享。。。

4

主题

230

帖子

2

e币
发表于 2014-9-24 11:36:02 | 显示全部楼层
啊打发打发打发的是

4

主题

230

帖子

2

e币
发表于 2014-9-24 11:37:39 | 显示全部楼层
ADFADADAFAFDAFAFDDAFAFD

1

主题

14

帖子

16

e币
发表于 2014-10-1 14:43:57 | 显示全部楼层
如何把block换成自己的图片,用哪个方法

0

主题

158

帖子

15

e币
发表于 2014-10-18 23:02:37 | 显示全部楼层
。。。。。。。。。。

0

主题

25

帖子

54

e币
发表于 2014-10-28 14:07:37 | 显示全部楼层
很不错的东东。

0

主题

1

帖子

0

e币
发表于 2015-2-6 15:07:48 | 显示全部楼层
都失效了  QAQ怎麽办怎么办
您需要登录后才可以回帖 登录 | 加入eoe

本版积分规则

推荐阅读
赞助商们

QQ|新帖|小黑屋|eoe 移动开发者论坛 ( 京ICP备11018032 京公网安11010802020210  

GMT+8, 2018-10-16 07:16 , Processed in 0.174851 second(s), 44 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表
关闭

扫一扫 关注eoe官方微信