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

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

?? outpost.cpp

?? 一本外國人寫的關于3D游戲編程的書的源碼
?? CPP
?? 第 1 頁 / 共 5 頁
字號:

    } // 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

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

void Init_Gunships(void)
{
// this function loads and initializes the gunships to a known state
	
int frame;  // looping var

// create the first bob
Create_BOB(&gunships[0],0,0,160,70,32,
            BOB_ATTR_VISIBLE | BOB_ATTR_MULTI_FRAME,
            DDSCAPS_SYSTEMMEMORY);

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

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

    // unload data infile
    Unload_Bitmap_File(&bitmap8bit);

	} // end if

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

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

    // unload data infile
    Unload_Bitmap_File(&bitmap8bit);

	} // end if

// set state to off
gunships[0].state                       = GUNSHIP_STATE_DEAD;
gunships[0].varsI[INDEX_GUNSHIP_DIR]    = GUNSHIP_RIGHT;
gunships[0].varsI[INDEX_GUNSHIP_TURRET] = 0;
gunships[0].varsI[INDEX_GUNSHIP_DAMAGE] = 0;

// make copies
for (int ship=1; ship < MAX_GUNSHIPS; ship++)
    {
    memcpy(&gunships[ship], &gunships[0], sizeof(BOB));
    } // end for gunship

} // end Init_Gunships

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

void Reset_Gunships(void)
{
// this function resets all the gunships

for (int ship=0; ship < MAX_GUNSHIPS; ship++)
    {
    gunships[ship].state                       = GUNSHIP_STATE_DEAD;
    gunships[ship].varsI[INDEX_GUNSHIP_DIR]    = GUNSHIP_RIGHT;
    gunships[ship].varsI[INDEX_GUNSHIP_TURRET] = 0;
    gunships[ship].varsI[INDEX_GUNSHIP_DAMAGE] = 0;
    } // end for gunship

} // end Reset_Gunships

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

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

// first find an available gunship
for (int index=0; index < MAX_GUNSHIPS; index++)
	{
	// is this one dead
	if (gunships[index].state  == GUNSHIP_STATE_DEAD)
		{
		// position the gunship on a circle ring randomly from player

		int ang = rand()%16;
		float xpos = GUNSHIP_RANGE_RING*cos_look16[ang];
		float ypos = GUNSHIP_RANGE_RING*sin_look16[ang];

        // set position
		gunships[index].varsI[INDEX_WORLD_X] = player_x+xpos;
		gunships[index].varsI[INDEX_WORLD_Y] = player_y+ypos;

		// set direction
		if ((rand()%2) == 0)
			{
			// set direction to right
			gunships[index].varsI[INDEX_GUNSHIP_DIR] = GUNSHIP_RIGHT;

			// set velocity
			gunships[index].xv = 4+rand()%8;
			gunships[index].yv = RAND_RANGE(-4,4);

			} // end if right
		else 
			{
			// set direction to left
			gunships[index].varsI[INDEX_GUNSHIP_DIR] = GUNSHIP_LEFT;

			// set velocity
			gunships[index].xv = -4-rand()%8;
			gunships[index].yv = RAND_RANGE(-4,4);

			} // end left
		
		// set remaining state variables
		gunships[index].state  = GUNSHIP_STATE_ALIVE;
        gunships[index].varsI[INDEX_GUNSHIP_TURRET] = 0;
        gunships[index].varsI[INDEX_GUNSHIP_DAMAGE] = 0;

		// done so exit
		return;

		} // end if
	
	} // end for index

} // end Start_Gunship

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

