青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

創(chuàng)建游戲內(nèi)核(2)【OO改良版】

 

本篇是創(chuàng)建游戲內(nèi)核(1)【OO改良版】的續(xù)篇,關于該內(nèi)核的細節(jié)說明請參閱創(chuàng)建游戲內(nèi)核(2)。


接口:

/*************************************************************************
PURPOSE:
    Interface for manager stack.
*************************************************************************/


#ifndef _CORE_MANAGER_H_
#define _CORE_MANAGER_H_

enum PURPOSE
{
    NO_PURPOSE = 0,
    INIT_PURPOSE,
    SHUTDOWN_PURPOSE,
    FRAME_PURPOSE
};

typedef 
void (*MANAGER_FUNC)(void* data, long purpose);

typedef 
struct S_MANAGER
{
    MANAGER_FUNC    func;
    S_MANAGER*      next;
} *S_MANAGER_PTR; 

class MANAGER
{
public:
    MANAGER();
    ~MANAGER();

    
void push(MANAGER_FUNC func, void* data);
    BOOL pop(
void* data);
    
void pop_all(void* data);
    BOOL process_top(
void* data);
    
void process_all(void* data);

private:
    S_MANAGER_PTR m_root;
};

typedef MANAGER* MANAGER_PTR;


#endif
 

實現(xiàn):

/*************************************************************************
PURPOSE:
    Implements for manager stack.
*************************************************************************/


#include "core_common.h"
#include "core_manager.h"

//-----------------------------------------------------------------------------
// Constructor, initialize member data.
//-----------------------------------------------------------------------------
MANAGER::MANAGER()
{
    m_root = NULL;
}

//-----------------------------------------------------------------------------
// Destructor, pop off all functions.
//-----------------------------------------------------------------------------
MANAGER::~MANAGER()
{
    pop_all(NULL);
}

//-----------------------------------------------------------------------------
// push a function on to the stack.
//-----------------------------------------------------------------------------
void MANAGER::push(MANAGER_FUNC func, void* data)
{
    
// do not push NULL value
    if(func == NULL)
        
return;

    
// allocate a new state and push in into stack
    S_MANAGER_PTR _manager = new S_MANAGER();

    _manager->func = func;
    _manager->next = m_root;

    m_root = _manager;

    
// call manager function with init purpose
    func(data, INIT_PURPOSE);
}

//-----------------------------------------------------------------------------
// pop a function off the stack.
//-----------------------------------------------------------------------------
BOOL MANAGER::pop(void* data)
{
    S_MANAGER_PTR _manager;

    
// remove the head of stack if any
    if((_manager = m_root) != NULL)
    {
        
// first call with shutdown purpose
        _manager->func(data, SHUTDOWN_PURPOSE);

        m_root = m_root->next;
        _manager->next = NULL;

        delete _manager;
    }

    
// return TRUE if more manager exist, FALSE otherwise.
    return (m_root != NULL);
}

//-----------------------------------------------------------------------------
// pop all managers off the stack.
//-----------------------------------------------------------------------------
void MANAGER::pop_all(void* data)
{
    
while(pop(data))
        ;
}

//-----------------------------------------------------------------------------
// process top-most manager.
//-----------------------------------------------------------------------------
BOOL MANAGER::process_top(void* data)
{
    
// return an error if no more managers
    if(m_root == NULL)
        
return FALSE;

    
// process the top-most manager
    m_root->func(data, FRAME_PURPOSE);

    
return TRUE;
}

//-----------------------------------------------------------------------------
// process all managers.
//-----------------------------------------------------------------------------
void MANAGER::process_all(void* data)
{
    S_MANAGER_PTR _manager = m_root;

    
while(_manager)
    {
        _manager->func(data, FRAME_PURPOSE);
        _manager = _manager->next;
    }
}

測試代碼:

/*****************************************************************************
PURPOSE:
    Test for class FRAMEWORK.
*****************************************************************************/


#include "core_common.h"
#include "core_framework.h"
#include "core_manager.h"

