华容道开发02---角色类的设计与数据读取

角色类设计:

曹操:4个格子

将军_横:2个

将军_竖:2个

兵:1个

将角色分为12种,因为,其中10种是将军,横向的5种,竖向的5种,1种兵,1种Boss

角色属性:

ID:

Type:

贴图:

Role.h

#ifndef _ROLE_H_
#define _ROLE_H_

#include "cocos2d.h"
#include "tinyxml2/tinyxml2.h"

#define  IF_NULL_RETURN_FALSE(_x_) if(_x_ == nullptr) return false 

using namespace tinyxml2 ;
USING_NS_CC ;
typedef enum
{
	kRoleTypeNone = 0,
	kRoleTypeBoss,//<曹操
	kRoleTypeArmyGeneralHorizontal,//<横向的将军
	kRoleTypeArmyGeneralVertical,//<竖直的将军
	kRoleTypeSoldier,//<士兵
}RoleType;
class Role : public Ref
{
public:
	static  cocos2d::Vector<Role*> s_roleVec ;
	static const char * XML_FILE_NAME ;
	static bool initStatic();
	static bool parseData(XMLElement * pElement) ;
	static void finalizeStatic();
public:
	Role();
	~Role();

	bool init(XMLElement * pElement);
	RoleType getTypeByChar(const char * pType);
private:
	CC_SYNTHESIZE_READONLY(int ,m_id,ID) ;
	CC_SYNTHESIZE_READONLY(RoleType,m_type,Type);
	CC_SYNTHESIZE_READONLY(cocos2d::__String *,m_pImageName,ImageName) ;
};

#endif

Role.cpp

#include"Role.h"

const char *Role::XML_FILE_NAME = "roles.xml" ;

Vector<Role*>Role::s_roleVec ;

boolRole::initStatic()

{

std::stringfilePath = FileUtils::getInstance()->fullPathForFilename(XML_FILE_NAME) ;

tinyxml2::XMLDocumentpDoc;

FileUtils::getInstance()->setPopupNotify(false);

ssize_tfileSize = 0 ;

std::stringdata = FileUtils::getInstance()->getStringFromFile(filePath.c_str()); 

FileUtils::getInstance()->setPopupNotify(true);

pDoc.Parse(data.c_str());

XMLElement* pEle = pDoc.RootElement() ;

returnparseData(pEle) ;

}

boolRole::parseData(XMLElement * pElement)

{

s_roleVec.clear();

XMLElement* child = pElement->FirstChildElement() ;

for(;child;child = child->NextSiblingElement())

{

if(strcmp(child->Value(),"role") == 0)

{

Role* pRol = new Role() ;

if(!pRol->init(child))

{

CC_SAFE_RELEASE_NULL(pRol);

returnfalse ;

}

s_roleVec.pushBack(pRol);

pRol->release();

}

}

returntrue ;

}

voidRole::finalizeStatic()

{

s_roleVec.clear();

}

Role::Role()

:m_id(-1)

,m_pImageName(nullptr)

,m_type(kRoleTypeNone)

{

}

Role::~Role()

{

CC_SAFE_RELEASE_NULL(m_pImageName);

}

boolRole::init(XMLElement * pElement)

{

constchar * pId = pElement->Attribute("id") ;

IF_NULL_RETURN_FALSE(pId);

m_id= atoi(pId) ;

constchar * pImageName = pElement->Attribute("image_name") ;

IF_NULL_RETURN_FALSE(pImageName);

m_pImageName= new __String(pImageName) ;

constchar* pType = pElement->Attribute("type") ;

IF_NULL_RETURN_FALSE(pType);

m_type= getTypeByChar(pType) ;

log("Role:%d",m_id);

returntrue;

}

RoleTypeRole::getTypeByChar(const char * pType)

{

if(strcmp("boss",pType) == 0)

{

returnkRoleTypeBoss ;

}

elseif (strcmp("soldier",pType) == 0)

{

returnkRoleTypeSoldier ;

}

elseif (strcmp("general_ver",pType) == 0)

{

returnkRoleTypeArmyGeneralVertical;

}

elseif (strcmp("general_hor",pType) == 0)

{

returnkRoleTypeArmyGeneralHorizontal;

}

returnkRoleTypeNone ;

}
时间: 2024-08-01 22:43:06

华容道开发02---角色类的设计与数据读取的相关文章

华容道03---关卡类的设计和数据读取

关卡类中需要有没关初始的地图数据,即每个角色的位置. 属性: ID: 所有RoleID:用到哪个Role写哪个,每个ID用','分开 对应RoleID的行列:读取的时候有一个Row数据和一个Col数据,将这两个数据合并为1个Pos数据. Level.h #ifndef _LEVEL_H_ #define _LEVEL_H_ #include "cocos2d.h" USING_NS_CC ; #include "tinyxml2/tinyxml2.h" using

