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

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

?? demo12_3.cpp

?? 一本外國人寫的關于3D游戲編程的書的源碼
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
    if (stations[index].state == STATION_STATE_ALIVE)
        {
        // transform to screen coords
        stations[index].x = stations[index].varsI[INDEX_WORLD_X] - (stations[index].width >> 1) - player_x + (SCREEN_WIDTH/2);
        stations[index].y = stations[index].varsI[INDEX_WORLD_Y] - (stations[index].height >> 1) - player_y + (SCREEN_HEIGHT/2);

        // draw the station
        Draw_BOB(&stations[index],lpddsback);

		// animate the station
        Animate_BOB(&stations[index]);
         
        } // end if

    } // end for index

} // end Draw_Stations

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

void Delete_Stations(void)
{
// this function simply deletes all memory and surfaces
// related to the gunships

for (int index=0; index < MAX_STATIONS; index++)
    Destroy_BOB(&stations[index]);

} // end Delete_Stations

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

void Init_Mines(void)
{
// this function loads and initializes the mines to a known state
	
int frame;  // looping va

// create the first bob
Create_BOB(&mines[0],0,0,48,36,16,
            BOB_ATTR_VISIBLE | BOB_ATTR_MULTI_FRAME,
            DDSCAPS_SYSTEMMEMORY);

// load animation frames 
for (frame = 0; frame <= 15; frame++)
	{
	// load the mine
    Pad_Name("OUTART/PREDMINE", "BMP", buffer, frame);
	Load_Bitmap_File(&bitmap8bit, buffer);		

    // load the actual .BMP
    Load_Frame_BOB(&mines[0],&bitmap8bit,frame,0,0,BITMAP_EXTRACT_MODE_ABS);  

    // unload data infile
    Unload_Bitmap_File(&bitmap8bit);

	} // end if

// set state to off
mines[0].state  = MINE_STATE_DEAD;

// set ai state to sleep mode
mines[0].varsI[INDEX_MINE_AI_STATE] = MINE_STATE_AI_SLEEP;

// set damage to 0
mines[0].varsI[INDEX_MINE_DAMAGE] = 0;

// set contact count to 0
mines[0].varsI[INDEX_MINE_CONTACT_COUNT] = 0;

// set animation rate
Set_Anim_Speed_BOB(&mines[0],3);

// make copies
for (int mine=1; mine < MAX_MINES; mine++)
    {
    memcpy(&mines[mine], &mines[0], sizeof(BOB));
    } // end for mine

} // end Init_Mines

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

void Reset_Mines(void)
{
// this functions resets all the mines

// make copies
for (int mine = 0; mine < MAX_MINES; mine++)
    {
    // set state to off
    mines[mine].state = MINE_STATE_DEAD;

    // set ai state to sleep mode
    mines[mine].varsI[INDEX_MINE_AI_STATE] = MINE_STATE_AI_SLEEP;

    // set damage to 0
    mines[mine].varsI[INDEX_MINE_DAMAGE] = 0;

    // set contact count to 0
    mines[mine].varsI[INDEX_MINE_CONTACT_COUNT] = 0;

    } // end for mine

} // end Reset_Mines

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