class APP : public FRAMEWORK
{
public:
    
static void func2(void* data, long purpose)
    {
        APP* app_inst = (APP*) data;

        
if(purpose == INIT_PURPOSE)
        {
            MessageBox(g_hwnd, "init state2", "message", MB_OK);

            app_inst->m_manager.process_top(app_inst);

            app_inst->m_manager.pop(app_inst);
            app_inst->m_manager.pop(app_inst);
        }
        
else if(purpose == FRAME_PURPOSE)
        {
            MessageBox(g_hwnd, "frame state2", "message", MB_OK);
        }
        
else if(purpose == SHUTDOWN_PURPOSE)
        {
            MessageBox(g_hwnd, "shutdown state2", "message", MB_OK);
        }
    }

    
static void func1(void* data, long purpose)
    {
        APP* app_inst = (APP*) data;

        
if(purpose == INIT_PURPOSE)
        {
            MessageBox(g_hwnd, "init state1", "message", MB_OK);
            
            app_inst->m_manager.process_top(app_inst);

            app_inst->m_manager.push(func2, app_inst);
        }
        
else if(purpose == FRAME_PURPOSE)
        {
            MessageBox(g_hwnd, "frame state1", "message", MB_OK);
        }
        
else if(purpose == SHUTDOWN_PURPOSE)
        {
            MessageBox(g_hwnd, "shutdown state1", "message", MB_OK);
        }
    }    

    BOOL init()
    {
        m_manager.push(func1, 
this);

        
return TRUE;
    }
    
private:
    MANAGER m_manager;
};

//--------------------------------------------------------------------------------
// Main function, routine entry.
//--------------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE inst, HINSTANCE pre_inst, LPSTR cmd_line, int cmd_show)
{
    APP app;

    
if(! build_window(inst, "MainClass", "MainWindow", WS_OVERLAPPEDWINDOW, 0, 0, 640, 480))
        
return -1;
    
    app.run();

    
return 0;
}