Unity3D 游戏开发构架篇 ——角色类的设计与持久化

在游戏开发中,游戏角色占了很大的篇幅,可以说游戏中所有的内容都是由主角所带动.这里就介绍一下角色类的设计和持久化. 一.角色类应用场景和设计思想 游戏中的角色类型不一而足,有不同的技能,有不同的属性等等.有些一个玩家只有一个角色,有些一个玩家可以有多个角色.这里就目前项目来描述一下角色类的构造,思路都是类似的. 早期我写角色类都是直接一个Class,然后想到什么属性就往里面添加,如果游戏过程中需要对属性的修改,逻辑判断也写在这个类中,这样必然导致类的庞大和臃肿,最后你自己也忘记了自己写在什么地方

【Unity3D游戏开发】—— PlayerPrefs类实现本地持久化数据存储

在很多游戏中都会有"存储进度","读取进度"等菜单,或者当我们进入下一个场景时有些数据需要带入下一个场景.这就需要数据储存.Unity中提供了一个用于本地持久化保存于读取数据的类--PlayerPrefs. 它是以键值对的形式将数据保存在文件中. 下面来看看PlayerPrefs的简单用法.. //得到存储的数据 Grade = PlayerPrefs.GetFloat("mGrade", 0.0f).ToString(); //获取浮点型 Ag

C++类库开发之导出类设计原则

导出类设计 上一篇博客详细陈述了类库开发的各个知识点(http://blog.csdn.net/z702143700/article/details/45989993),本文将进一步陈述,对于类库开发过程中导出类的开发规范问题. C/C++开发的DLL当初是作为函数级共享库设计的,并不能真正提供一个类所必需的信息.类层上的程序复用只有Java和C#生成的类文件才能做到.所以,当我们在用C++开发类库时经常会遇到类的设计问题,设计不好,就会出现DLL地狱. DLL地狱 导出类的DLL在维护和修改时

开发婚恋交友类网站的13条军规

现在在线婚恋交友行业成了社会最大的经济来源之一.几乎零成本就能赚到钱,当然了,这个"零"比你想象的要多一点点--你需要为今后的工作搭建一个完美的网站. 你可能会想什么才是完美的网站呢?现在我就来为您详解这类网站最有价值的构成要素,还会为您精确解读开发过程中的每个阶段,所以请不要错过这篇文章的任何一个字! 如何创造一个优秀的婚恋网站 1.做一个竞争调查 在每一片商业红海竞争都极其惨烈,这早已不是秘密.在你开始做你的产品之前,你最后应该先去调查一下已经存在的站点.看一看最成功的一个,同时也

Django开发笔记之数据库的设计

后台采用Django开发,可以体会到开发的便利之处,对于一个项目来说,首先最重要的是数据库的设计,那么在Django下数据库设计主要是如下步骤: 1,需求分析,这点子不用多说,而我也深刻体会到了没有原型的时候就开始开发的困难之处,每次需求更改就会带来后台的数据和对应接口的一次变更.费时费精力 2.有了需求,那么开始数据库的设计,在Django中,并不需要直接去操作数据库,而且使用继承modesl.Model的类,在类中定义自己的模型,然后使用Python manage.py syncdb就可看到

项目设计之---------- 类的设计原则

类的设计最好遵循5大原则,1.单一指责原则,2.开放封闭原则,3.liskov替换原则,4.依赖倒置原则(抽象不应依赖于具体,相反,具体应该依赖于抽象),5.接口隔离原则(就是接口细分,一个接口内的方法应该是用户都需要的).具体参考<敏捷软件开发>第2部分(第98页) 类的设计估计要用到许多模式,注意参考各种设计模式,具体参考<设计模式>.<大话设计模式>.<敏捷软件开发>等都有说到 项目设计之---------- 类的设计原则

Vue/Egg大型项目开发(二)数据库设计

项目其他的实现都好说,不过为了梳理好思路和架构首先要搞定数据库 设计 这里推荐使用processon.com,因为是个在线的作图平台可以很方便的和他人合作. 设计出数据表后,就可以使用sequelize来生成相应的orm对象,然后sync到数据库中从而生成对应的数据表. 数据表类图 这是我项目的设计图,后期可能还会有修改. sequelize定义对应的orm对象 在model文件夹中定义对应的orm对象 比如user.js中如下,值得注意的是我们添加了一些额外字段以应对后期表中字段的添加. 代码

第11周项目1——点、圆、圆柱类的设计

<pre class="html" name="code"> /* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称 : *作 者 : 刘云 *完成日期 : 2016年5月8号 *版 本 号 : v6.0 * *问题描述 : 点.圆.圆柱类的设计 *输入描述 : 无 *程序输出 : */ /**************************************************