您的位置:首页 > 其它

如何设计游戏中的道具功能(三)

2014-11-04 09:22 459 查看
对于道具的交换,我原则上是鼓励使用另一个容器去实现。

所有要交易的道具可以放在交易盒子中进行交换。

#ifndef _ITEMDEALBOX_H

#define _ITEMDEALBOX_H

#include "Bag.h"

//交易盒子

//add by freeeyes

#define MAX_DEALBOX_COUNT 10

//交易盒子内容

struct _ItemDealBox

{

CBag* m_pFromBag; //来源Bag

CBag* m_pToBag; //目的Bag

CItem* m_pItem; //道具信息

_ItemDealBox()

{

m_pFromBag = NULL;

m_pToBag = NULL;

m_pItem = NULL;

}

};

class CItemDealBox : public CContainer<_ItemDealBox>

{

public:

CItemDealBox(uint16 u2Count = MAX_DEALBOX_COUNT);

virtual ~CItemDealBox();

/*

* @Description: 添加进入交易盒子

*/

bool AddDealBox(CBag* pFromBag, CBag* pToBag, CItem* pItem);

/*

* @Description: 交换盒子

*/

bool ExangeItem();

/*

* @Description: 回滚操作

*/

void RollBack();

/*

* @Description: 序列化写入,此类暂不实现

*/

bool ReadFromBuffer(const char* pFileName);

/*

* @Description: 从容器序列化入数据流,需要从子类去实现,此类暂不实现

*/

bool WriteToBuffer(const char* pFileName);

};

#endif

复制代码

双方通过AddDealBox这个函数,将要交易的数据放入盒子。

然后调用ExangeItem函数进行交换,或者调用RollBack函数回滚交易。

关于邮件,很多时候我们需要对邮件总量进行控制。

于是,我把邮件设置成了一个环

#ifndef _MAIL_H

#define _MAIL_H

//邮件具体结构

//add by freeeyes

#include <time.h>

#include "Object.h"

#define MAX_USERMIAL_NAME 50

#define MAX_USERMIAL_CONTANT 1000

class CUserMail : public CBaseObject

{

public:

CUserMail();

~CUserMail();

/*

* @Description: 初始化一个邮件

*/

void Init();

/*

* @Description: 设置一个邮件内容

*/

void SetMailInfo(const char* pFromName, const char* pToName, const char* pContant);

/*

* @Description: 得到来源名

*/

char* const GetFromName();

/*

* @Description: 得到目标名

*/

char* const GetToName();

/*

* @Description: 得到内容

*/

char* const GetContant();

/*

* @Description: 得到时间

*/

uint32 GetDate();

//邮件存取相关方法

public:

/*

* @Description: 从数据流还原Item对象

*/

bool ReadFromBuffer(char* pBuffer, int& nSize);

/*

* @Description: 序列化入数据流

*/

bool WriteToBuffer(char* pBuffer, int& nSize);

private:

char m_szFromUserName[MAX_USERMIAL_NAME];

char m_szToUserName[MAX_USERMIAL_NAME];

char m_szMailContant[MAX_USERMIAL_CONTANT];

uint32 m_u4Date;

};

#endif

复制代码

邮件继承自CBaseObject,并提供相关方法。顺便,把邮件列表做成一个环,用数据去管理提高效率。

#ifndef _MAILLIST_H

#define _MAILLIST_H

//邮件列表

//add by freeeyes

#include "Mail.h"

#define MAX_MIALLIST_COUNT 10

#define MAILLIST_FILE_NAME "maillist.pmf"

class CMailList

{

public:

CMailList(uint16 u2MailtCount = MAX_MIALLIST_COUNT);

~CMailList();

/*

* @Description: 添加一个邮件内容

*/

void AddMailInfo(const char* pFromName, const char* pToName, const char* pContant);

/*

* @Description: 回收邮件列表

*/

void Close();

/*

* @Description: 从数据流还原容器对象,需要从子类去实现

*/

bool ReadFromBuffer(const char* pFileName);

/*

* @Description: 从数据流还原容器对象,需要从子类去实现

*/

bool WriteToBuffer(const char* pFileName);

/*

* @Description: 得到当前邮件个数

*/

uint16 GetMailCount();

/*

* @Description: 得到当前最大个数

*/

uint16 GetMaxCount();

/*

* @Description: 得到倒序的邮件列表

*/

CUserMail* GetMailBySort(uint16 u2Index);

/*

* @Description: 得到当前的列表数据

*/

CUserMail* GetMail(uint16 u2Index);

private:

/*

* @Description: 根据相对位置换算成数组绝对下标

*/

uint16 GetListPos(uint16 u2Index);

private:

CUserMail* m_pMailList;

uint16 m_u2MaxCount;

uint16 m_u2CurrIndex;

uint16 m_u2CurrCount;

bool m_blTurnover;

};

#endif

复制代码

好了,整个代码差不多就是这样啦。

你可以下载本用例的全部代码。
http://www.acejoy.com/ace/thread-5797-1-2.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: