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

天行健 君子當自強而不息

Putting Together a Full Game(8)

 

Structuring the Application

The main application is relatively small (if you can call just under 1,500 lines of
code small). It has the job of initializing all the required components and tracking
the game state (that’s right, state-based processing is even used here).

First, you declare the application class. Although the class is incomplete at this
point, throughout the rest of this chapter, the pieces fall into place, and the application
class becomes complete. Now, check out the sections of the application class
that set up the class data and initialize the game system:

#include "core_common.h"
#include "core_manager.h"
#include "core_graphics.h"
#include "core_framework.h"
#include "core_input.h"
#include "core_sound.h"
#include "text_window.h"
#include "spell_controller.h"
#include "trigger.h"
#include "barrier.h"
#include "game_chars.h"
#include "game_script.h"

#define SOUND_CHAR_ATTACK       0
#define SOUND_MONSTER_ATTACK    1
#define SOUND_FIREBALL          2
#define SOUND_ICE               3
#define SOUND_HEAL              4
#define SOUND_TELEPORT          5
#define SOUND_GROUNDBALL        6
#define SOUND_CONCUSSION        7
#define SOUND_EVIL_FORCE        8
#define SOUND_ROAR              9
#define SOUND_CHAR_HURT         10
#define SOUND_MONSTER_HURT      11
#define SOUND_CHAR_DIE          12
#define SOUND_MONSTER_DIE       13
#define SOUND_BEEP              14

#define SPELL_FIREBALL          0
#define SPELL_ICE               1
#define SPELL_HEAL              2
#define SPELL_TELEPORT          3
#define SPELL_GROUNDBALL        4
#define SPELL_CONCUSSION        5
#define SPELL_EVIL_FORCE        6

#define ID_PLAYER               0

class cApp;

class cGameSpells : public cSpellController
{
private:
    cApp* m_app;

public:
    
void attach_app(cApp* app)  { m_app = app; }

    
virtual void play_spell_sound(long index);
};

/************************************************************************************************/

class cApp : public cFramework
{
    friend 
class cGameScript;
    friend 
class cGameChars;
    friend 
class cGameSpells;

    friend 
void menu_frame(void* data,   long purpose);
    friend 
void game_frame(void* data,   long purpose);
    friend 
void status_frame(void* data, long purpose);
    friend 
void barter_frame(void* data, long purpose);

    
///////////////////////////////////////////////////////////////////////////////////////////

private:
    ID3DXFont*          m_font;
    IDirect3DTexture9*  m_scene_backdrops[6];
    IDirect3DTexture9*  m_charge_bar;

    
long                m_scene_index;

    cCamera             m_camera;

    cInput              m_input;
    cInputDevice        m_keyboard;
    cInputDevice        m_mouse;

    cSound              m_sound;
    cSoundChannel       m_sound_channel;
    cMusicChannel       m_music_channel;
    cSoundData          m_sound_data;
    
    cMesh               m_scene_mesh;
    cObject             m_scene_object;

    cGameChars          m_game_chars;
    cGameSpells         m_game_spells;    

    cTextWindow         m_text_stats;
    cTextWindow         m_text_window;
    cTextWindow         m_text_header;

    cGameScript         m_game_script;

    
long                m_teleport_map;             // map to teleport on next frame (-1 = none)
    bool                m_is_monster_last_frame;    // flag if monsters during last frame

    
long                m_combat_exp;               // combat booty to reward at end of combat
    long                m_combat_money;         

    cTrigger            m_trigger;
    cBarrier            m_barrier;

    sItem               m_mil[1024];                
// the master item list

    cManager            m_state_manager;

    
///////////////////////////////////////////////////////////////////////////////////////////

public:
    cApp()
    {
        m_font                  = NULL;
        m_charge_bar            = NULL;
        m_scene_index           = 0;        
        m_combat_exp            = 0;
        m_combat_money          = 0;
        m_teleport_map          = -1;
        m_is_monster_last_frame = 
false;
        
        ZeroMemory(m_scene_backdrops, 
sizeof(m_scene_backdrops));
        ZeroMemory(m_mil,             
sizeof(m_mil));
    }

    
virtual bool init();
    
virtual void shutdown();
    
virtual bool frame();

    
///////////////////////////////////////////////////////////////////////////////////////////

private:
    
float get_height_below(float x_pos, float y_pos, float z_pos);

    
bool  check_intersect(float x_start, float y_start, float z_start,
                          
float x_end, float y_end, float z_end,
                          
float* dist);

    
void render_frame(long elapsed);

    
void free_level();
    
bool load_level(int scene_index);

    
void play_sound(long index);
    
void play_music(long index);
    
void stop_music();

    
void win_game();
    
void start_of_combat();
    
void end_of_combat();

    
void teleport_player(long map, float x_pos, float y_pos, float z_pos);
    
void setup_barter(const char* ics_file);

