c++实践--cocos2dx, 2048v1.0

简介: <h1>主要类的作用和关系:</h1> <h1><br></h1> <div>Director: 导演,单例类Director::getInstance()<br>           设置游戏配置(OpenGL),推动游戏发展<br><span style="white-space:pre"></span> 转场:runWithScene, replaceScene, pushSc
+关注继续查看

主要类的作用和关系:


Director: 导演,单例类Director::getInstance()
          设置游戏配置(OpenGL),推动游戏发展
 转场:runWithScene, replaceScene, pushScene, popScene


Scene:    场景,负责组织游戏元素
Layer:    层, 负责组织游戏元素
Sprite:   精灵,封装了一张图片,显示具体元素
          背景图片,主角,敌人,道具,头像。。。。


GLView:  舞台,OpenGL渲染的目标(窗口)

2048游戏逻辑

采用二维数组作为游戏界面的显示,

2048游戏逻辑:
【1】生成游戏对象(2个数字)
CreatePerson()
CreatePerson()
【2】更新游戏视图界面
如果胜利就不相应用户输入
if(isWin)
{
	return;
}
if(up)
{ctlfunc()}else if(down)
{ctlfunc()}else if(left)
{ctlfunc()}else if(right)
{ctlfunc()}

---------------------------
随机生成位置CreatePerson()
{
只要数组元素为空就生成,并记录当前坐标位置。
}
移动控制ctlfunc()
{
	//对于第0行不需要移动,已经是最上行了
	for (int y = 1; y < 4; y++)
	{
		for (int x = 0; x < 4; x++)
		{
			person = PersonList[x, y];
			if (person == null)
			{
				//如果当前位置没有对象,则不需要进行任何操作
				continue;
			}
			//如果当前位置有对象,则执行以下代码
			//判断当前位置的前面所有位置是否有对象
			int destPos = -1;
			for (int y1 = y - 1; y1 >= 0; y1--)
			{
				personBefore = PersonList[x, y1];
				if (personBefore != null)
				{
					//如果有,则不再向前找
					if (person.name.Equals(personBefore.name))
					{
						//如果是相同的对象则合并,不再需要移动当前对象
						destPos = -1;
						Destroy(person);
						PersonList[x, y] = null;
						//更新合并后的数字
						personBefore.SendMessage("UpdateLevel");
					}
					break;
				}
				else
				{
					//如果没有,则继续向前找
					destPos = y1;
				}
			}
			if (destPos > -1)
			{
				//完成移动
				//1、更新位置矩阵信息
				PersonList[x, y] = null;
				PersonList[x, destPos] = person;
				//2、更改当前游戏对象的位置
				person.transform.position += new Vector3(0, (y - destPos) * ItCastHelper.YOffset, 0);
			}
		}
	}
	//新生成游戏对象
	CreatePerson();
}

代码结构:

   使用mvc的软件模型,scene和layer的解耦和。



心得:

   cocos引擎确实够强大,可以很好的练习c++,c代码将linux的内核源代码写到了极致。c++代码将cocos同样写成了极品。仔细的拜读源代码,确实可以很优雅地将程序码出来。

结合网上的资源,加上自己的理解,算是自己也写出一个demo。


cmd进入到E:\BaiduYunDownload\6yue\cocos2dx_env\cocos2d-x-3.1\tools\cocos2d-console\bin目录中,
>python cocos.py new wuyq-2048  -p com.wuyq.cn -l cpp -d E:\

源代码, 新建一个项目,将Classes和Resources目录中的文件进行覆盖即可。


起初,打算在windows平台上面,利用语音控制键盘的输入,从而控制游戏的交互。百度了一下,cocos2d主要面向的是触摸屏幕设备的,在WINDOWS下的定位感觉多多少少就是相当于一个模拟器,因此并没有太多的PC下重要的键盘支持。然而响应键盘消息对于调试来说可以提供不少方便。下边就通过更改cocos2d-x的源码来添加键盘消息响应。感觉意义不大了。对于语音控制的demo,单独做一个demo进行练习。