void Move_Gunships(void)
{
// this function moves all the gunships and does the ai

// turrent center offsets for plasma pulses
static int turret_left[3][2]  = {-60,-19, -63,-9, -3,-24};
static int turret_right[3][2] = { 60,-19,  63,-9,  3,-24};

for (int index=0; index < MAX_GUNSHIPS; index++)
    {
    // test if plasma pulse is in flight
    if (gunships[index].state == GUNSHIP_STATE_ALIVE)
        {
        // move the gunship
        gunships[index].varsI[INDEX_WORLD_X]+=gunships[index].xv;
        gunships[index].varsI[INDEX_WORLD_Y]+=gunships[index].yv;
          
        // test for boundaries
        if (gunships[index].varsI[INDEX_WORLD_X] > UNIVERSE_MAX_X)
           {
  		   gunships[index].varsI[INDEX_WORLD_X] = UNIVERSE_MIN_X;
           } // end if
		else
		if (gunships[index].varsI[INDEX_WORLD_X] < UNIVERSE_MIN_X )
           {
  		   gunships[index].varsI[INDEX_WORLD_X] = UNIVERSE_MAX_X;
           } // end if	    

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


       // leave particle trail
    if (gunships[index].varsI[INDEX_GUNSHIP_DAMAGE] > (MAX_GUNSHIP_DAMAGE >> 2) && 
       (rand()%3)==1)
        {
        Start_Particle(PARTICLE_TYPE_FLICKER, PARTICLE_COLOR_WHITE, 30+rand()%25, 
                      gunships[index].varsI[INDEX_WORLD_X]+RAND_RANGE(-4,4), 
                      gunships[index].varsI[INDEX_WORLD_Y]+RAND_RANGE(-4,4), 
                      (gunships[index].xv*.125), (gunships[index].yv*.125));
    
        Start_Particle(PARTICLE_TYPE_FADE, PARTICLE_COLOR_RED, 5, 
                      gunships[index].varsI[INDEX_WORLD_X]+RAND_RANGE(-4,4), 
                      gunships[index].varsI[INDEX_WORLD_Y]+RAND_RANGE(-4,4), 
                      (gunships[index].xv*.125), (gunships[index].yv*.125));


    
        } // end if

		// do ai
		
		// test if player is in range to care
		if (Fast_Distance_2D(player_x-gunships[index].varsI[INDEX_WORLD_X],
			                 player_y-gunships[index].varsI[INDEX_WORLD_Y]) < GUNSHIP_MIN_ATTACK_RANGE)
			{
            // move gunship toward player on x and y axis
                // track x-axis
                if (player_x > gunships[index].varsI[INDEX_WORLD_X])
                    gunships[index].varsI[INDEX_WORLD_X]++;
                else
                if (player_x < gunships[index].varsI[INDEX_WORLD_X])
                    gunships[index].varsI[INDEX_WORLD_X]--;
            
                // track y-axis
                if (player_y > gunships[index].varsI[INDEX_WORLD_Y])
                    gunships[index].varsI[INDEX_WORLD_Y]++;
                else
                if (player_y < gunships[index].varsI[INDEX_WORLD_Y])
                    gunships[index].varsI[INDEX_WORLD_Y]--;


            // turn turret always
            // compute d0, d1, d2
            
        

            // first create a vector point in the direction of the turret
            
            // compute current turrent vector
            int tdir1 = gunships[index].varsI[INDEX_GUNSHIP_TURRET];
            
            float d1x = gunships[index].varsI[INDEX_WORLD_X] + cos_look16[tdir1]*32;
            float d1y = gunships[index].varsI[INDEX_WORLD_Y] + sin_look16[tdir1]*32;

            // compute turret vector plus one
            int tdir2 = gunships[index].varsI[INDEX_GUNSHIP_TURRET]+1;
            
            if (tdir2 > 15) 
                tdir2 = 0;

            float d2x = gunships[index].varsI[INDEX_WORLD_X] + cos_look16[tdir2]*32;
            float d2y = gunships[index].varsI[INDEX_WORLD_Y] + sin_look16[tdir2]*32;
            
            // compute turret vector minus one
            int tdir0 = gunships[index].varsI[INDEX_GUNSHIP_TURRET]-1;
            
            if (tdir0 < 0) 
                tdir0=15;

            float d0x = gunships[index].varsI[INDEX_WORLD_X] + cos_look16[tdir0]*32;
            float d0y = gunships[index].varsI[INDEX_WORLD_Y] + sin_look16[tdir0]*32;

            // now find the min dist
            float dist0 = Fast_Distance_2D(player_x - d0x, player_y - d0y);
            float dist1 = Fast_Distance_2D(player_x - d1x, player_y - d1y);
            float dist2 = Fast_Distance_2D(player_x - d2x, player_y - d2y);

            if (dist0 < dist2 && dist0 < dist1)
                {
                // the negative direction is best        
                gunships[index].varsI[INDEX_GUNSHIP_TURRET] = tdir0;

                } // end if
            else
            if (dist2 < dist0 && dist2 < dist1)
                {
                // the positive direction is best
                gunships[index].varsI[INDEX_GUNSHIP_TURRET] = tdir2;

                } // end if

            // test for firing
            if ((rand()%25)==1)
                {   
                // which direction is ship going?
                if (gunships[index].varsI[INDEX_GUNSHIP_DIR] == GUNSHIP_LEFT)
                    {
                    // select turret to fire from
                    int turret = rand()%3;

                    // compute offsets firing position
                    int plasma_x = gunships[index].varsI[INDEX_WORLD_X] +  turret_left[turret][0];
                    int plasma_y = gunships[index].varsI[INDEX_WORLD_Y] +  turret_left[turret][1];

                    float plasma_xv = gunships[index].xv+cos_look16[gunships[index].varsI[INDEX_GUNSHIP_TURRET]]*PLASMA_SPEED_SLOW;
	                float plasma_yv = gunships[index].yv+sin_look16[gunships[index].varsI[INDEX_GUNSHIP_TURRET]]*PLASMA_SPEED_SLOW;

                    // fire weapon
                    Fire_Plasma(plasma_x, plasma_y, plasma_xv,plasma_yv,PLASMA_ANIM_ENEMY);

                    } // end if
                else
                    {
                    // select turret to fire from
                    int turret = rand()%3;

                    // compute offsets firing position
                    int plasma_x = gunships[index].varsI[INDEX_WORLD_X] +  turret_right[turret][0];
                    int plasma_y = gunships[index].varsI[INDEX_WORLD_Y] +  turret_right[turret][1];

                    float plasma_xv = gunships[index].xv+cos_look16[gunships[index].varsI[INDEX_GUNSHIP_TURRET]]*PLASMA_SPEED_SLOW;
	                float plasma_yv = gunships[index].yv+sin_look16[gunships[index].varsI[INDEX_GUNSHIP_TURRET]]*PLASMA_SPEED_SLOW;

                    // fire weapon
                    Fire_Plasma(plasma_x, plasma_y, plasma_xv,plasma_yv,PLASMA_ANIM_ENEMY);

                    } // end if

                 } // end if fire

			} // end if

		} // end if alive

	} // end for index

} // end Move_Gunships

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

