游戏的基础结构。

本文介绍了游戏基础结构的三大核心组成部分:引擎、无限状态机和内存池。引擎负责管理游戏模块,无限状态机用于储存和更新游戏状态,而内存池则提供数据存储。通过无限状态机和内存池,游戏中的各个模块(如网络、图形)可以高效地交互和管理数据。此外,还展示了无限状态机和内存池的简单实现。
摘要由CSDN通过智能技术生成
就像修房子一样,别管你用多贵的砖头,它只是一块砖头而已,并不是你想要的房子。砖头可以在开发的时候随时换,但是结构一旦定下来,就不好修改了。

那么一个基本,却又efficient的结构究竟是什么样的呢?很简单。所有你所需要的就是引擎,无限状态机和内存池。这三个东西一点都不复杂,你可以从头开始写:
首先是你的引擎类,需要些什么呢?
class CEngine 
{
public:
    CEngine();
    ~CEngine();

    int Initialize();
    int Start();
    int Restart();
    int Pause();
    int Shutdown();

    int AddModule(CModuleBase *newModule, int moduleID, int updateFrequency);

    int RemoveModule(int moduleID);

};
这就是一个引擎需要具备的基本功能,不要管图形,也不要管网络,什么都不要管。只是负责加入一个模块,加入的模块在指定的时间内刷新。这样网络也好,图形也好,人工智能也好,都是以模块的形式在初试化的时候加入到引擎的刷新列表里面。

那么无限状态机又是什么呢,无限状态机就是一个给你储存状态的库,不过可以储存所有你想要的状态。比如你在刷新网络的时候,接收到新的玩家的坐标,那么就需要把坐标的值修改,那么坐标的值放在哪呢?无限状态机里面,在网络模块更新的时候,只需要写Set("坐标", &myCurPos);然后在图形模块更新的时候,只需要写myCurPos = Get("坐标")。那么myCurPos的值存放在什么地方呢?就是存放在内存池里面。内存池在游戏初始化的时候被创建,在游戏结束的时候销毁,提供游戏中所有数据的存放,而无限状态机则是提供字符串到数据指针的映射。

下面就来看看无限状态机的实现:
首先你需要一个内存池:
// MemoryMag.h
#ifndef __MEMORY_MAG_H__
#define __MEMORY_MAG_H__

#include <stdio.h>
#include <assert.h>

template <class T>
class CMemoryMag 
{
public:
    CMemoryMag(int size);
    ~CMemoryMag();

    T *GetNew();
    int Free(T *var);

private:

    T *m_data;
    int *m_freed;
    int m_freedSize;
    int m_maxSize;
    int m_curSize;
};

template<class T> 
CMemoryMag<T>::CMemoryMag(int size) : 
m_maxSize(size),
m_curSize(0),
m_freedSize(0)
{
    m_data = new T[size];
    assert(m_data != NULL);

    m_freed = new int[size];
    assert(m_freed != NULL);
}

template<class T>
CMemoryMag<T>::~CMemoryMag()
{
    delete [] m_data;
    delete [] m_freed;
}

template<class T>
T *CMemoryMag<T>::GetNew()
{
    if(!m_freedSize)
    {
        if(m_curSize <

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值