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,

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

现在,可以运行一下,看一看效果了:

Ok,这次就到这里,

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

敬请期待哟~

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

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

时间: 2024-10-06 00:59:43

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

cocos2d-x 3.2 它 2048 —— 第三

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

认识元数据和IL(上) &lt;第三篇&gt;

说在,开篇之前 很早就有说说Metadata(元数据)和IL(中间语言)的想法了,一直在这篇开始才算脚踏实地的对这两个阶级兄弟投去些细关怀,虽然来得没有<第一回:恩怨情仇:is和as>那么迅速,但是Metadata和IL却是绝对重量级的内容,值得我们在任何时间关注,本文就是开始. 1 引言 你可曾想到,我们的C#代码,编译之后究竟为何物?你可曾认知,我们的可执行程序,运行之时的轨迹究竟为哪般?那么,本文通过对Metadata(元数据)和IL(Intermediate Language, 中间语

第三篇——第二部分——第五文 配置SQL Server镜像——域环境SQL Server镜像日常维护

本文接上面两篇搭建镜像的文章: 第三篇--第二部分--第三文 配置SQL Server镜像--域环境:http://blog.csdn.net/dba_huangzj/article/details/28904503第三篇--第二部分--第四文 配置SQL Server镜像--非域环境:http://blog.csdn.net/dba_huangzj/article/details/27652857 在搭建的过程中,可能你会遇到比较多的问题,下面介绍一些常见的问题及解决方案,另外把主要精力放到对

Cocos2d-x3.0游戏实例之《别救我》第三篇——循环滚动背景

好,这篇我们来讲解无限循环滚动背景,这个知识已经被讲到烂了,我以前的文章也介绍过,所以就不那么详细地说明了. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www.benmutou.com/blog/archives/823 文章来源:笨木头与游戏开发 为什么是循环滚动背景? 用循环滚动背景,其实是因为我想偷懒,因为这样我只需要准备一张图片就可以了. 我们最终要创建这样的背景,如图: 背景是在滚动的,大家有没有看到?(小若:看你妹,这是jpg,不是gif) 大家是

桌面山寨版2048—游戏逻辑篇之移动方块的框架

昨天看到博客(www.richinmemory.com)的流量统计,居然还有一位朋友评论了,感动的满眼都是泪啊!谢谢支持啊!为了使互动的朋友更方便的互动,今天我加了个能用微博等帐号登录评论的插件.需要源码的朋友可以直接发信到我的邮箱.猛戳之后(www.richinmemory.com)若觉得还过得去,可以尝试收藏啊,亲.有朝一日有幸流量稳定了,我就开始放弃这边更新了,不过这个肯定还要很久很久才能达到. 二.桌面山寨版2048-游戏逻辑篇之移动方块 这个小游戏的基本逻辑就是:合并同类项.玩家通过上

Cocos2d-x 3.2 之 别踩白块(第三篇)

***************************************转载请注明出处:http://blog.csdn.net/lttree****************************************** 别踩白块,第三篇... 距离第二篇都快过去半年了... 一直没抽出时间来完善它, 这次简单的完善一下: > 触摸屏蔽 > 最高分的存储 > 时间显示优化 > 初始化优化 主要就是这几方面的优化了,其他杂七杂八的,就没有列出了,可以参考源码 1. 触摸屏

raywenderlich写的关于内存管理,第三篇,关于属性的用法

原文链接地址:http://www.raywenderlich.com/2712/using-properties-in-objective-c-tutorial 著作权声明:本文由http://www.cnblogs.com/andyque翻译,欢迎转载分享.请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢! 教程截图: 这是在iphone上面使用objc,与内存管理有关的第三篇教程. 在第一篇教程中,我们介绍了在objective-c里面如果使用实例变量和引用计数来管理内存. 在第二篇教

HttpApplication处理对象与HttpModule处理模块 (第三篇)

一.HttpApplication对象简述 在HttpRuntime创建了HttpContext对象之后,HttpRuntime将随后创建一个用于处理请求的对象,这个对象的类型为HttpApplication. HttpRuntime管理一个定义在System.Web命名空间下的HttpApplicationFactory类的时候,HttpApplicationFactory通过工厂模式管理HttpApplication对象.在HttpApplicationFactory内部维护了一个HttpA

Python之路【第三篇】:Python基础(二)

Python之路[第三篇]:Python基础(二) 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作.