cocos2d-x 3.2 它 2048 —— 第三

***************************************转载请注明出处: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" >

Ok,这次就到这里。

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

敬请期待哟~

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

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

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

时间: 2024-10-10 18:06:09

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

cocos2d-x 3.2 之 2048 —— 第三篇

***************************************转载请注明出处:http://blog.csdn.net/lttree****************************************** OK,抓紧更新吧. 长话短说,直奔主题,第三篇: --数字块类的创建 数字块是神马? --就是那个,你滑动的数字,还有随机出现的数字. 我们,先创建一个类NumberTiled,继承自Node: NumberTiled.h: #ifndef __test2048_N

从零开始开发Android版2048 (三)逻辑判断

最近工作比较忙,所以更新的慢了一点,今天的主要内容是关于Android版2048的逻辑判断,经过本篇的讲解,基本上完成了这个游戏的主体部分. 首先还是看一下,我在实现2048时用到的一些存储的数据结构.我在实现时,为了省事存储游戏过程中的变量主要用到的是List. 比如说:List<Integer> spaceList = new ArrayList<Integer>();这个spaceList主要用于保存,所有空白格的位置,也就是空白格在GridLayout中的位置(从0到15)

Cocos2D研究院之CCNode详解(三)

http://www.xuanyusong.com/archives/950 上一章我们了解了cocos2d的项目路径以及工作原理,这次作者要真刀真枪地讲解代码了,咱们先来看看cocos2d最常用.也是作者认为最核心的类——CCNode. 之前说过,cocos2d的所有类都以CC开头,那么实际上这个类的名字就是Node,类如其名,这个类的实例就是一个节点.Cocos2d的类是树状继承的,而在内存中,各个实例之间也是以“树”这种数据结构相关联的.,可见树在cocos2d中的重要性,难怪某位伟人说“

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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 创建开放和闭合列表 接下来我们将使用2个NSMutableArray来跟踪保存我们的开放和闭合列表. 你可能奇怪为什么不用NSMutableSet代替.好吧,这里有2个原因:

Cocos2dx游戏开发——2048

由于自己自学Cocos2d-x游戏引擎已经有一段时间,是时候该做一个小游戏来练手了.从游戏的逻辑分析到最后的实现大概花了一周左右吧,时间有点长哈.做游戏最不好找的就是图片资源,要是有个美术设计师帮忙,那该是一件多么美的事情,想想就好.游戏采用了Cocos2d-x V3.10版本,用VS2013进行开发的. 2048游戏的玩法规则:在游戏开始时,随机在任意两个空白方块产生数字2或4,玩家可以通过上下左右来移动有数字的方块,在移动的同一方向,若两个数字之间没有其他数字方块阻隔且相等,则数字相加并合并

【Cocos2D研究院之游戏开发】

http://www.xuanyusong.com/archives/category/ios/cocos2d_game 分类目录归档:[Cocos2D研究院之游戏开发] 201211-19 Cocos2D研究院之打开全新ViewController与返回(八) 雨松MOMO [Cocos2D研究院之游戏开发] 围观5745次 17条评论          之前cocos2d的文章都是由魏凯同学维护,从今天开始我也会抽时间写点cocos2d的文章.最近在研究如何将IOS游戏与软件结合起来.通常游

Elasticsearch安装篇

1.先去elasticsearch 官网 https://www.elastic.co/ Jar下载 http://jcenter.bintray.com/org/elasticsearch/elasticsearch-hadoop 下载好后 直接解压 tar -zxvf   elasticsearch-2.4.3.tar.gz 修改config下elasticsearch.yml cluster.name: gotop node.name: hadoop001 http.port: 9200

linux磁盘分区指令

1.  fdisk  [-l] 装置名称:查看磁盘分区情况,或进行磁盘分区,参数: -l:输出后面接的装置所有的partition内容.若仅有fdisk –l时,则系统将会把整个系统内能够搜寻的装置的partition都列出来. 该指令执行后,只需在for help:后输入m,即可查看各参数的意义. 2.  mkfs  [-t 文件系统格式] 装置文件名:格式化文件系统,参数: 1)-t:可以接文件格式,例如ext3,ext2,vfat等. 3.  mke2fs  [-b  block大小][-

Elasticsearch 5 集群

1 准备工作 /etc/profile添加vim高亮显示 export PS1="\[\e]0;\a\]\n\[\e[1;32m\]\[\e[1;33m\]\H\[\e[1;35m\]<\$(date +\"%Y-%m-%d %T\")> \[\e[32m\]\w\[\e[0m\]\n\u>\\$ " 服务器信息:    192.168.91.220  (elasticsearch-node1)    192.168.91.221  (elasti