亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? g11-01.cpp

?? 游戲開發數據結構-Data.Structures.for.Game.Programmers
?? CPP
字號:
// ============================================================================
// G11-01.cpp
// Plotline demo
// ============================================================================
#include "SDL.h"
#include "SDLHelpers.h"
#include "Tree.h"
#include <stdlib.h>

// ============================================================================
//  Global Constants
// ============================================================================
const char PROGRAM_NAME[]   = "Game Demo 11-01: Plotline Demo";
const int WIDTH             = 640;
const int HEIGHT            = 480;


// ============================================================================
//  Classes
// ============================================================================
class Player
{
public:
    float x;
    float y;
};

// game can be in three states: Playing, selecting a new level, or won the game.
enum GameState
{
    PLAYING,
    SELECTING,
    WIN
};


// ============================================================================
//  Global Variables
// ============================================================================

// this is the main window for the framework
SDL_Surface* g_window = 0;

Player g_player;

SDL_Surface* g_hero;
SDL_Surface* g_text;
SDL_Surface* g_win;
SDL_Surface* g_tiles[9];

GameState g_state = PLAYING;

Tree<int>* g_tree;
TreeIterator<int> g_itr;

int g_dx = 0;
int g_dy = 0;
int g_timer;

// ============================================================================
//  Functions
// ============================================================================

// this draws the map
void DrawMap()
{
    int x;
    int y;
    
    // go through every x,y
    for( y = 0; y < 8; y++ )
    {
        for( x = 0; x < 10; x++ )
        {
            // blit the tile at the current level.
            SDLBlit( g_tiles[g_itr.Item()], g_window, x * 64, y * 64 );
        }
    }
}

// draw the level select screen
void DrawOptions()
{
    // blit the "select next level" text
    SDLBlit( g_text, g_window, 0, 0 );

    int x = 128;

    // loop through every level option available at the current level
    for( g_itr.ChildStart(); g_itr.ChildValid(); g_itr.ChildForth() )
    {
        // draw the tile of that level
        SDLLine( g_window, x-1, 127, x+64, 127, WHITE );
        SDLLine( g_window, x-1, 192, x+64, 192, WHITE );
        SDLLine( g_window, x-1, 127, x-1, 192, WHITE );
        SDLLine( g_window, x+64, 127, x+64, 192, WHITE );
        SDLBlit( g_tiles[g_itr.ChildItem()], g_window, x, 128 );
        x += 128;
    }
}