void Draw_Gunships(void)
{
// this function moves all the gunships

for (int index=0; index < MAX_GUNSHIPS; index++)
    {
    // test if plasma pulse is in flight
    if (gunships[index].state == GUNSHIP_STATE_ALIVE)
        {
        // transform to screen coords
        gunships[index].x = gunships[index].varsI[INDEX_WORLD_X] - (gunships[index].width >> 1) - player_x + (SCREEN_WIDTH/2);
        gunships[index].y = gunships[index].varsI[INDEX_WORLD_Y] - (gunships[index].height >> 1) - player_y + (SCREEN_HEIGHT/2);

        // select the proper frame
		gunships[index].curr_frame = (gunships[index].varsI[INDEX_GUNSHIP_DIR] << 4) + 
			                         (gunships[index].varsI[INDEX_GUNSHIP_TURRET]);

        // draw the gunship
        Draw_BOB(&gunships[index],lpddsback);
         
        } // end if

    } // end for index

} // end Draw_Gunships

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

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

for (int index=0; index < MAX_GUNSHIPS; index++)
    Destroy_BOB(&gunships[index]);

} // end Delete_Gunships

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

void Init_Powerups(void)
{
// this function loads and initializes the powerups to a known state
	
int index;  // looping var

// create the first bob
Create_BOB(&powerups[0],0,0,32,32,2,
            BOB_ATTR_VISIBLE | BOB_ATTR_MULTI_FRAME,
            DDSCAPS_SYSTEMMEMORY);

// load the powerups 
Pad_Name("OUTART/AMMOPU", "BMP", buffer, 0);
Load_Bitmap_File(&bitmap8bit, buffer);		

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

// unload data infile
Unload_Bitmap_File(&bitmap8bit);

Pad_Name("OUTART/SHLDPU", "BMP", buffer, 0);
Load_Bitmap_File(&bitmap8bit, buffer);		

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

// unload data infile
Unload_Bitmap_File(&bitmap8bit);

// set state to off
powerups[0].state                     = POWERUP_STATE_DEAD;
powerups[0].varsI[INDEX_POWERUP_TYPE] = POWERUP_TYPE_AMMO;

// make copies
for (index=1; index < MAX_POWERUPS; index++)
    {
    Clone_BOB(&powerups[0], &powerups[index]);
    } // end for index

} // end Init_Powerups

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