后期:

   将windwos下面的代码移植到android上面。


目录
相关文章
|
10月前
|
编译器 程序员 Linux
C++ 中的内存对齐——实践篇
> 本文为《C++ 中的内存对齐》系列之下篇,[上篇](https://ata.alibaba-inc.com/articles/243681)介绍内存对齐的理论基础,建议优先食用~ ### TL;DR - 编译器可能会在结构体中填充字节,以满足所有成员的对齐要求; - 可以通过预处理指令 `#pragma pack` 及 `alignas` 标识符自定义内存对齐; - 对于栈上及静态变量,编
924 0
|
Java 测试技术 Linux
客户端单元测试实践——C++篇
我们团队在手淘中主要负责BehaviX模块,代码主要是一些逻辑功能,很少涉及到UI,为了减少双端不一致问题、提高性能,我们采用了将核心代码C++化的策略。由于团队项目偏底层,测试同学难以完全覆盖,回归成本较高,部分功能依赖研发同学自测,为了提高系统的稳定性,我们在团队中实行了单元测试,同时由于集团客户端C++单元测试相关经验沉淀较少,所以在此分享下团队在做单元测试中遇到的问题与解决思路,希望能对大家所有帮助。
客户端单元测试实践——C++篇
|
自然语言处理 Java 数据挖掘
Linux下跨语言调用C++实践
Linux下跨语言调用C++实践
175 0
Qt Creator plugin动手实践(4)C++ 类ModeManager源码分析
Qt Creator plugin动手实践(4)C++ 类ModeManager源码分析
212 0
Qt Creator plugin动手实践(4)C++ 类ModeManager源码分析
|
IDE 开发工具 C++
Qt Creator plugin动手实践(3)C++ 类ModeManager源码分析
Qt Creator plugin动手实践(3)C++ 类ModeManager源码分析
216 0
Qt Creator plugin动手实践(3)C++ 类ModeManager源码分析
|
JSON JavaScript 前端开发
记一次完整 C++ 项目编译成 WebAssembly 的实践
有 2W+ 行代码,一篇通用的技术方案
5646 1
记一次完整 C++ 项目编译成 WebAssembly 的实践
|
NoSQL Linux 编译器
Linux C++ 应用二进制兼容实践
本文将介绍一些在开发多 Linux 平台 C++ 应用时可能遇到的兼容性问题和相关的解法。虽然是以 C++ 为讲述对象,但兼容性这个问题,在没有 VM 帮你做这些脏活累活的情况下,是所有 C-like 语言(比如 Go、Rust 等)都可能遇到的。
2240 0
|
C++ 测试技术
带你读《C++代码整洁之道:C++17 可持续软件开发模式实践》之三:原则
如果想用C++语言编写出易维护的、扩展性良好的以及生命力强的软件,那么,对于所有的软件开发人员、软件设计人员、对现代C++代码感兴趣或想降低开发成本的项目领导者来说,本书都是必需品。如果你想自学编写整洁的C++代码,那么本书也是你需要的。本书旨在通过一些示例帮助各个技术层次的开发人员编写出易懂的、灵活的、可维护的和高效的C++代码。即使你是一名资深的开发工程师,在本书中也可以找到有价值的知识点。
|
测试技术 数据库 安全
带你读《C++代码整洁之道:C++17 可持续软件开发模式实践》之二:构建安全体系
如果想用C++语言编写出易维护的、扩展性良好的以及生命力强的软件,那么,对于所有的软件开发人员、软件设计人员、对现代C++代码感兴趣或想降低开发成本的项目领导者来说,本书都是必需品。如果你想自学编写整洁的C++代码,那么本书也是你需要的。本书旨在通过一些示例帮助各个技术层次的开发人员编写出易懂的、灵活的、可维护的和高效的C++代码。即使你是一名资深的开发工程师,在本书中也可以找到有价值的知识点。
相关产品
云迁移中心
推荐文章
更多