void Start_Mine(int override=0, int x=0, int y=0, int ai_state=MINE_STATE_AI_ACTIVATED)
{
// this functions starts a mine, note that if override = 1
// then the function uses the sent data otherwise it's random

// first find an available stations
for (int index=0; index < MAX_MINES; index++)
	{
	// is this one dead
	if (mines[index].state  == MINE_STATE_DEAD)
		{

        if (!override)
            {
	    	// position the mine
    		int xpos = RAND_RANGE((UNIVERSE_MIN_X+256),(UNIVERSE_MAX_X-256));
		    int ypos = RAND_RANGE((UNIVERSE_MIN_Y+256),(UNIVERSE_MAX_Y-256));

            // set position
		    mines[index].varsI[INDEX_WORLD_X] = xpos;
		    mines[index].varsI[INDEX_WORLD_Y] = ypos;

  	        // set velocity
		    mines[index].xv = RAND_RANGE(-8,8);
		    mines[index].yv = RAND_RANGE(-8,8);

		    // set remaining state variables
		    mines[index].state  = MINE_STATE_ALIVE;

		    // set damage to 0
            mines[index].varsI[INDEX_MINE_DAMAGE] = 0;

            // set ai state
            mines[index].varsI[INDEX_MINE_AI_STATE] = ai_state;

            // set contact count
            mines[index].varsI[INDEX_MINE_CONTACT_COUNT] = 0;
            
		    // done so exit
		    return;

            }
        else
            {
            // set position
		    mines[index].varsI[INDEX_WORLD_X] = x;
		    mines[index].varsI[INDEX_WORLD_Y] = y;

      	    // set velocity
	    	mines[index].xv = 0;
		    mines[index].yv = 0;

		    // set remaining state variables
		    mines[index].state  = MINE_STATE_ALIVE;

		    // set damage to 0
            mines[index].varsI[INDEX_MINE_DAMAGE] = 0;

            // set ai state
            mines[index].varsI[INDEX_MINE_AI_STATE] = ai_state;

            // set contact count
            mines[index].varsI[INDEX_MINE_CONTACT_COUNT] = 0;

		    // done so exit
		    return;

            } // end else


		} // end if alive
	
	} // end for index

} // end Start_Mine

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

