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

天行健 君子當自強而不息

創(chuàng)建游戲內(nèi)核(2)【C風格版】

 

本篇是創(chuàng)建游戲內(nèi)核(1)【C風格版】的續(xù)篇,關(guān)于該內(nèi)核的細節(jié)說明請參考創(chuàng)建游戲內(nèi)核(2)

 

接口:

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


#ifndef _CORE_MANAGER_H_
#define _CORE_MANAGER_H_

#include "core_common.h"

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

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

typedef 
struct MANAGER
{
    MANAGER_FUNC func;
    MANAGER*     next;
} *MANAGER_PTR;

typedef MANAGER_PTR& MANAGER_PTR_REF;

MANAGER_PTR create_manager();
void push_manager(MANAGER_PTR_REF top_manager, MANAGER_FUNC func, void_ptr data);
BOOL pop_manager(MANAGER_PTR_REF top_manager, void_ptr data);
void destroy_all_manager(MANAGER_PTR top_manager, void_ptr data);
BOOL process_top_manager(MANAGER_PTR top_manager, void_ptr data);
void process_all_manager(MANAGER_PTR top_manager, void_ptr data);

#endif

實現(xiàn):

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


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

#pragma warning(disable : 4996)

//------------------------------------------------------------------------
// Create manager object.
//------------------------------------------------------------------------
MANAGER_PTR create_manager()
{
    MANAGER_PTR manager = (MANAGER_PTR) malloc(
sizeof(MANAGER));
    memset(manager, 0, 
sizeof(MANAGER));

    
return manager;
}

