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

本帖最后由 lch123go 于 2014-7-9 17:51 编辑

“别踩白块儿”是目前非常火的一款游戏,游戏非常简单刺激。关于具体怎么火法怎么玩我就不多说了,相信看到本文的朋友们都非常地清楚。

什么游戏火,我们都想知道自己能不能也弄一个玩玩,我也花了点时间弄了一个,游戏代码将会开源,利人利己,大家一起提高,希望各位多多支持。

下面介绍如何用OGEngine游戏引擎完成“别踩白块儿”游戏的经典模式。

源码下载地址

一、最终实现的部分效果截图

1、刚开始时,最下面有一栏为***,紧接着上面每一行都是有一个黑色块,其余为白色块,准备冲啊.....

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

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

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

二、创建Block类

游戏中要用到很多方块,所以我们单独创建一个方块类Block。Block是一个个白块或者黑块,单个块元素,这里我们的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. private AnimatedSprite game_tip;
  24. // 用于Z索引排序
  25. private static final int pZIndex_middle = 2;
  26. 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. }

复制代码

http://www.eoeandroid.com/forum-863-1.html

www.ogengine.com


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

时间: 2024-10-22 18:30:31

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

&quot;别踩白块儿&quot;游戏源代码分析和下载(二)

四.游戏交互实现 1.前面已经介绍在 Block 类实现了每个block的触碰监听,block 实现触碰监听,当按下时,调起在GameScene中实现的touchBlock方法.下面来看改方法的实. /** * 点击到Block时进行的逻辑处理 * * @param pBlock *            所点击的block */ public void touchBlock(Block pBlock) { if (gameStatus == ConstantUtil.GAME_START) {

别踩白块儿游戏源码项目

这个项目有带说明文档,大家可以看看源码附件的说明文档吧,"别踩白块儿"是目前非常火的一款游戏,游戏非常简单刺激.关于具体怎么火法怎么玩我就不多说了,相信看到本文的朋友们都非常地清楚. 什么游戏火,我们都想知道自己能不能也弄一个玩玩,我也花了点时间弄了一个,游戏代码将会开源,利人利己,大家一起提高,希望各位多多支持. 下面介绍如何用OGEngine游戏引擎完成"别踩白块儿"游戏的经典模式. 一.最终实现的部分效果截图 1.刚开始时,最下面有一栏为***,紧接着上面每一

别踩白块儿游戏源码Android版

这个项目有带说明文档,大家可以看看源码附件的说明文档吧,“别踩白块儿”是目前非常火的一款游戏,游戏非常简单刺激.关于具体怎么火法怎么玩我就不多说了,相信看到本文的朋友们都非常地清楚. 什么游戏火,我们都想知道自己能不能也弄一个玩玩,我也花了点时间弄了一个,游戏代码将会开源,利人利己,大家一起提高,希望各位多多支持. 下面介绍如何用OGEngine游戏引擎完成“别踩白块儿”游戏的经典模式. 一.最终实现的部分效果截图 1.刚开始时,最下面有一栏为黄色,紧接着上面每一行都是有一个黑色块,其余为白色块

跃居AppStore榜首的游戏&lt;别踩到白块儿&gt;源代码分析和下载(第一篇)----它怎么也能爆红?

AppStore和Android市场情况 莫名其妙爆红的游戏 真的莫名其妙,笔者下这个游戏两次,第一次在豌豆荚排行榜看到这款游戏,名字怪怪的,下载下来尝试一下,没觉得有什么新颖的,还在思虑这是不是刷榜刷上去的,果断卸载了:周末的时候逛逛app store,突然看到排行榜首位是Dont Tap The White Tile(后更名panio tiles ),翻译一下不就是别踩到白块儿,笔者震惊了,太莫名其妙了,这东西是真的火,不是刷榜刷出来的!游戏玩家们心理真的难以捉摸,又捧红了一款游戏: 近期爆

【cocos2d-x制作别踩白块儿】第九期:游戏计时功能(附源代码)

游戏没有计时,不是坑爹吗? 这一期,我们将来加入游戏计时功能. 1. 定义变量和函数 我们先在HelloWorldScene.h中定义几个变量和函数 long startTime; bool timeRunning; startTime用来记录開始的时间,timeRunning用来推断游戏是否在进行中. //開始计时 void startTimer(); //结束计时 void stopTimer(); virtual void update(float dt); startTimer()函数时

初学JS——利用JS制作的别踩白块儿(街机模式) 小游戏

初学JS--利用JS制作的别踩白块儿(街机模式) 小游戏 这个是上个星期5写的了,当时是突然想写个游戏,就想到了别踩白块儿,当时的想法是 可能普通模式的别踩白块儿因为他的"块儿"是滚动的向上这种,以我目前会的技术想不出怎么写, 但是如果是街机模式,通过你每按一次按键之后他像下跳一格这样的就非常好实现了. 通过我目前会的知识,实现的步骤大概是这样的: 建一个4X4的表格,制作2张150X100的图片,一张全白色,一张全黑色,命名为0.JPG,1.JPG 就是说当文件名为0的时候就是白色的

用Canvas写一个简单的游戏--别踩白块儿

第一次写博客也不知怎么写,反正就按照我自己的想法来吧!怎么说呢?还是不要扯那些多余的话了,直接上正题吧! 第一次用canvas写游戏,所以挑个简单实现点的来干:别踩白块儿,其他那些怎么操作的那些就不用再扯了,大家应该都懂,不懂的看到黑色的就点就是了,扯多了我打字手也累,大概.链接给你们:http://nowtd.cn/white/ 咱不是理论派,所以在这里不会扯多少理论. 首先看看html的结构吧 1 <header class="container"> 2 <art

【cocos2d-x制作别踩白块儿】第一期:游戏介绍

这一系类文章.我们将来分析时下最火的一款游戏 -- 别踩白块儿. 无图无真相,先上图 这就是我们终于要完毕项目的效果图. 游戏刚開始的最以下有一栏为黄色,紧接着上面每一行都是有一个黑色块,其余为白色块 玩家假设按错了.按到了白色块.会出现游戏结束对话框 游戏进行到最后会出现绿色栏.而且在游戏过程中都有一个计时器,显示时间 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTGVnZW5kb2YxOTkx/font/5a6L5L2T/fontsize/400

别踩白块儿

相信大家对这个游戏并不陌生.这个游戏可玩性不错,就是有点闹心,一点小错误又得重新来过.可所谓一失足成千古恨啊! 不过我最近在和朋友争论这个游戏里的钢琴音效的问题.我认为那是一首首歌曲的调,他却不这么认为(可能有点笨吧).因为我玩的时候明明可以听到是歌曲的音调,还可以跟着哼出来.这里我搜集了一下这里面的歌曲,有我听出来的,也有我在网上搜的.这些音乐随机出现在一局游戏里,当你足够厉害弹完一首歌曲,它会在随机地出现一首(难道没有尽头?)笔者反正只连续听过两首歌曲.不过随着游戏的进行,节奏越来越快,有些