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

天行健 君子當自強而不息

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>
            亚洲视频你懂的| 午夜精品久久久久| 9国产精品视频| 欧美伊人久久| 欧美精品尤物在线| 国产在线欧美| 亚洲私人影院| 中文精品99久久国产香蕉| 久久久噜噜噜久久狠狠50岁| 欧美亚洲成人网| 亚洲精品国产拍免费91在线| 久久久精品tv| 99热这里只有精品8| 国产精品久久久久婷婷| 亚洲全部视频| 欧美**人妖| 久久精品1区| 国产日韩一区二区三区在线播放| 一区二区三区国产在线| 亚洲国产91色在线| 久久久中精品2020中文| 亚洲图片在线| 欧美日韩在线播放三区| 日韩亚洲在线| 亚洲精品美女久久7777777| 久久久久综合| 亚洲一二三区视频在线观看| 亚洲全黄一级网站| 国产精品永久免费在线| 午夜精品一区二区三区在线视| 亚洲欧洲在线视频| 欧美精品久久99久久在免费线| 亚洲破处大片| 亚洲综合视频网| 国产主播在线一区| 亚洲精品小视频| 欧美日韩亚洲三区| 噜噜噜久久亚洲精品国产品小说| 久久精品一区二区| 亚洲电影第1页| 亚洲高清在线观看| 国产一区二区三区日韩| 欧美77777| 国产日产亚洲精品系列| 美女久久网站| 欧美另类在线观看| 免费欧美网站| 国产日韩亚洲欧美| 亚洲午夜极品| 亚洲在线观看视频网站| 亚洲一区欧美一区| 激情欧美一区二区三区在线观看| 免费观看成人www动漫视频| 国产精品国产福利国产秒拍| 久久激情视频久久| 欧美~级网站不卡| 亚洲一级片在线观看| 欧美电影在线观看完整版| 亚洲一区在线观看免费观看电影高清 | 久久激情五月激情| 欧美一区二区三区四区在线观看地址| 欧美一区激情视频在线观看| 亚洲国产精品久久久久| 在线视频精品一| 在线亚洲免费视频| 欧美精彩视频一区二区三区| 亚洲国产成人午夜在线一区| 一区免费在线| 久久一区二区三区超碰国产精品| 中文亚洲视频在线| 欧美日韩一区二区三区在线视频| 亚洲激情女人| 一区二区三区四区国产| 欧美日本韩国在线| 一区二区三区欧美成人| 最新成人av网站| 欧美韩国一区| 久久综合九色综合欧美就去吻| 欧美日韩在线一区| 免费日韩精品中文字幕视频在线| 精品91在线| 蜜臀va亚洲va欧美va天堂| 欧美一区二区三区免费看| 国产婷婷色一区二区三区| 久久狠狠亚洲综合| 亚洲高清免费在线| 亚洲桃色在线一区| 国产精品夜夜夜| 一本色道久久综合亚洲精品婷婷| 午夜精品国产| 黑人巨大精品欧美黑白配亚洲| 在线综合+亚洲+欧美中文字幕| 午夜精品久久99蜜桃的功能介绍| 国产欧美日韩麻豆91| 久久婷婷成人综合色| 亚洲精品一区在线观看| 欧美一区二区三区男人的天堂 | 欧美黄色一级视频| 日韩一区二区免费看| 亚洲人体大胆视频| 国产精品爱久久久久久久| 性欧美xxxx大乳国产app| 亚洲欧美一区二区原创| 韩国欧美一区| 欧美日韩直播| 久久久久欧美精品| 亚洲精品网站在线播放gif| 午夜精品久久久久久久99热浪潮| 影音先锋在线一区| 欧美在线视频免费观看| 亚洲娇小video精品| 欧美综合77777色婷婷| 国产欧美日韩在线| 欧美大片免费久久精品三p| 亚洲一区自拍| 日韩网站在线观看| 欧美成年人视频| 欧美亚洲在线播放| 国产亚洲精品v| 欧美精品一区二区三| 欧美中文字幕不卡| 亚洲一区二区视频| 亚洲人成网站999久久久综合| 久久久久亚洲综合| 亚洲资源av| 中文久久精品| 亚洲国产日本| 国产精品久久久久久久久婷婷| 嫩草影视亚洲| 久久久另类综合| 欧美一区二区视频网站| 亚洲视频自拍偷拍| 亚洲精品一区二区三区99| 欧美18av| 蜜臀99久久精品久久久久久软件| 久久av一区二区| 欧美影院在线| 欧美在线亚洲在线| 欧美一区二区三区四区视频| 亚洲一区精品在线| 亚洲在线第一页| 亚洲一区精品视频| 亚洲综合激情| 午夜亚洲精品| 久久国产88| 欧美在线日韩精品| 久久成人久久爱| 欧美中文字幕视频在线观看| 欧美有码视频| 久久一日本道色综合久久| 久久蜜桃av一区精品变态类天堂| 欧美影片第一页| 久久一区二区三区超碰国产精品| 欧美亚洲视频| 久久全国免费视频| 免费久久99精品国产自| 欧美激情精品久久久久久免费印度| 亚洲在线免费| 欧美一区二区三区在线观看| 久久精品国产免费看久久精品| 久久国产精品99久久久久久老狼 | 日韩图片一区| 亚洲色图制服丝袜| 亚洲欧美中文字幕| 久久久久国色av免费观看性色| 久久久久一区二区三区| 欧美+亚洲+精品+三区| 亚洲日本在线观看| 亚洲午夜精品网| 久久精品视频在线观看| 欧美国产精品日韩| 国产精品国产三级国产专播精品人 | 国产一区二区三区高清播放| 在线观看一区欧美| 一本一本a久久| 亚洲毛片一区| 亚洲日本一区二区| 亚洲免费小视频| 中文亚洲字幕| 久久久噜噜噜久噜久久| 亚洲国产高清高潮精品美女| 亚洲一区在线免费观看| 久久久一区二区| 欧美特黄一区| 亚洲国产成人高清精品| 亚洲欧美国产三级| 欧美激情中文字幕一区二区| 亚洲一区二区四区| 欧美高清hd18日本| 国产日韩欧美另类| 一本色道久久综合亚洲二区三区| 久久精品人人做人人综合 | 亚洲欧美日韩天堂| 欧美激情精品久久久久久黑人 | 久久久国产精品亚洲一区| 亚洲人成绝费网站色www| 欧美一二三区精品| 欧美日韩一区综合| 亚洲国产综合视频在线观看| 欧美在线地址|