//------------------------------------------------------------------------
// Push one manager function into manager stack.
//------------------------------------------------------------------------
void push_manager(MANAGER_PTR_REF top_manager, MANAGER_FUNC func, void_ptr data)
{
    
if(func == NULL)
        
return;    

    
// allocate a new manager and push it into stack
    MANAGER_PTR new_manager = (MANAGER_PTR) malloc(sizeof(MANAGER));

    new_manager->func = func;
    new_manager->next = top_manager;    

    top_manager = new_manager;

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

//------------------------------------------------------------------------
// Pop top manager object from manager stack.
//------------------------------------------------------------------------
BOOL pop_manager(MANAGER_PTR_REF top_manager, void_ptr data)
{
    
if(top_manager == NULL)
        
return FALSE;
    
    
// first call with shutdown purpose    
    top_manager->func(data, SHUTDOWN_PURPOSE);

    
// remove the head of stack (if any)   

    MANAGER_PTR manager_ptr = top_manager;
    top_manager = top_manager->next;

    free(manager_ptr);       

    
return TRUE;
}

//------------------------------------------------------------------------
// Pop all manager function from stack.
//------------------------------------------------------------------------
void destroy_all_manager(MANAGER_PTR top_manager, void_ptr data)
{
    
while(pop_manager(top_manager, data))
        ;
}

//-----------------------------------------------------------------------------
// process top-most manager function.
//-----------------------------------------------------------------------------
BOOL process_top_manager(MANAGER_PTR top_manager, void_ptr data)
{
    
if(top_manager == NULL)
        
return FALSE;

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

    
return TRUE;
}

//-----------------------------------------------------------------------------
// Process all manager functions in stack.
//-----------------------------------------------------------------------------
void process_all_manager(MANAGER_PTR top_manager, void_ptr data)
{
    MANAGER_PTR manager_ptr = top_manager;

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

測試代碼:

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


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

MANAGER_PTR g_manager;

void func2(void* data, long purpose)
{
    
if(purpose == INIT_PURPOSE)
    {
        MessageBox(g_hwnd, (LPCSTR)data, "message", MB_OK);
        pop_manager(g_manager, "shutdown state2");
        pop_manager(g_manager, "shutdown state1");
    }
    
else if(purpose == SHUTDOWN_PURPOSE)
    {
        MessageBox(g_hwnd, (LPCSTR)data, "message", MB_OK);
    }
}

void func1(void* data, long purpose)
{
    
if(purpose == INIT_PURPOSE)
    {
        MessageBox(g_hwnd, (LPCSTR)data, "message", MB_OK);
        push_manager(g_manager, func2, "init state2");
    }
    
else if(purpose == SHUTDOWN_PURPOSE)
    {
        MessageBox(g_hwnd, (LPCSTR)data, "message", MB_OK);
    }
}

BOOL game_init()
{
    push_manager(g_manager, func1, "init state1");

    
return TRUE;
}

BOOL game_frame()
{
    
return TRUE;
}

BOOL game_shutdown()
{
    destroy_manager(g_manager, NULL);

    
return TRUE;
}

//--------------------------------------------------------------------------------
// Main function, routine entry.
//--------------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE inst, HINSTANCE pre_inst, LPSTR cmd_line, int cmd_show)
{    
    
if(! build_window(inst, "MainClass", "MainWindow", WS_OVERLAPPEDWINDOW, 0, 0, 800, 600))
        
return FALSE;

    run_game(game_init, game_frame, game_shutdown);
    
    
return 0;
}

posted on 2007-10-25 19:49 lovedday 閱讀(240) 評論(0)  編輯 收藏 引用


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


公告

導航

統(tǒng)計

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            在线一区免费观看| 久久久久久九九九九| 久久精品国产精品| 亚洲欧美在线一区| 欧美中文在线免费| 欧美资源在线观看| 欧美a级理论片| 欧美激情精品久久久久久蜜臀 | 久久久精品日韩| 久久综合网hezyo| 欧美人与禽猛交乱配视频| 国产精品高潮久久| 极品av少妇一区二区| 亚洲精品国产精品国自产观看浪潮 | 欧美成年人视频| 午夜亚洲性色视频| 麻豆av一区二区三区久久| 亚洲国产一区二区三区高清 | 久久av资源网| 欧美夫妇交换俱乐部在线观看| 亚洲人成在线免费观看| 亚洲欧美一区二区三区极速播放| 久久精品一区中文字幕| 欧美日韩高清免费| 狠狠色丁香婷婷综合久久片| 99精品国产99久久久久久福利| 亚洲一区免费网站| 欧美成人蜜桃| 欧美一级专区| 国产精品盗摄久久久| 亚洲激情在线播放| 久久久999精品免费| 日韩午夜电影在线观看| 久久久91精品| 午夜宅男欧美| 亚洲福利在线视频| 亚洲午夜羞羞片| 欧美chengren| 先锋资源久久| 国产精品视频xxxx| 一区二区三区欧美激情| 欧美大片第1页| 欧美在线视频观看免费网站| 欧美先锋影音| 日韩亚洲综合在线| 欧美激情按摩在线| 久久久999精品视频| 国产伦精品一区二区三区高清| 在线视频亚洲欧美| 欧美激情一区二区三区高清视频| 欧美在线观看视频一区二区| 国产精品久久午夜夜伦鲁鲁| 亚洲在线一区二区| 一区二区毛片| 欧美日韩午夜剧场| 亚洲午夜伦理| 夜夜嗨av色一区二区不卡| 欧美激情片在线观看| 91久久精品美女| 亚洲国产三级网| 欧美理论在线播放| aa成人免费视频| 亚洲精品一区二区三| 欧美精品一区二区久久婷婷| 亚洲精品少妇30p| 亚洲三级视频| 欧美日韩国产欧美日美国产精品| 亚洲精品视频免费在线观看| 亚洲国产免费看| 欧美日韩日韩| 亚洲男人的天堂在线观看| 亚洲图片在线观看| 国产视频丨精品|在线观看| 久久米奇亚洲| 欧美v日韩v国产v| 洋洋av久久久久久久一区| 一本大道久久a久久精二百| 国产精品久久久久影院色老大| 欧美中文字幕不卡| 久久久噜噜噜久久中文字免| 91久久在线视频| 99视频精品在线| 国产亚洲一本大道中文在线| 免费在线亚洲| 欧美日韩成人一区| 久久精品成人一区二区三区| 麻豆成人在线播放| 亚洲欧美另类综合偷拍| 久久精品99无色码中文字幕| 亚洲精品一区在线| 亚洲欧美在线一区| 日韩视频第一页| 欧美在线高清视频| 亚洲午夜一级| 免费高清在线一区| 性久久久久久| 午夜国产不卡在线观看视频| 久久精品午夜| 亚洲天堂av综合网| 久久久久久黄| 欧美夜福利tv在线| 欧美二区在线| 久久久久久久久伊人| 欧美精品一区三区在线观看| 欧美一级理论性理论a| 欧美不卡在线| 久久亚洲精品欧美| 国产精品hd| 亚洲国产精品一区二区www| 国产乱码精品| 亚洲麻豆视频| 亚洲人成亚洲人成在线观看| 欧美一区网站| 欧美一区二区视频在线观看2020 | 91久久久久久| 欧美一级二级三级蜜桃| 亚洲午夜91| 欧美精品粉嫩高潮一区二区| 麻豆国产精品一区二区三区 | av成人免费在线| 亚洲美女视频网| 久久香蕉国产线看观看网| 欧美在线不卡视频| 国产精品久久久久久影院8一贰佰| 亚洲国产婷婷| 亚洲精品美女在线观看播放| 久久香蕉国产线看观看av| 久久中文字幕导航| 国产一区二区三区成人欧美日韩在线观看| 日韩视频在线免费| 一本大道久久精品懂色aⅴ| 男人的天堂亚洲| 欧美激情一区二区三区四区| 亚洲电影免费在线观看| 巨乳诱惑日韩免费av| 欧美成人免费播放| 亚洲片区在线| 欧美日韩不卡视频| 亚洲私人影院在线观看| 亚洲欧美一区二区精品久久久| 国产精品国产三级国产普通话三级 | 猛男gaygay欧美视频| 午夜精品福利电影| 国产乱码精品| 欧美亚洲三级| 久久久夜精品| 亚洲国产精品尤物yw在线观看| 久久先锋影音av| 亚洲激情黄色| 久久九九精品| 久久人人97超碰精品888| 嫩模写真一区二区三区三州| 欧美激情欧美狂野欧美精品| 久久综合伊人77777| 免费国产自线拍一欧美视频| 久久精视频免费在线久久完整在线看| 久久蜜臀精品av| 欧美有码在线观看视频| 亚洲一区二区三区四区视频| 欧美午夜精彩| 日韩一级二级三级| 欧美激情一二区| 久久久99精品免费观看不卡| 亚洲一区二区三区精品在线观看| 免费成人毛片| 亚洲免费av网站| 欧美一级在线视频| 黄色小说综合网站| 欧美日韩国产大片| 欧美一级艳片视频免费观看| 欧美大尺度在线观看| 亚洲天堂av在线免费| 黄色日韩精品| 国产精品扒开腿爽爽爽视频| 午夜免费电影一区在线观看| 亚洲国产精品女人久久久| 午夜一区二区三区在线观看| 亚洲国产日韩精品| 国产精品免费区二区三区观看| 久久人91精品久久久久久不卡| av成人国产| 亚洲国产精品成人一区二区| 欧美一区免费视频| 99国产精品久久久久久久成人热| 久久躁狠狠躁夜夜爽| 国产综合色在线视频区| 小处雏高清一区二区三区| 亚洲美女视频| 欧美午夜激情在线| 久久综合伊人| 久久精品中文字幕一区二区三区| 国产亚洲欧洲一区高清在线观看| 久久国产免费看| 欧美在线不卡视频| 在线观看91精品国产入口| 欧美国产精品va在线观看| 久久综合网hezyo| 日韩性生活视频| 久久精品国产99国产精品澳门 | 国产一区二区看久久|