int main( int argc, char* argv[] )
{
    // declare coordinates.
    int x, y;
    int dt;

    // declare event holder
    SDL_Event event;

    // the iterator that keeps track of the current level
    TreeIterator<int> itr;

    // a temporary node structure, for creating new nodes
    Tree<int>* node;

    // start the player off at 0,0
    g_player.x = 0.0f;
    g_player.y = 0.0f;


    // create the root node
    g_tree = new Tree<int>;
    g_tree->m_data = 0;
    g_itr = g_tree;

    // create the iterator.
    itr = g_tree;

    // add the '2a' branch
    node = new Tree<int>;
    node->m_data = 1;
    itr.AppendChild( node );

    // add the '2b' branch
    node = new Tree<int>;
    node->m_data = 2;
    itr.AppendChild( node );

    // add the '2d' branch
    node = new Tree<int>;
    node->m_data = 3;
    itr.AppendChild( node );
    
    // add the '3a' branch
    itr.ChildStart();
    itr.Down();
    node = new Tree<int>;
    node->m_data = 4;
    itr.AppendChild( node );

    // add the '3b' branch
    itr.Up();
    itr.ChildStart();
    itr.ChildForth();
    itr.Down();
    node = new Tree<int>;
    node->m_data = 5;
    itr.AppendChild( node );

    // add the '3c' branch
    node = new Tree<int>;
    node->m_data = 6;
    itr.AppendChild( node );

    // add the '3d' branch
    itr.Up();
    itr.ChildStart();
    itr.ChildForth();
    itr.ChildForth();
    itr.Down();
    node = new Tree<int>;
    node->m_data = 7;
    itr.AppendChild( node );

    // add the '3e' branch
    node = new Tree<int>;
    node->m_data = 8;
    itr.AppendChild( node );



    // initialize the video system.
    SDL_Init( SDL_INIT_VIDEO | SDL_INIT_TIMER );
    SDL_WM_SetCaption( PROGRAM_NAME, 0); 

    // set our at exit function
    atexit( SDL_Quit );

    // set the video mode.
    g_window = SDL_SetVideoMode( WIDTH, HEIGHT, 0, SDL_ANYFORMAT );


    // load the hero
    g_hero = SDL_LoadBMP( "hero1.bmp" );
    SDL_SetColorKey( g_hero, SDL_SRCCOLORKEY, 
                     SDL_MapRGB( g_hero->format, 255, 0, 255 ) );

    // load the text
    g_text = SDL_LoadBMP( "text.bmp" );
    g_win = SDL_LoadBMP( "win.bmp" );

    // load the tiles
    g_tiles[0] = SDL_LoadBMP( "smallcrust.bmp" );
    g_tiles[1] = SDL_LoadBMP( "smallfire.bmp" );
    g_tiles[2] = SDL_LoadBMP( "smallice.bmp" );
    g_tiles[3] = SDL_LoadBMP( "smallmarble.bmp" );
    g_tiles[4] = SDL_LoadBMP( "smallmetal.bmp" );
    g_tiles[5] = SDL_LoadBMP( "smallorangesky.bmp" );
    g_tiles[6] = SDL_LoadBMP( "smallstone.bmp" );
    g_tiles[7] = SDL_LoadBMP( "smallwater.bmp" );
    g_tiles[8] = SDL_LoadBMP( "smallwood.bmp" );



    // set the timer
    g_timer = SDL_GetTicks();


    while( 1 )
    {
        //look for an event
        if( SDL_PollEvent( &event ) )
        {
            //an event was found
            if( event.type == SDL_QUIT ) 
                break;
            if( event.type == SDL_MOUSEBUTTONDOWN ) 
            {
                // get the mouse state.
                SDL_GetMouseState( &x, &y );
                if( y >= 128 && y <= 192 && g_state == SELECTING )
                {
                    x = (x - 128) / 128;
                    if( x < g_itr.m_node->m_children.Size() )
                    {
                        g_itr.ChildStart();
                        while( x > 0 )
                        {
                            g_itr.ChildForth();
                            x--;
                        }
                        g_itr.Down();
                        g_state = PLAYING;
                    }
                }
            }
            if( event.type == SDL_MOUSEBUTTONUP ) 
            {
                // get the mouse state.
                SDL_GetMouseState( &x, &y );
            }
            if( event.type == SDL_KEYUP )
            {
                if( event.key.keysym.sym == SDLK_LEFT )
                {
                    g_dx += 1;
                }
                if( event.key.keysym.sym == SDLK_RIGHT )
                {
                    g_dx -= 1;
                }
                if( event.key.keysym.sym == SDLK_UP )
                {
                    g_dy += 1;
                }
                if( event.key.keysym.sym == SDLK_DOWN )
                {
                    g_dy -= 1;
                }
            }
            if( event.type == SDL_KEYDOWN )
            {
                // a key was pressed.
                if( event.key.keysym.sym == SDLK_ESCAPE )
                {
                    // if ESC was pressed, quit the program.
                    SDL_Event quit;
                    quit.type = SDL_QUIT;
                    SDL_PushEvent( &quit );
                }
                if( event.key.keysym.sym == SDLK_LEFT )
                {
                    g_dx -= 1;
                }
                if( event.key.keysym.sym == SDLK_RIGHT )
                {
                    g_dx += 1;
                }
                if( event.key.keysym.sym == SDLK_UP )
                {
                    g_dy -= 1;
                }
                if( event.key.keysym.sym == SDLK_DOWN )
                {
                    g_dy += 1;
                }

            }

        }   // end event loop.



        if( g_state == PLAYING )
        {
            // calculate how much time has passed since the last timer update
            dt = SDL_GetTicks() - g_timer;
            g_timer = SDL_GetTicks();

            // move the player over by 128 pixels per second.
            g_player.x += ((float)(dt * 128) / 1000.0f) * g_dx;
            g_player.y += ((float)(dt * 128) / 1000.0f) * g_dy;

            // make sure the player doesn't go off the top, left, or
            // bottom sides of the screen.
            if( g_player.x < 0.0f )
                g_player.x = 0.0f;
            if( g_player.y < 0.0f )
                g_player.y = 0.0f;
            if( g_player.y > 416.0f )
                g_player.y = 416.0f;



            DrawMap();
            SDLBlit( g_hero, g_window, g_player.x, g_player.y );

            // if the player went past 640, he wins the level!
            if( g_player.x > 640.0f )
            {
                // reset the coordinates of the player
                g_player.x = 0.0f;
                g_player.y = 0.0f;

                // if the current level iterator has no children,
                // then that means the player won the game
                if( g_itr.m_node->m_children.Size() == 0 )
                {
                    g_state = WIN;
                }
                else
                {
                    // if not, then select the next level.
                    g_state = SELECTING;
                }
            }
        }
        else if( g_state == SELECTING )
        {
            // draw the option screen
            SDL_FillRect( g_window, NULL, SDL_MapRGB( g_window->format, 0, 0, 0 ) );
            DrawOptions(); 
        }
        else
        {
            // draw the "You win!" screen
            SDL_FillRect( g_window, NULL, SDL_MapRGB( g_window->format, 0, 0, 0 ) );
            SDLBlit( g_win, g_window, 0, 0 );
        }


        // update the entire window.
        SDL_UpdateRect( g_window, 0, 0, 0, 0 );
    }
  
    // done
    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品成人一区二区三区四区| 亚洲一卡二卡三卡四卡| 久国产精品韩国三级视频| 91精品国产色综合久久不卡电影 | 91丨九色丨国产丨porny| 中文字幕一区二区三| 色先锋资源久久综合| 亚洲图片一区二区| 欧美一区国产二区| 91精品国产综合久久久蜜臀图片| 婷婷久久综合九色综合伊人色| 91.xcao| 精品制服美女久久| 国产精品三级视频| 欧美专区日韩专区| 久久99久久99小草精品免视看| 久久久91精品国产一区二区精品| eeuss国产一区二区三区| 亚洲一区二区三区影院| 日韩欧美专区在线| av在线播放不卡| 性感美女久久精品| 精品国产凹凸成av人导航| 床上的激情91.| 一区二区三区四区激情 | 欧美一卡2卡3卡4卡| 国产精品一区在线观看乱码 | 91丨九色丨国产丨porny| 亚洲国产欧美在线| 久久久久久久久久久久久女国产乱| 成人免费毛片片v| 午夜久久久久久久久| 国产视频一区不卡| 欧美日韩美女一区二区| 国产精品一区三区| 亚洲va在线va天堂| 国产精品区一区二区三| 777欧美精品| 97精品电影院| 国产一区日韩二区欧美三区| 亚洲免费av在线| 久久九九久精品国产免费直播| 日本乱人伦aⅴ精品| 久草热8精品视频在线观看| 亚洲视频免费看| 久久久久久久久久久久久久久99 | 免费成人av在线播放| 国产精品成人免费| 精品国产自在久精品国产| 欧美视频在线观看一区| 福利91精品一区二区三区| 麻豆高清免费国产一区| 亚洲一区二区三区免费视频| 久久久国产精品不卡| 欧美一级生活片| 欧美三级三级三级爽爽爽| 99久久精品久久久久久清纯| 国产乱码精品一区二区三区忘忧草| 午夜精品免费在线观看| 亚洲视频免费在线| 国产精品久久久一本精品| 久久久国产精品麻豆| 久久亚洲二区三区| 欧美成人性福生活免费看| 3d动漫精品啪啪一区二区竹菊| 一本色道亚洲精品aⅴ| 不卡电影一区二区三区| 国产成人免费视频网站高清观看视频 | 国产欧美日韩在线观看| 日韩欧美久久久| 日韩精品一区二区三区老鸭窝| 欧美巨大另类极品videosbest| 在线看日本不卡| 色欧美88888久久久久久影院| 成人a级免费电影| 成人激情图片网| 福利视频网站一区二区三区| 成人久久视频在线观看| 成人黄色在线看| 99re热视频这里只精品| 91国产精品成人| 欧美色综合网站| 911国产精品| 欧美大片一区二区三区| 久久影院午夜片一区| 欧美成人高清电影在线| 久久精品视频免费观看| 国产精品无遮挡| 亚洲美女少妇撒尿| 亚洲国产综合色| 日本中文一区二区三区| 精品一区二区在线观看| 国产成人综合自拍| 不卡的av电影| 欧美午夜电影网| 91麻豆精品国产91| 精品伦理精品一区| 国产女主播视频一区二区| 国产精品国产三级国产a| 一区二区理论电影在线观看| 午夜精品一区在线观看| 狠狠狠色丁香婷婷综合久久五月| 国产大片一区二区| 色久综合一二码| 6080午夜不卡| 日本一区二区三区免费乱视频| 中文字幕在线不卡视频| 亚洲丰满少妇videoshd| 久久99久久精品| 91美女片黄在线| 日韩情涩欧美日韩视频| 亚洲欧洲美洲综合色网| 爽爽淫人综合网网站| 国产毛片精品视频| 一本一本久久a久久精品综合麻豆| 欧美日韩大陆在线| 日本一区二区免费在线| 亚洲一区在线免费观看| 国产一区二区三区四 | 欧美三级视频在线播放| 26uuu成人网一区二区三区| 亚洲免费观看高清完整版在线| 午夜视频一区二区三区| 粉嫩aⅴ一区二区三区四区| 在线免费观看不卡av| 精品国产1区2区3区| 一区二区高清在线| 国产精品99久久久久久久vr | 欧美日本一区二区在线观看| 久久天堂av综合合色蜜桃网| 亚洲一区av在线| 高清国产一区二区| 在线不卡中文字幕| 国产精品初高中害羞小美女文| 蜜桃视频一区二区三区| 日本二三区不卡| 久久精品男人天堂av| 日韩制服丝袜av| 一本久久a久久精品亚洲| 久久久精品tv| 蜜臀久久99精品久久久久久9| 91久久精品一区二区二区| 国产偷国产偷亚洲高清人白洁| 午夜久久福利影院| 91日韩一区二区三区| 欧美激情一区不卡| 韩国毛片一区二区三区| 欧美一级二级三级乱码| 亚洲福中文字幕伊人影院| 色综合久久88色综合天天| 国产欧美精品一区| 国产在线不卡视频| 日韩欧美一卡二卡| 天天av天天翘天天综合网 | 亚洲综合999| av电影天堂一区二区在线观看| 久久久久久久久久久99999| 日本人妖一区二区| 欧美麻豆精品久久久久久| 尤物在线观看一区| 色婷婷综合五月| 亚洲色图清纯唯美| 色综合久久综合网欧美综合网| 国产精品久久毛片av大全日韩| 高清在线观看日韩| 久久久91精品国产一区二区三区| 韩国一区二区三区| 亚洲精品一区二区三区四区高清| 久久精品国产亚洲5555| 日韩午夜激情免费电影| 蜜桃视频第一区免费观看| 日韩一区二区在线观看| 麻豆精品久久精品色综合| 欧美一二三四区在线| 久久国产人妖系列| 精品国产乱码久久久久久久久| 久久丁香综合五月国产三级网站 | 日本精品视频一区二区| 18欧美亚洲精品| 欧亚一区二区三区| 一区二区三区欧美日| 欧美日韩色一区| 蜜桃久久久久久久| 欧美精品一区二区三区在线播放| 国产精一品亚洲二区在线视频| 国产女同互慰高潮91漫画| 99久久精品费精品国产一区二区| 中文字幕中文字幕一区二区| 在线免费观看视频一区| 免费成人在线影院| 国产视频一区二区在线| heyzo一本久久综合| 亚洲国产日韩一级| 精品女同一区二区| 国产69精品久久久久毛片| 亚洲欧美另类综合偷拍| 欧美日韩高清在线播放| 国产精品一区二区久久精品爱涩 | 一区二区三区久久| 日韩限制级电影在线观看|