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

天行健 君子當自強而不息

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 閱讀(239) 評論(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>
            欧美网站大全在线观看| 欧美亚洲视频一区二区| 亚洲国产成人一区| 国产一区二区三区观看| 国产精品久久久久aaaa樱花| 国产精品成人一区二区| 欧美日韩在线亚洲一区蜜芽| 国产精品久久久久久久久久久久久久 | 久久蜜桃资源一区二区老牛| 久久夜色精品国产噜噜av| 免费欧美电影| 欧美色视频日本高清在线观看| 欧美网站大全在线观看| 国产欧美日韩综合一区在线播放| 亚洲国产精品成人综合| 夜夜嗨av一区二区三区四区| 99re热这里只有精品免费视频| 亚洲一级黄色av| 欧美在线看片a免费观看| 欧美11—12娇小xxxx| 99国产精品久久久久久久成人热| 亚洲天堂免费在线观看视频| 老司机凹凸av亚洲导航| 国产精品theporn| 亚洲国产精品综合| 亚洲欧美三级伦理| 欧美大片第1页| 亚洲在线观看免费| 欧美黄色视屏| 精品成人一区二区三区| 一本久久综合| 久久久久久网址| 日韩一区二区久久| 亚洲欧美文学| 欧美另类人妖| 国产精品香蕉在线观看| 国内精品美女av在线播放| 日韩亚洲欧美高清| 久久久亚洲成人| 一本色道88久久加勒比精品| 久久久亚洲午夜电影| 国产精品五区| 亚洲视频一区二区在线观看 | 香蕉成人啪国产精品视频综合网| 欧美黄色日本| 久久久久久久久蜜桃| 国产精品免费看片| 亚洲免费精彩视频| 亚洲国产你懂的| 亚洲一区二区三区在线播放| 欧美日韩日韩| 亚洲香蕉伊综合在人在线视看| 亚洲高清视频一区二区| 久久综合给合久久狠狠狠97色69| 国产手机视频一区二区| 欧美在线黄色| 亚洲一区二区三区视频| 国产精品激情av在线播放| 国产精品99久久久久久久久 | 日韩一区二区精品视频| 欧美日韩亚洲综合一区| 一区二区三区精品视频在线观看| 亚洲国产精品黑人久久久| 久久久水蜜桃| 亚洲欧洲日本mm| 亚洲国产成人在线视频| 欧美激情久久久久| 一本色道久久88综合日韩精品 | 亚洲欧美久久| 国产精品自在欧美一区| 久久久.com| 小黄鸭视频精品导航| 国产午夜久久| 美女视频黄免费的久久| 噜噜噜在线观看免费视频日韩| 黑人巨大精品欧美一区二区小视频| 久久婷婷久久| 欧美成人午夜激情视频| 亚洲最新合集| 午夜国产精品视频| 永久免费视频成人| 欧美激情第3页| 国产精品www| 久久久久.com| 欧美激情精品久久久久久黑人| 亚洲在线观看视频网站| 久久国产成人| 亚洲激情在线| 一区二区三区欧美激情| 国产日韩欧美精品在线| 欧美激情一区二区三区四区| 欧美精品啪啪| 欧美黄在线观看| 欧美经典一区二区| 午夜精品久久久久| 久久裸体艺术| 亚洲香蕉在线观看| 久久久国产精品一区二区三区| 日韩视频一区二区三区在线播放| 亚洲香蕉视频| 亚洲电影免费在线观看| 一本久久综合亚洲鲁鲁| 在线日韩电影| 亚洲综合色视频| 亚洲毛片在线| 欧美一区二区观看视频| 亚洲免费大片| 久久久久久9| 午夜在线精品偷拍| 模特精品裸拍一区| 久久国产精品一区二区三区| 欧美激情中文字幕在线| 久久激情视频| 国产精品免费看久久久香蕉| 亚洲国产1区| 国内精品一区二区| 亚洲一级二级在线| 日韩视频在线观看免费| 久久国产精品电影| 亚洲午夜电影在线观看| 欧美成人午夜免费视在线看片| 久久久久看片| 国产热re99久久6国产精品| 亚洲美女av电影| 亚洲人成在线观看网站高清| 久久精品一区二区三区中文字幕 | 国产视频一区三区| 一区二区三区四区五区视频| 亚洲品质自拍| 欧美96在线丨欧| 欧美国产日韩一区二区三区| 国产午夜精品久久| 午夜精品短视频| 欧美怡红院视频| 国产欧美日韩亚洲精品| 日韩视频二区| 亚洲天堂成人在线视频| 欧美日韩日日骚| 亚洲七七久久综合桃花剧情介绍| 亚洲国产欧美在线| 另类尿喷潮videofree| 老妇喷水一区二区三区| 在线播放日韩欧美| 久久天堂国产精品| 亚洲大胆在线| 99亚洲一区二区| 欧美日韩国产影院| 亚洲一区999| 欧美在线黄色| 在线成人av网站| 玖玖视频精品| 日韩一级精品视频在线观看| 9l视频自拍蝌蚪9l视频成人| 欧美日韩精品二区第二页| av成人国产| 销魂美女一区二区三区视频在线| 国产精品一区二区久久精品| 国产精品丝袜91| 欧美在线1区| 欧美在线视频不卡| 国产一区二区三区直播精品电影| 欧美中文字幕不卡| 欧美jizz19性欧美| 中日韩美女免费视频网址在线观看| 欧美日韩精品一区二区| 亚洲一二三区精品| 久久精品女人天堂| 91久久精品一区二区三区| 欧美日韩国产区一| 欧美亚洲综合另类| 欧美aⅴ一区二区三区视频| 99re热这里只有精品免费视频| 国产精品女人久久久久久| 久久人人爽人人爽| 中文久久乱码一区二区| 美女视频网站黄色亚洲| 99在线热播精品免费| 国产精品亚洲一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 一区二区久久| 女人香蕉久久**毛片精品| 日韩亚洲欧美一区| 国产一区二区三区高清| 欧美激情一区二区三区成人| 性做久久久久久久久| 亚洲精品极品| 午夜在线精品| 99精品热视频| 尤物精品在线| 国产精品自拍小视频| 欧美激情成人在线视频| 久久资源av| 欧美在线视频免费观看| 亚洲美女电影在线| 欧美ab在线视频| 免费观看一级特黄欧美大片| 午夜精品剧场| 在线综合亚洲| 亚洲精品欧美一区二区三区| **性色生活片久久毛片|