void Move_Mines(void)
{
// this function moves/animates all the mines

for (int index=0; index < MAX_MINES; index++)
    {
    // test if station is alive
    if (mines[index].state == MINE_STATE_ALIVE)
        {

// test for activation
if (mines[index].varsI[INDEX_MINE_AI_STATE] == MINE_STATE_AI_ACTIVATED)
    {

        // move the mines
        mines[index].varsI[INDEX_WORLD_X]+=mines[index].xv;
        mines[index].varsI[INDEX_WORLD_Y]+=mines[index].yv;


       // add damage trails
       if (mines[index].varsI[INDEX_MINE_DAMAGE] > (MAX_MINE_DAMAGE >> 1) && 
           (rand()%3)==1)
        {
        Start_Particle(PARTICLE_TYPE_FLICKER, PARTICLE_COLOR_WHITE, 30+rand()%25, 
                      mines[index].varsI[INDEX_WORLD_X]+RAND_RANGE(-4,4), 
                      mines[index].varsI[INDEX_WORLD_Y]+RAND_RANGE(-4,4), 
                      (mines[index].xv*.125), (mines[index].yv*.125));
    
        Start_Particle(PARTICLE_TYPE_FADE, PARTICLE_COLOR_RED, 5, 
                      mines[index].varsI[INDEX_WORLD_X]+RAND_RANGE(-4,4), 
                      mines[index].varsI[INDEX_WORLD_Y]+RAND_RANGE(-4,4), 
                      (mines[index].xv*.125), (mines[index].yv*.125));

        } // end if

        // tracking algorithm

        // compute vector toward player
        float vx = player_x - mines[index].varsI[INDEX_WORLD_X];
        float vy = player_y - mines[index].varsI[INDEX_WORLD_Y];

        // normalize vector (sorta :)
        float length = Fast_Distance_2D(vx,vy);


        // only track if reasonable close
        if (length < MIN_MINE_TRACKING_DIST)
            {
            vx=mine_tracking_rate*vx/length;
            vy=mine_tracking_rate*vy/length;

            // add velocity vector to current velocity
            mines[index].xv+=vx;
            mines[index].yv+=vy;

            // add a little noise
            if ((rand()%10)==1)
                {
                vx = RAND_RANGE(-1,1);
                vy = RAND_RANGE(-1,1);
                mines[index].xv+=vx;
                mines[index].yv+=vy;
                } // end if

            // test velocity vector of mines
            length = Fast_Distance_2D(mines[index].xv, mines[index].yv);

            // test for velocity overflow and slow
            if (length > MAX_MINE_VELOCITY)
                {
                // slow down
                mines[index].xv*=0.75;
                mines[index].yv*=0.75;

                } // end if

            } // end if
        else
            {
            // add a random velocity component
            if ((rand()%30)==1)
                {
                vx = RAND_RANGE(-2,2);
                vy = RAND_RANGE(-2,2);

                // add velocity vector to current velocity
                mines[index].xv+=vx;
                mines[index].yv+=vy;

                // test velocity vector of mines
                length = Fast_Distance_2D(mines[index].xv, mines[index].yv);

                // test for velocity overflow and slow
                if (length > MAX_MINE_VELOCITY)
                    {
                    // slow down
                    mines[index].xv*=0.75;
                    mines[index].yv*=0.75;

                    } // end if
        
                } // end if
           
            } // end else

        } // end if activated
    else
        {
        // compute dist from player
        float vx = player_x - mines[index].varsI[INDEX_WORLD_X];
        float vy = player_y - mines[index].varsI[INDEX_WORLD_Y];

        float length = Fast_Distance_2D(vx,vy);

        if (length < MIN_MINE_ACTIVATION_DIST)
            {
            mines[index].varsI[INDEX_MINE_AI_STATE] = MINE_STATE_AI_ACTIVATED;

            // sound off
            DSound_Play(mine_powerup_id);
            } // end if

        } // end else

        // test for boundaries
        if (mines[index].varsI[INDEX_WORLD_X] > UNIVERSE_MAX_X)
           {
  		   mines[index].varsI[INDEX_WORLD_X] = UNIVERSE_MIN_X;
           } // end if
		else
		if (mines[index].varsI[INDEX_WORLD_X] < UNIVERSE_MIN_X )
           {
  		   mines[index].varsI[INDEX_WORLD_X] = UNIVERSE_MAX_X;
           } // end if	    

		if (mines[index].varsI[INDEX_WORLD_Y] > UNIVERSE_MAX_Y)
           {
		   mines[index].varsI[INDEX_WORLD_Y] = UNIVERSE_MIN_Y;
           } // end if
		else
		if (mines[index].varsI[INDEX_WORLD_Y] < UNIVERSE_MIN_Y ) 
           {
		   mines[index].varsI[INDEX_WORLD_Y] = UNIVERSE_MAX_Y;
           } // end if

    // check for collision with player
         if (player_state == PLAYER_STATE_ALIVE && player_state == PLAYER_STATE_ALIVE &&
             Collision_Test(player_x-(wraith.width*.5), 
                            player_y-(wraith.height*.5), 
                            wraith.width, wraith.height,
                            mines[index].varsI[INDEX_WORLD_X]-(mines[index].width*.5), 
			     		    mines[index].varsI[INDEX_WORLD_Y]-(mines[index].height*.5),
                            mines[index].width, mines[index].height)) 
             {

             // test for contact count
             if (++mines[index].varsI[INDEX_MINE_CONTACT_COUNT] > MAX_MINE_CONTACT_COUNT)
                {
            
                 // add to players score
                 player_score+=250;

                 // damage player
                 player_damage+=30;

                 // engage shields
                 player_shield_count = 3;

                 int width = 30+rand()%40;

                 // start a burst
                 Start_Burst(mines[index].varsI[INDEX_WORLD_X], 
                             mines[index].varsI[INDEX_WORLD_Y], 
                             width, (width*.5) + (width*.25),
                             int(mines[index].xv)*.5, int(mines[index].yv)*.5);   


                 // kill the mine
                 mines[index].state=MINE_STATE_DEAD;

                 // start a new mine
                 Start_Mine();
             
                // process next mine
                continue;

                } // end if contact count

             } // end if
        else // no collision or other problem, so reset
            {
            mines[index].varsI[INDEX_MINE_CONTACT_COUNT] = 0;
            } // end else

		} // end if alive

	} // end for index

} // end Move_Mines

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