posted on 2007-10-06 14:20 lovedday 閱讀(302) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統(tǒng)計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩天天综合| 欧美性做爰猛烈叫床潮| 欧美freesex8一10精品| 亚洲电影视频在线| 欧美精品v国产精品v日韩精品| av成人免费在线| 欧美影院成人| 亚洲精品一二区| 国产精品女人网站| 老色鬼精品视频在线观看播放| 亚洲精品久久久久中文字幕欢迎你| 一区二区三区不卡视频在线观看| 国产精品视频一| 欧美成人激情视频| 亚洲欧美日韩中文视频| 亚洲高清视频在线观看| 亚洲综合999| 在线免费观看成人网| 欧美日本久久| 久久久久成人精品| 一本综合久久| 欧美电影美腿模特1979在线看| 亚洲视频在线免费观看| 黄色成人在线免费| 国产精品久久999| 六月婷婷一区| 欧美在线免费观看亚洲| 欧美激情aaaa| 久久久一区二区| 在线视频一区二区| 亚洲成人自拍视频| 国产精品一级二级三级| 欧美国产成人在线| 久久精品免费观看| 亚洲午夜精品| 亚洲二区精品| 麻豆精品在线观看| 午夜在线观看欧美| 一区二区三区日韩在线观看| 韩日精品视频| 国产欧美日韩在线| 欧美日韩一区二区国产| 免费高清在线视频一区·| 午夜亚洲影视| 亚洲午夜日本在线观看| 亚洲精品久久久久中文字幕欢迎你| 久久人人爽爽爽人久久久| 亚洲欧美国产77777| 亚洲精品女人| 亚洲黄色av| 尤物精品在线| 黑人巨大精品欧美一区二区小视频| 欧美先锋影音| 欧美日韩国产黄| 欧美刺激性大交免费视频| 久久精品国语| 欧美在线视频一区二区| 午夜精品一区二区三区电影天堂 | 在线一区观看| 91久久嫩草影院一区二区| 亚洲大片免费看| 欧美第一黄网免费网站| 欧美mv日韩mv亚洲| 欧美成人午夜激情视频| 欧美国产日韩在线观看| 欧美国产专区| 亚洲国产va精品久久久不卡综合| 欧美大胆a视频| 欧美大片一区二区| 亚洲电影免费在线观看| 亚洲国产一区二区三区a毛片| 欧美激情免费观看| 亚洲国产精品欧美一二99| 最新日韩中文字幕| 亚洲精品一区二区三区四区高清 | 久久综合色播五月| 农村妇女精品| 欧美精品少妇一区二区三区| 欧美日韩国产欧| 国产精品国产三级国产普通话蜜臀 | 老司机午夜精品视频| 久久综合色婷婷| 欧美电影免费观看高清| 亚洲国产一区二区精品专区| 亚洲精品在线电影| 亚洲手机成人高清视频| 亚洲欧美日韩国产| 久久久精彩视频| 欧美xx69| 国产精品美女黄网| 国产一区二区黄色| 亚洲日韩第九十九页| 夜夜精品视频| 久久精品视频免费播放| 免费观看一区| 亚洲黄色有码视频| 一区二区日本视频| 亚洲欧美在线免费| 免费人成精品欧美精品| 欧美精品在线一区二区三区| 国产精品婷婷| 亚洲电影免费观看高清完整版在线观看 | 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 欧美资源在线| 欧美日本免费| 国产午夜精品久久久| 亚洲激情视频| 午夜精彩国产免费不卡不顿大片| 久久精品国产亚洲高清剧情介绍| 欧美国产一区二区| 亚洲色图自拍| 免费人成网站在线观看欧美高清| 欧美婷婷六月丁香综合色| 国色天香一区二区| 亚洲午夜免费视频| 麻豆精品视频在线| 在线综合欧美| 久久在精品线影院精品国产| 欧美性猛交xxxx免费看久久久| 伊人春色精品| 亚洲欧美激情精品一区二区| 免费日韩视频| 亚洲欧美中文另类| 欧美精品亚洲精品| 亚洲电影av| 久久久五月天| 亚洲综合激情| 欧美日韩高清在线| 亚洲第一毛片| 久久精品亚洲精品国产欧美kt∨| 亚洲精品久久视频| 久久乐国产精品| 国产欧美日本| 亚洲影视在线播放| 亚洲精品一区中文| 欧美激情1区2区3区| 在线观看国产成人av片| 久久精彩视频| 亚洲午夜羞羞片| 欧美日韩精品一区二区三区| 亚洲娇小video精品| 久久一区二区三区国产精品| 欧美一区二区黄| 国产日本欧美一区二区三区在线| 亚洲免费视频中文字幕| 亚洲伦伦在线| 欧美日韩美女在线| 99视频一区| 亚洲精品一区二区三区四区高清 | 亚洲国产天堂久久综合| 久久亚洲精品一区二区| 欧美在线啊v一区| 国产日产高清欧美一区二区三区| 午夜综合激情| 亚洲综合二区| 国产日韩在线一区二区三区| 亚洲欧美在线网| 亚洲一区二区久久| 国产精品美女久久久久久免费 | 亚洲人成网站在线观看播放| 老司机免费视频一区二区三区| 久久久久久亚洲精品杨幂换脸| 国内精品久久久久影院色| 久久久久久久综合狠狠综合| 欧美在线看片| 在线不卡中文字幕| 亚洲国产成人精品视频| 欧美黑人多人双交| 一区二区三区国产精华| 一区二区三区日韩欧美| 欧美午夜一区二区| 小黄鸭视频精品导航| 性色一区二区三区| 激情综合自拍| 亚洲国产网站| 国产精品久久久久av| 久久精品视频在线观看| 久久另类ts人妖一区二区| 亚洲日韩中文字幕在线播放| 日韩视频第一页| 国产精品午夜视频| 免费在线一区二区| 欧美日本久久| 久久成人精品电影| 老司机成人网| 一本色道久久综合亚洲精品不| 亚洲视频axxx| 影音先锋中文字幕一区| 亚洲欧洲精品一区二区精品久久久| 欧美日韩视频在线第一区| 欧美一区二区在线看| 久久噜噜噜精品国产亚洲综合| 一区二区电影免费观看| 午夜精品久久久久久久99黑人| 影音先锋另类| 亚洲性图久久| 亚洲韩日在线| 欧美一级播放| 99在线精品观看| 欧美中文字幕在线|