    sCharacter* get_char_at(
long mouse_x_pos, long mouse_y_pos);
    
bool last_point_reached(sCharacter* character);
};

The application class begins by setting three friend class references. Those three
classes, cGameSpells, cGameChars, and cGameScript, are the derived controllers for the spells,
characters, and scripts, respectively. Each of those classes need special access to
the application class, so you can make them friends.

The next portion of the cApp class declares a list of Game Core specific
objects, all of which are private to the cApp class.

From the Graphics Core, you can see the use of the graphics, font, and camera
objects. For input, there’s the input system object, plus a device for each the keyboard
and mouse. Rounding off the lot are objects for using the sound system, a
single sound and music channel, and a sound data object for loading sounds.

A small bitmap stores the graphics used to display the player’s charge bar (the
amount of charge built up for attacking). You store this bitmap using a texture
object. Following that, you include three text window objects to display various
dialogue and screen text.

At this point in the application class declaration, you define a couple of miscellaneous
private functions.

The win_game function is called whenever a script encounters the win-game action.
This action triggers the end of game, which returns play back to the main menu.
get_char_at is the function that determines which character a user clicks with the mouse.

Completing cApp are the class constructor and the overridden init, shutdown, and
frame functions, all of which you declare with public accessibility.


posted on 2007-12-29 20:45 lovedday 閱讀(245) 評論(0)  編輯 收藏 引用


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


公告

導航

統計

常用鏈接