void Reset_Powerups(void)
{
// this function resets all the powerups

for (int index=0; index < MAX_POWERUPS; index++)
    {
    powerups[index].state                      = POWERUP_STATE_DEAD;
    powerups[index].varsI[INDEX_POWERUP_TYPE]  = POWERUP_TYPE_AMMO;
    } // end for powerups

} // end Reset_Powerups

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

void Start_Powerup(int type, int x, int y)
{
// this functions starts a powerup if one is available

// first find an available powerup
for (int index=0; index < MAX_POWERUPS; index++)
	{
	// is this one dead
	if (powerups[index].state == POWERUP_STATE_DEAD)
		{
		// position the powerup

        /

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品成人悠悠色影视| 色综合色综合色综合| 狠狠色伊人亚洲综合成人| 日韩国产精品久久久久久亚洲| 亚洲韩国一区二区三区| 亚洲高清不卡在线观看| 亚洲成人精品影院| 青青草原综合久久大伊人精品 | 午夜精品免费在线| 亚洲成年人影院| 五月婷婷综合在线| 久久精品国内一区二区三区| 激情亚洲综合在线| 国产成a人亚洲| yourporn久久国产精品| 日本精品裸体写真集在线观看 | 中文字幕在线不卡一区| 自拍偷拍国产精品| 一区二区三区电影在线播| 五月婷婷激情综合| 国产在线精品一区二区三区不卡| 国产+成+人+亚洲欧洲自线| www.欧美色图| 欧美性色欧美a在线播放| 5566中文字幕一区二区电影| 欧美一区二区三区四区视频| 久久美女艺术照精彩视频福利播放| 国产精品久久久久久福利一牛影视 | 中文字幕不卡的av| 一级中文字幕一区二区| 蜜桃精品视频在线| 国产精品一二三区| 色综合久久六月婷婷中文字幕| 欧美日韩国产天堂| 久久亚洲二区三区| 亚洲另类色综合网站| 日韩国产精品91| 国产麻豆视频一区| 99riav久久精品riav| 91麻豆精品国产91久久久使用方法| 久久―日本道色综合久久 | 成人av影视在线观看| 欧美日韩在线观看一区二区| 精品精品国产高清a毛片牛牛| 国产精品日日摸夜夜摸av| 亚洲国产中文字幕| 国产麻豆成人精品| 欧美日韩你懂得| 精品蜜桃在线看| 亚洲桃色在线一区| 另类综合日韩欧美亚洲| 91视频精品在这里| 欧美成人伊人久久综合网| 成人欧美一区二区三区黑人麻豆| 日韩国产欧美一区二区三区| av高清不卡在线| 日韩免费观看高清完整版| 最新欧美精品一区二区三区| 精品在线一区二区三区| 91激情五月电影| 国产清纯白嫩初高生在线观看91| 日韩中文欧美在线| 91在线视频观看| 久久一夜天堂av一区二区三区| 亚洲一区二区三区美女| fc2成人免费人成在线观看播放| 欧美一区二区三区爱爱| 一区二区三区四区不卡视频 | 欧美一区二区三区视频免费播放| 最新日韩在线视频| 国产成人精品网址| 日韩一级完整毛片| 亚洲午夜精品17c| 99国产精品久| 欧美韩日一区二区三区四区| 久久99在线观看| 91精品麻豆日日躁夜夜躁| 亚洲欧美一区二区三区国产精品| 国产精品一区在线观看乱码| 日韩免费电影一区| 天天影视网天天综合色在线播放| 91色在线porny| 国产精品拍天天在线| 国产精品资源网站| 精品国内二区三区| 欧美aⅴ一区二区三区视频| 欧美中文字幕一区二区三区亚洲| 国产精品久久精品日日| 国产精品77777| 精品国产乱码久久久久久免费 | av电影在线观看一区| 国产欧美精品一区| 国产精品一区二区久激情瑜伽| 欧美不卡一二三| 奇米综合一区二区三区精品视频| 欧美日韩国产另类一区| 图片区日韩欧美亚洲| 欧美日韩免费观看一区三区| 一区二区三区视频在线观看| 91蜜桃婷婷狠狠久久综合9色| 中文字幕日韩av资源站| 91丨porny丨首页| 国产精品护士白丝一区av| 成人av网站免费| 亚洲色图制服丝袜| 一本色道久久综合亚洲aⅴ蜜桃| 成人免费在线观看入口| 91在线观看下载| 亚洲色欲色欲www在线观看| 色偷偷久久一区二区三区| 亚洲精品大片www| 欧美日韩一区小说| 日韩精品视频网站| 精品人在线二区三区| 国产一区久久久| 国产欧美日韩不卡| 91片在线免费观看| 亚洲一线二线三线久久久| 欧美精品在线视频| 麻豆久久一区二区| 国产午夜精品一区二区三区四区| 国产精品女主播在线观看| 日韩电影在线免费看| 欧美精品vⅰdeose4hd| 五月激情六月综合| 精品黑人一区二区三区久久| 国产盗摄一区二区三区| 中文字幕亚洲区| 欧美日本在线一区| 国内精品第一页| 久久精品人人爽人人爽| 91一区二区三区在线播放| 婷婷综合五月天| 2欧美一区二区三区在线观看视频| 国产91富婆露脸刺激对白 | 久久激情五月婷婷| 国产天堂亚洲国产碰碰| 色吧成人激情小说| 午夜精品久久久久久久99水蜜桃 | 国产精品你懂的在线| 国模套图日韩精品一区二区 | 中文字幕一区二区三区四区| 欧美综合亚洲图片综合区| 美女脱光内衣内裤视频久久网站| 久久精品这里都是精品| 久久久久9999亚洲精品| www.亚洲色图| 亚洲国产精品自拍| 久久精品夜色噜噜亚洲a∨| 在线视频一区二区三| 国产精品综合av一区二区国产馆| 亚洲欧美自拍偷拍色图| 日韩一二三区不卡| www.爱久久.com| 欧美bbbbb| 一区二区三区在线免费播放| 日韩欧美成人一区| 欧美性一区二区| 国产精品18久久久久久久久久久久| 夜夜嗨av一区二区三区中文字幕| 久久一区二区三区国产精品| 91成人免费电影| 国产麻豆精品一区二区| 亚洲成人av免费| 国产精品成人免费在线| 精品粉嫩超白一线天av| 欧美日本在线一区| 97精品超碰一区二区三区| 精品在线免费观看| 亚洲午夜在线观看视频在线| 国产女人aaa级久久久级| 91麻豆精品国产自产在线 | 欧美白人最猛性xxxxx69交| 成人免费毛片片v| 精品在线观看免费| 午夜精品视频一区| 樱花草国产18久久久久| 国产精品久久毛片| 欧美成人猛片aaaaaaa| 欧美精品粉嫩高潮一区二区| 91老师国产黑色丝袜在线| 国产电影一区二区三区| 精品一区二区三区久久| 视频在线观看一区| 一区二区三区中文字幕精品精品| 国产日产欧美一区二区视频| 欧美一区二区视频在线观看| 欧美午夜精品一区二区蜜桃| 色综合色狠狠综合色| 波多野洁衣一区| 懂色一区二区三区免费观看 | 欧美精品在线一区二区三区| 在线日韩一区二区| 色综合久久久久综合体| www.亚洲在线| 不卡免费追剧大全电视剧网站| 国产成人在线免费观看| 国产精品一区二区在线看| 精品一区二区免费视频| 精品影视av免费|