void Draw_Mines(void)
{
// this function draws all the mines

for (int index=0; index < MAX_MINES; index++)
    {
    // test if mine is alive
    if (mines[index].state == MINE_STATE_ALIVE)
        {
        // transform to screen coords
        mines[index].x = mines[index].varsI[INDEX_WORLD_X] - (mines[index].width >> 1) - player_x + (SCREEN_WIDTH/2);
        mines[index].y = mines[index].varsI[INDEX_WORLD_Y] - (mines[index].height >> 1) - player_y + (SCREEN_HEIGHT/2);

        // draw the station
        Draw_BOB(&mines[index],lpddsback);

		// animate the mine
        Animate_BOB(&mines[index]);
        
        // draw info text above mine
        sprintf(buffer,"VELOCITY[%f, %f]", mines[index].xv, mines[index].yv);
        Draw_Text_GDI(buffer,mines[index].x-32,mines[index].y-16,RGB(0,255,0),lpddsback);
 
        } // end if

    } // end for index

} // end Draw_Mines

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

void Delete_Mines(void)
{
// this function simply deletes all memory and surfaces
// related to the mines

for (int index=0; index < MAX_MINES; index++)
    Destroy_BOB(&mines[index]);

} // end Delete_Mines


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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲亚洲国产日韩| 国产一区二区免费看| 欧美韩国日本综合| 日韩美女一区二区三区| 9191国产精品| 69精品人人人人| 欧美日韩精品一区二区在线播放| 97精品国产97久久久久久久久久久久| 国产福利一区在线| 国产成人在线视频网站| 岛国一区二区三区| 色综合天天在线| 欧美在线你懂的| 日韩一区二区免费在线观看| 欧美一级欧美三级| 久久午夜色播影院免费高清| 亚洲精品在线三区| 中文字幕制服丝袜成人av | 一区二区免费视频| 亚洲国产另类av| 日日摸夜夜添夜夜添亚洲女人| 五月婷婷综合网| 麻豆精品国产91久久久久久| 国产高清亚洲一区| 91黄色小视频| 日韩视频永久免费| 国产精品不卡一区二区三区| 亚洲综合色自拍一区| 久久99国产精品久久99| 粉嫩一区二区三区性色av| 色素色在线综合| 精品久久久久久久人人人人传媒 | 中文字幕制服丝袜一区二区三区 | 国产在线精品视频| 9l国产精品久久久久麻豆| 在线观看三级视频欧美| 久久影院电视剧免费观看| 一区二区三区高清| 韩国成人福利片在线播放| 91蜜桃免费观看视频| 日韩限制级电影在线观看| 国产精品久久久久影院色老大 | 欧美一二三四区在线| 欧美国产成人在线| 看片网站欧美日韩| 色呦呦网站一区| 久久久久久久久伊人| 三级在线观看一区二区| 97se亚洲国产综合自在线观| 欧美精品在线视频| 亚洲欧美色一区| 国产精品中文字幕一区二区三区| 欧美在线观看你懂的| 国产精品网站在线| 久久er99热精品一区二区| 欧美色国产精品| 亚洲图片另类小说| 不卡视频一二三| 精品欧美一区二区久久| 午夜欧美电影在线观看| 成年人午夜久久久| 国产欧美一区二区精品秋霞影院 | 在线观看成人免费视频| 国产午夜精品久久久久久免费视| 日韩制服丝袜先锋影音| 在线观看欧美精品| 一区二区视频在线看| 成人av资源在线| 国产精品美女久久久久久| 国产精品正在播放| 久久久综合视频| 国产精品12区| 亚洲国产成人一区二区三区| 激情综合一区二区三区| 久久久午夜精品| 高清beeg欧美| 国产精品理伦片| 丁香激情综合五月| 亚洲婷婷国产精品电影人久久| 高清久久久久久| 国产精品天天摸av网| av成人免费在线观看| 综合色中文字幕| 色呦呦国产精品| 婷婷丁香激情综合| 日韩一二三区不卡| 国产主播一区二区三区| 国产偷国产偷亚洲高清人白洁| 韩国欧美一区二区| 国产精品日日摸夜夜摸av| av激情综合网| 午夜视频在线观看一区二区三区| 欧美美女喷水视频| 国产真实乱子伦精品视频| 国产三级欧美三级日产三级99| 国产高清在线精品| 亚洲精品videosex极品| 欧美日本韩国一区| 国产在线精品一区二区夜色| 日本一区二区三区四区在线视频 | 91精品国产综合久久香蕉的特点 | 精品美女在线播放| 成人高清视频在线观看| 一区二区视频在线| 日韩精品中文字幕一区二区三区 | 欧洲日韩一区二区三区| 日韩1区2区3区| 日本一区二区三区四区| 欧美最新大片在线看| 日韩精品亚洲专区| 成人免费小视频| 欧美人与禽zozo性伦| 国产一区二区导航在线播放| 亚洲丝袜美腿综合| 日韩欧美高清一区| 色综合久久综合中文综合网| 免费看日韩a级影片| 中文字幕一区二区三区不卡| 8x8x8国产精品| 91美女视频网站| 国产ts人妖一区二区| 亚州成人在线电影| 国产精品激情偷乱一区二区∴| 欧美日韩精品专区| 色综合久久九月婷婷色综合| 激情综合色播五月| 亚洲国产aⅴ成人精品无吗| 久久精品视频在线看| 3d动漫精品啪啪一区二区竹菊| 国产jizzjizz一区二区| 奇米影视在线99精品| 亚洲男女毛片无遮挡| 国产精品天天摸av网| 欧美大白屁股肥臀xxxxxx| 91高清在线观看| 成人aa视频在线观看| 国产激情视频一区二区三区欧美 | 久久丝袜美腿综合| 欧美人伦禁忌dvd放荡欲情| 色婷婷久久99综合精品jk白丝 | 国产精品国产自产拍在线| 精品国产99国产精品| 日韩一级完整毛片| 91麻豆精品国产91久久久| 欧美日韩在线三区| 欧美亚洲图片小说| 在线看一区二区| 91九色02白丝porn| 91久久精品网| 欧美日韩大陆在线| 欧美日韩国产美| 欧美日韩在线播| 欧美顶级少妇做爰| 欧美日韩电影在线| 日韩你懂的在线观看| 日韩三区在线观看| 精品国产三级a在线观看| 日韩欧美一卡二卡| 欧美mv日韩mv亚洲| 久久久亚洲精华液精华液精华液| 日韩精品在线一区| 久久久av毛片精品| 国产精品福利av| 亚洲日本丝袜连裤袜办公室| 亚洲欧美日韩一区二区 | 中文字幕欧美三区| 欧美激情综合五月色丁香小说| 国产偷国产偷精品高清尤物| 亚洲国产高清在线观看视频| 最新欧美精品一区二区三区| 亚洲欧美色图小说| 日韩va亚洲va欧美va久久| 日本aⅴ亚洲精品中文乱码| 久久99在线观看| 成人综合在线网站| 欧美日韩国产在线观看| 91精品国产入口在线| 欧美精品一区二区蜜臀亚洲| 久久久久久久久久看片| 亚洲视频你懂的| 日本人妖一区二区| 国产成人鲁色资源国产91色综| 91影院在线观看| 制服丝袜亚洲网站| 国产人妖乱国产精品人妖| 一区二区三区小说| 麻豆91在线观看| 99在线精品一区二区三区| 欧美精品在线观看播放| 国产精品视频yy9299一区| 天堂va蜜桃一区二区三区漫画版| 国产一本一道久久香蕉| av电影在线观看完整版一区二区| 欧美老女人在线| 成人欧美一区二区三区在线播放| 日韩精品亚洲一区| 色嗨嗨av一区二区三区| 精品国产青草久久久久福利| 一区二区三区在线看| 国产不卡视频在线播放|