隨筆分類(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>
            老牛嫩草一区二区三区日本| 欧美日韩精品福利| 激情久久一区| 欧美国产日韩一二三区| 久久这里只有精品视频首页| 亚洲国产mv| 亚洲黑丝一区二区| 欧美精品日韩精品| 国产欧美一区二区精品性| 激情综合久久| 久久国产色av| 久久在线91| 亚洲国产毛片完整版| 亚洲国产精品激情在线观看| 欧美久久久久中文字幕| 亚洲深夜福利网站| 亚洲免费小视频| 精品动漫3d一区二区三区免费| 欧美成人一二三| 国产精品sm| 久久久久久91香蕉国产| 美乳少妇欧美精品| 亚洲欧洲av一区二区三区久久| 欧美一级二级三级蜜桃| 日韩天天综合| 欧美一区二区高清在线观看| 亚洲人www| 亚洲已满18点击进入久久| 依依成人综合视频| 99热免费精品| 在线观看91精品国产麻豆| 亚洲免费观看视频| 亚洲电影在线播放| 亚洲一区二区高清| 最新国产成人av网站网址麻豆| 亚洲深夜福利视频| 亚洲精品一级| 久久精品99国产精品日本| 一本色道久久综合亚洲二区三区| 欧美一区二区三区免费看| 99国产精品| 久久久久久久一区二区| 性伦欧美刺激片在线观看| 欧美大秀在线观看| 六十路精品视频| 国产精品久久久一区二区| 亚洲国产日日夜夜| 在线精品国精品国产尤物884a| 亚洲色图综合久久| 在线性视频日韩欧美| 免费观看成人www动漫视频| 久久精品亚洲国产奇米99| 欧美日韩视频一区二区| 亚洲国产精品激情在线观看| 今天的高清视频免费播放成人| 亚洲午夜久久久久久久久电影网| 亚洲欧洲日夜超级视频| 久久久噜噜噜久久久| 久久久久成人精品免费播放动漫| 国产精品国色综合久久| 日韩视频一区二区三区在线播放免费观看| 在线日韩视频| 久久久99免费视频| 久久视频在线免费观看| 国产婷婷色一区二区三区在线| 一级日韩一区在线观看| 国产精品99久久久久久久久| 欧美日韩爆操| 夜夜嗨av一区二区三区| 中国成人亚色综合网站| 欧美日韩一区视频| 国产精品99久久久久久白浆小说 | 91久久精品久久国产性色也91| 韩国欧美一区| 久久动漫亚洲| 欧美www视频在线观看| 亚洲国产精品专区久久| 欧美大片91| 99re6这里只有精品视频在线观看| 一区二区三区久久| 国产精品视频精品| 久久精品二区亚洲w码| 六月天综合网| 99精品99| 国产精品亚洲第一区在线暖暖韩国| 亚洲综合成人婷婷小说| 久久女同互慰一区二区三区| 亚洲国产黄色片| 欧美母乳在线| 亚洲欧美在线播放| 欧美成人中文字幕| 一区二区三区成人精品| 国产精品一区二区久久| 久久久综合网| 日韩一本二本av| 久久激情综合| 亚洲欧洲日夜超级视频| 欧美午夜精品久久久| 欧美中文在线免费| 亚洲欧洲另类国产综合| 欧美在线视频一区二区三区| 在线观看欧美日韩国产| 欧美三日本三级三级在线播放| 午夜在线成人av| 欧美激情一区三区| 欧美一级欧美一级在线播放| 亚洲高清视频一区| 国产精品毛片大码女人| 久久综合九色九九| 亚洲一区影院| 亚洲国产一区视频| 久久午夜视频| 亚洲一区二区三区在线| 曰韩精品一区二区| 国产精品美女一区二区| 欧美高清视频在线观看| 亚洲欧美日韩综合一区| 亚洲精品日本| 欧美fxxxxxx另类| 欧美一区二区三区免费视| 亚洲毛片在线观看| 极品av少妇一区二区| 国产精品毛片va一区二区三区| 欧美~级网站不卡| 欧美在线视频免费| 亚洲一区二区在线| 亚洲另类自拍| 亚洲国产裸拍裸体视频在线观看乱了| 久久国产精品99国产| 亚洲午夜小视频| 一本久久a久久精品亚洲| 1024成人网色www| 国产伊人精品| 国产视频久久| 国产精品夜夜夜一区二区三区尤| 欧美片在线观看| 欧美大片免费| 免费在线播放第一区高清av| 久久久久久噜噜噜久久久精品| 午夜精彩视频在线观看不卡| 亚洲特级片在线| 亚洲免费激情| 99国产精品99久久久久久粉嫩 | 亚洲女性喷水在线观看一区| 亚洲精品黄网在线观看| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精品丝袜白浆摸在线| 国产精品家庭影院| 国产精品电影网站| 国产美女精品视频| 国产无一区二区| 国产综合色产在线精品| 国产一区二区三区自拍| 韩国欧美一区| 亚洲激情av在线| 亚洲免费精彩视频| 一本一本久久a久久精品综合麻豆| 日韩午夜免费| 亚洲午夜精品久久久久久app| 亚洲网站在线播放| 亚洲欧洲av一区二区三区久久| 欧美一区二区高清| 久色成人在线| 亚洲国产成人高清精品| 亚洲国产精品热久久| 日韩视频不卡中文| 亚洲女ⅴideoshd黑人| 午夜在线a亚洲v天堂网2018| 久久久xxx| 欧美伦理a级免费电影| 国产精品国色综合久久| 国产综合在线看| 日韩一级大片在线| 香蕉成人啪国产精品视频综合网| 久久人人爽人人| 最新国产成人在线观看| 亚洲一区二三| 久久综合激情| 国产精品爱久久久久久久| 激情亚洲一区二区三区四区| 日韩午夜av在线| 欧美一区观看| 亚洲国产精品123| 亚洲一区二区在线看| 久久这里只精品最新地址| 欧美日韩综合一区| 精品91在线| 亚洲影院色在线观看免费| 久久综合色播五月| 亚洲图色在线| 免费亚洲电影在线观看| 国产精品亚洲综合一区在线观看| 亚洲电影专区| 欧美一区二区三区免费看| 亚洲第一福利视频| 性做久久久久久久久| 欧美日韩裸体免费视频| 亚洲成色777777女色窝| 久久成人精品电影| 亚洲开发第一视频在线播放|