如何设计游戏中的道具功能(三)
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
所有要交易的道具可以放在交易盒子中进行交换。
#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
相关文章推荐
- 如何设计游戏中道具功能(一)
- 如何设计游戏中的道具功能(二)
- 如何设计和实现游戏的试玩功能
- 挑战OOAD:游戏中物品使用时候的不同功能,用OO的方式,该如何设计?
- 顶级游戏设计大师谈如何成为一名游戏设计师!
- 如何结合hibernate进行复杂的查询功能设计
- FRAGS中的游戏屏幕录像功能在底层是如何实现的?
- 从腾讯QQ升级游戏之“快速加入游戏”功能的实现缺陷看C/S之间如何正确分配相关协作
- 如何设计"找回用户帐号"功能 | | 酷 壳 - CoolShell
- 听刘如鸿先生《如何设计具有可扩展性功能的软件架构》感想
- 如何在VSTS中利用Folder对项目和文件进行功能分区,以体现架构设计
- 如何设计"找回用户帐号"功能 | | 酷 壳 - CoolShell
- 如何设计电子商务网站的功能
- 手机游戏该如何设计盈利模式?
- 新功能(设计)如何上线?
- 如何结合hibernate进行复杂的查询功能设计
- 如何设计一个软件的架构,使它可以提供二次开发的功能?
- 陈皓:如何设计“找回用户帐号”功能
- 浅谈社区小游戏功能设计
- 如何设计“找回用户帐号”功能