***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************

OK。抓紧更新吧。

长话短说,直奔主题。第三篇:

——数字块类的创建

数字块是神马?

——就是那个,你滑动的数字,还有随机出现的数字。

我们,先创建一个类NumberTiled,继承自Node:

NumberTiled.h:

#ifndef __test2048_NumberTiled_H__
#define __test2048_NumberTiled_H__ #include "cocos2d.h" USING_NS_CC; class NumberTiled : public Node
{
public:
// 存储行列位置 及 该位置的数字值
int m_row,m_col;
int m_number; // 移动到r,c 这个位置
void moveTo( int r , int c ); CREATE_FUNC(NumberTiled);
bool init();
}; #endif

NumberTiled.cpp:

#include "NumberTiled.h"
#include "GameDefine.h" USING_NS_CC; bool NumberTiled::init()
{
if( !Node::init() )
{
return false;
} // 背景层
auto bk = LayerColor::create( Color4B(200,200,200,255),GAME_TILED_WIDTH,GAME_TILED_HEIGHT );
this->addChild(bk); // 数字层——随机出一个数字。若数字等于7 则产生4否则产生2
int n = rand()%10;
this -> m_number = n==7?4:2;
// 依据数字的值,赋予不同颜色
switch ( this -> m_number )
{
case 2: bk -> setColor(Color3B(230,220,210)); break;
case 4: bk -> setColor(Color3B(230,210,190)); break;
default: break;
} // 创建字体,并将本块的数字显现上去
TTFConfig config("HelloKitty.ttf",40);
auto label = Label::createWithTTF(config, StringUtils::format("%d",this->m_number));
label -> setPosition(Point(GAME_TILED_WIDTH/2,GAME_TILED_HEIGHT/2));
label -> setColor(Color3B::BLACK);
bk -> addChild( label ); return true;
} void NumberTiled::moveTo( int r , int c )
{
this -> m_row = r;
this -> m_col = c;
this -> setPosition(
Point( m_col * GAME_TILED_WIDTH + GAME_TILED_BOARD_WIDTH * (m_col + 1),
m_row * GAME_TILED_HEIGHT + GAME_TILED_BOARD_WIDTH * (m_row+1)
));
}

好的,这个类基础的功能完毕了,

就是初始化 和 移动(出现) 都某个位置。

接下来,要在我们的界面上随机展现出来呀~

转到游戏界面,

上一篇文章中,我们加入了 逻辑数组map ,

如今,我们还要加入一个Vector(集合)来保存全部的块。

GameScene.h:

Vector<NumberTiled *> m_allTiled;

然后。在init中。我们创建了出来了格子,接下来,有了数字块以后,

那就要随机产生一个块咯,

加入一个方法——newNumberTiled

这个函数作用就是,产生一个新块:

void GameScene::newNumberTiled()
{
// 创建一个 数字块的实例
auto tiled = NumberTiled::create();
// 找到有几个空暇的位置
int freeCount = 16 - m_allTiled.size(); int num = rand() % freeCount;
int row = 0,col = 0,count = 0;
bool find = false; // 产生数字,一定在空白区域
for( ; row < GAME_ROWS ; ++row )
{
for( col = 0 ; col < GAME_COLS ; ++col )
{
if( map[row][col] == 0 )
{
// 记录空白区域的数量
++count;
if( count >= num )
{
find = true;
break;
}
}
}
if( find )
{
break;
}
} // 注意在colorBack中加入tiled哟
colorBack -> addChild( tiled );
tiled -> moveTo ( row , col );
m_allTiled.pushBack(tiled);
map[ row ][ col ] = m_allTiled.getIndex(tiled)+1;
}

恩,详细解释。在代码中都已给出了。

说明一下怎么在空的位置随机产生块:

首先。获取有多少空位置,

然后。随机产生一个数。小于空位置总数

接着设定count为0,

从第一个位置到最后一个位置遍历,

遇到空位置,count+1。

若大于产生的随机数,就在该位置放置数字块。

如今,能够执行一下。看一看效果了:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHR0cmVl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

Ok,这次就到这里。

下次内容就是。对触摸屏幕的处理~

敬请期待哟~

本篇文章代码:http://pan.baidu.com/s/1sjHLNp7

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************


版权声明:本文博客原创文章。博客,未经同意,不得转载。

cocos2d-x 3.2 它 2048 —— 第三的更多相关文章

  1. Cocos2D:塔防游戏制作之旅(三)

    整合炮塔资源 为了快速开始,我们为你创建了开始的项目.它包括了一个空白的Cocos2D项目以及大多数你将在教程中使用到的资源. 所以首先下载该 开始项目 并且解压缩到你指定的位置中去. 注意:该项目的 ...

  2. 从零開始开发Android版2048 (三)逻辑推断

    近期工作比較忙,所以更新的慢了一点,今天的主要内容是关于Android版2048的逻辑推断,经过本篇的解说,基本上完毕了这个游戏的主体部分. 首先还是看一下,我在实现2048时用到的一些存储的数据结构 ...

  3. Cocos2D研究院之CCNode详解(三)

    http://www.xuanyusong.com/archives/950 上一章我们了解了cocos2d的项目路径以及工作原理,这次作者要真刀真枪地讲解代码了,咱们先来看看cocos2d最常用.也 ...

  4. 如何在Cocos2D游戏中实现A*寻路算法(三)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  5. 如何在Cocos2D 1.0 中掩饰一个精灵(三)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 尝试编译运行,在你每一次点击屏幕的时候,你将看到我可爱的妻子制作 ...

  6. Cocos2d中update与fixedUpdate的区别(三)

    没错!现在的情况是很糟糕.因为玩家不会看到平滑的动作. 不管怎样,我们都对此无能为力.玩家期待在1秒后小球出现在位置(8),所以我们应该把球放在那里. 我们不会讨论如何避免掉帧的情况.对于这个例子我们 ...

  7. 【Cocos2D研究院之游戏开发】

    http://www.xuanyusong.com/archives/category/ios/cocos2d_game 分类目录归档:[Cocos2D研究院之游戏开发]   201211-19 Co ...

  8. rsync传输性能测试总结 转

    测试环境 1.1服务器硬件信息 1.2 服务器软件信息 1.3 Rsync所能够支持的功能 (1)支持断点续传 (2)支持使用ssh传输加密 (3)支持128位MD4校验(3.0以后版本使用MD5加密 ...

  9. Linux磁盘管理命令

    1.磁盘分割: fdisk [root@linux ~]# fdisk [-l] 装置名称 参数: -l :输出后面接的装置所有的partition内容.若仅有fdisk -l时, 则系统将会把整个系 ...

随机推荐

  1. js 省市二级联动

    <html> <head> <meta charset="UTF-8"> <title></title> </he ...

  2. [Recompose] Add Local State with Redux-like Reducers using Recompose

    Learn how to use the 'withReducer' higher order component using the alternative reducer form. If you ...

  3. [AngularFire2] Signup and logout

    import {AuthProviders, FirebaseAuthState, FirebaseAuth, AuthMethods} from "angularfire2";i ...

  4. SharedPreferences基础 分类: H1_ANDROID 2013-11-04 22:35 2559人阅读 评论(0) 收藏

    见归档项目:SharedPreferencesDemo.zip 1.对于数据量较小,且有明显的K-V形式的数据而言,适合用SharedPreferences保存.SharedPreferences的数 ...

  5. 【40.17%】【codeforces 569B】Inventory

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  6. 指针知识梳理6-const与指针

    const 定义的变量为仅仅读变量.在语法层面上通过这个变量去改动内存是不同意的. 可是对于下面代码.就有非常多人绕了: const int  *p1;  //p1能变.*p1不能变 int cons ...

  7. [Ramda] Declaratively Map Data Transformations to Object Properties Using Ramda evolve

    We don't always control the data we need in our applications, and that means we often find ourselves ...

  8. javaScript实现图片滚动及一个普通图片轮播的代码

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 通过getElementById来取得Form里的表单元素

    <1> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>湖南易通 ...

  10. 在向server发送请求时发生传输级错误。 (provider: 共享内存提供程序, error: 0 - 管道的还有一端上无不论什么进程。

    作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/36425825 SQL Server 2008 + VS2010 用C#编写的代 ...