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

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

?? demo12_7.cpp

?? 一本外國人寫的關于3D游戲編程的書的源碼
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
for (int piles=0; piles < num_piles; num_piles++)
    {
    // plop down some mnms at the pile position
    int pile_x = 32 + rand()%400;
    int pile_y = rand()%480;

    // compute number of mnms for pile
    int num_mnms_pile = 5 + rand()%15;

    // now find a position for each
    for (index = 0; index < num_mnms_pile; index++)
        {
        // select random position and energy level for mnm
        food[curr_mnm].x = pile_x + rand()%20;
        food[curr_mnm].y = pile_y + rand()%20;
        food[curr_mnm].energy = 600 + rand()%1000;

        // increment total number of mnms thus far
        if (++curr_mnm >= NUM_MNMS)
           break;

        } // end for index

        if (++curr_mnm >= NUM_MNMS)
           break;

      } // end for pile 

// unload ant imagery
Unload_Bitmap_File(&bitmap8bit);

// initialize directinput
DInput_Init();

// acquire the keyboard only
DInput_Init_Keyboard();
DInput_Init_Mouse();

// initilize DirectSound
DSound_Init();

// load background sounds
niceday_sound_id = DSound_Load_WAV("NICEDAY.WAV");

// start the sounds
DSound_Play(niceday_sound_id, DSBPLAY_LOOPING);

// set clipping rectangle to screen extents so objects dont
// mess up at edges
RECT screen_rect = {0,0,screen_width,screen_height};
lpddclipper = DDraw_Attach_Clipper(lpddsback,1,&screen_rect);

// hide the mouse
ShowCursor(FALSE);

// return success
return(1);

} // end Game_Init

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

int Game_Shutdown(void *parms)
{
// this function is where you shutdown your game and
// release all resources that you allocated

int index; // looping var

// shut everything down

// kill all the bobs
for (index = 0; index<NUM_ANTS; index++)
    Destroy_BOB(&ants[index]);

// shutdown directdraw last
DDraw_Shutdown();

// now directsound
DSound_Stop_All_Sounds();
DSound_Shutdown();

// shut down directinput
DInput_Shutdown();

// return success
return(1);
} // end Game_Shutdown

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

#if 0

// defines for ants
#define NUM_ANTS        16
#define ANT_ANIM_UP      0
#define ANT_ANIM_RIGHT   1
#define ANT_ANIM_DOWN    2
#define ANT_ANIM_LEFT    3

// states of ant
#define ANT_WANDERING             0   // moving around randomly
#define ANT_EATING                1   // at a mnm eating it
#define ANT_RESTING               2   // sleeping :)
#define ANT_SEARCH_FOOD           3   // hungry and searching for food
        #define ANT_SEARCH_FOOD_S1        31  // substate 1
        #define ANT_SEARCH_FOOD_S2        32  // substate 2
#define ANT_COMMUNICATING         4   // talking to another ant  
#define ANT_DEAD                  5   // this guy is dead, got too hungry

#define ANT_INDEX_HUNGER_LEVEL     0
#define ANT_INDEX_HUNGER_TOLERANCE 1 
#define ANT_INDEX_AI_STATE         2
#define ANT_INDEX_AI_SUBSTATE      3
#define ANT_INDEX_DIRECTION        4

#endif


void Init_Ants(void)
{
// this function initializes all the ant positions, states, etc.

int index;

for (index=0; index < NUM_ANTS; index++)
    {
    // set the position of ant
    ants[index].x = rand()%472;
    ants[index].y = rand()%screen_height;

    // set the hunger level and tolerance of this guy
    ants[index].varsI[ANT_INDEX_HUNGER_LEVEL]     = 0;

    // ant will die if hunger level reaches this
    ants[index].varsI[ANT_INDEX_HUNGER_TOLERANCE] = 2000+rand()%2000;  

    // set the ai state of ant
    ants[index].varsI[ANT_INDEX_AI_STATE] = ANT_WANDERING;

    // set last ant talked to as self
    ants[index].varsI[ANT_INDEX_LAST_TALKED_WITH] = index;

    // set how long to wander
    ants[index].counter_1 = RAND_RANGE(150, 300);

    // set direction
    ants[index].varsI[ANT_INDEX_DIRECTION] = RAND_RANGE(ANT_ANIM_UP, ANT_ANIM_LEFT);
    
    // time in that direction
    ants[index].counter_2 = RAND_RANGE(10, 100);

    // start animation
    Set_Animation_BOB(&ants[index], ants[index].varsI[ANT_INDEX_DIRECTION]);

    // init ant memory 
    memset(&ants_mem[index], 0, sizeof(ANT_MEMORY));

    } // end for index

} // end Init_Ants

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

void Draw_Ants(void)
{
// this function draws all the ants

int index;

for (index=0; index < NUM_ANTS; index++)
    {
    // draw the image
    ants[index].x-=8; ants[index].y-=8; // center ant
    Draw_BOB(&ants[index], lpddsback);
    ants[index].x+=8; ants[index].y+=8; // fix center

    // draw a little number above ant
    sprintf(buffer,"%d", index);
    Draw_Text_GDI(buffer,ants[index].x,ants[index].y-16,RGB(0,255,0),lpddsback);

    // animate the ant
    if (ants[index].varsI[ANT_INDEX_AI_STATE] == ANT_WANDERING ||
        ants[index].varsI[ANT_INDEX_AI_STATE] == ANT_SEARCH_FOOD ||
        ants[index].varsI[ANT_INDEX_AI_STATE] == ANT_DEAD)
    Animate_BOB(&ants[index]);

 

    } // end for index

} // end Draw_Ants

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

float Food_Near_Ant(int cell_x, int cell_y)
{
// this functions scan all the food in the universe and tests if any is
// close to ant in this cell, if so the energy level of the food is scaled 
// and summed to the "memory" strength of that particular geographical location
// in the ants memory
// this algorithm is totally inefficient, in real life this was be called only
// once and all the cell based positions would be pre-computed since the mnms never
// move, but this is just to show you how you would do it if they could move...

int index; // looping var

float food_sum = 0; // used to tally up food in cell sector

// is this mnm in the current cell?
for (index = 0; index < NUM_MNMS; index++)
    {
    // is this mnm still there
    if (food[index].energy > 0)
       {
       // compute cell position, this is dumb, but needed if mnms can move, which
       // they could if you give the ants the ability to pick them up :)
       int mnm_x = food[index].x / 30;
       int mnm_y = food[index].y / 30;

       // is this within the same cell
       if (mnm_x == cell_x && mnm_y == cell_y)
          food_sum+=(food[index].energy/5);

       } // end if

    } // end for index

// now send it back 
return(food_sum);

} // end Food_Near_Ant

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

int Max_Food_In_Cell(int cell_x, int cell_y, int *food_x, int *food_y)
{
// this function finds the exact location of the mnm with the highest energy in a cell

float max_food = 0;   // used to tally up food in cell sector
int max_food_id = 0; // used to track winner

// is this mnm in the current cell?
for (int index = 0; index < NUM_MNMS; index++)
    {
    // is this mnm still there
    if (food[index].energy > 0)
       {
       // compute cell position, this is dumb, but needed if mnms can move, which
       // they could if you give the ants the ability to pick them up :)
       int mnm_x = food[index].x / 30;
       int mnm_y = food[index].y / 30;

       // is this within the same cell
       if (mnm_x == cell_x && mnm_y == cell_y)
          { 
          // is this higher energy
          if (food[index].energy > max_food)
             {
             // set this as new food
             max_food_id = index;
             max_food = food[index].energy;
             *food_x = food[index].x;
             *food_y = food[index].y;
             } // end if

          } // end if

       } // end if

    } // end for index

// now send it back 
return(max_food_id);

} // end Max_Food_In_Cell

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

int Select_State_Rand(int state1, int prob1,            
                      int state2, int prob2,    
                      int state3, int prob3,    
                      int state4, int prob4,    
                      int state5, int prob5,
                      int state6, int prob6)
{
// this function simply selects one of state1...state6 based on the probability
// of each state, if probi is 0 then the state is not considered

int index     = 0,   // looping variable
    curr_elem = 0,   // tracks next entry to place in table
    state_prob[100]; // used to hold generated probability look up

// build probability table
for (index = 0; index < prob1; index++)
    state_prob[curr_elem++] = state1;

for (index = 0; index < prob2; index++)
    state_prob[curr_elem++] = state2;

for (index = 0; index < prob3; index++)
    state_prob[curr_elem++] = state3;

for (index = 0; index < prob4; index++)
    state_prob[curr_elem++] = state4;

for (index = 0; index < prob5; index++)
    state_prob[curr_elem++] = state5;

for (index = 0; index < prob6; index++)
    state_prob[curr_elem++] = state6;

// now select a state
return(state_prob[rand()%100]);

} // end Select_State_Rand

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

void Set_New_State(int new_state, int index, int var1=0, int var2=0)
{
// this function sets the state of the ant to new_state

       // reset all state info
       ants[index].varsI[ANT_INDEX_AI_STATE]    = 0;
       ants[index].varsI[ANT_INDEX_AI_SUBSTATE] = 0;
       ants[index].counter_1                    = 0;
       ants[index].counter_2                    = 0;
       
       // now set new state info
       switch(new_state)
           {
           case ANT_WANDERING:      // moving around randomly
               {
               // set the ai state of ant
               ants[index].varsI[ANT_INDEX_AI_STATE] = ANT_WANDERING;

               // set how long to wander
               ants[index].counter_1 = RAND_RANGE(150, 300);

               // set direction
               ants[index].varsI[ANT_INDEX_DIRECTION] = RAND_RANGE(ANT_ANIM_UP, ANT_ANIM_LEFT);
    
               // time in that direction

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美肥妇毛茸茸| 国产在线播放一区三区四| 亚洲精品你懂的| 麻豆成人久久精品二区三区红| 激情深爱一区二区| 国产夫妻精品视频| 在线一区二区三区四区五区| 67194成人在线观看| 亚洲国产成人一区二区三区| 久久久久国色av免费看影院| 亚洲精品国产第一综合99久久| 中文字幕日韩av资源站| 日本欧美久久久久免费播放网| 欧美日韩中文字幕一区二区| 久久伊人蜜桃av一区二区| 日韩电影在线观看一区| 欧美视频自拍偷拍| 日本午夜精品视频在线观看 | 精品国产乱码久久久久久1区2区 | 99热99精品| 国产一区 二区| 777奇米成人网| 亚洲国产成人av| www.色综合.com| 国产精品久久久久国产精品日日| 人人狠狠综合久久亚洲| 欧美日韩国产a| 一区二区三区不卡在线观看| 欧美一区二区不卡视频| 综合中文字幕亚洲| av不卡免费电影| 国产精品成人免费| 成人福利在线看| 国产欧美日韩综合| 国产麻豆精品久久一二三| 久久久一区二区| 成人福利电影精品一区二区在线观看 | 亚洲精品国产视频| 91精品国产入口| 成人手机电影网| 亚洲国产一二三| 精品久久久久av影院 | 欧美精品一区二区三区在线播放| 亚洲一区二区三区激情| 欧美在线一二三四区| 天堂在线亚洲视频| 日韩一二三区不卡| 成人性生交大片免费看视频在线| 亚洲免费观看高清完整版在线观看熊| 成人av电影免费观看| 天堂一区二区在线免费观看| 欧美国产精品专区| 欧美高清激情brazzers| 国产成人免费视频精品含羞草妖精| 中文字幕av一区二区三区免费看| 欧美日韩情趣电影| 91浏览器打开| 九色|91porny| 精品国产伦一区二区三区免费 | 亚洲乱码中文字幕综合| 91精品国产品国语在线不卡| 美女视频一区二区| 3d动漫精品啪啪一区二区竹菊| 国产午夜精品一区二区三区视频 | 亚洲老妇xxxxxx| 国产精品久久久久久久久快鸭| 亚洲国产精品精华液2区45| 久久一区二区视频| 亚洲视频一区二区在线| 亚洲一区欧美一区| 亚洲成年人网站在线观看| 国产精品系列在线| 久久久久亚洲蜜桃| 3d成人动漫网站| 欧美性生活影院| 成人av手机在线观看| 国产成人精品免费网站| 黄色小说综合网站| 极品少妇xxxx精品少妇| 天天免费综合色| 天堂蜜桃91精品| 五月婷婷综合在线| 日韩黄色免费电影| 亚洲一区视频在线| 日韩成人午夜电影| 麻豆精品久久精品色综合| 极品少妇xxxx偷拍精品少妇| 精品一区二区免费看| 极品少妇xxxx精品少妇偷拍 | 日韩免费一区二区三区在线播放| 国产一区999| 成人激情午夜影院| 91免费观看在线| 欧美综合天天夜夜久久| 欧美猛男gaygay网站| 欧美体内she精高潮| 日韩一区二区三区三四区视频在线观看 | 激情综合网最新| 丰满放荡岳乱妇91ww| 国产91丝袜在线播放| 91日韩在线专区| 日韩欧美激情在线| 国产精品午夜电影| 午夜精品一区在线观看| 久久精品久久精品| 粗大黑人巨茎大战欧美成人| 色欧美日韩亚洲| 久久精品欧美一区二区三区麻豆 | 久久se精品一区精品二区| 成人h精品动漫一区二区三区| 91福利国产成人精品照片| 久久综合九色综合久久久精品综合 | 欧美精品一区二区三区高清aⅴ| 国产欧美日本一区二区三区| 亚洲成a人在线观看| 不卡av免费在线观看| 久久久久久久久久看片| 免费不卡在线观看| 不卡电影免费在线播放一区| 日韩欧美一二三| 免费在线欧美视频| 欧美精品tushy高清| 亚洲激情图片小说视频| 国产91在线|亚洲| 国产欧美日韩不卡| 懂色一区二区三区免费观看| 欧美电视剧免费全集观看 | 丁香婷婷深情五月亚洲| 日韩精品专区在线影院观看 | 一本大道久久a久久综合婷婷| 久久精品人人做人人爽人人| 亚洲成va人在线观看| 日本成人在线不卡视频| 久久综合一区二区| 国产福利一区二区三区视频在线 | 日韩伦理免费电影| 欧美日韩电影一区| 亚洲精品国产a| 精品国产乱码久久久久久1区2区| hitomi一区二区三区精品| 亚洲成在线观看| 日韩一本二本av| 国产伦精品一区二区三区在线观看| 国产精品免费av| 欧美一区二区三区视频在线观看| 国产成人夜色高潮福利影视| 91浏览器打开| 日韩一区二区三区电影在线观看 | 奇米777欧美一区二区| 欧美日韩午夜精品| 爽好久久久欧美精品| 91麻豆精品国产无毒不卡在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩一区二区视频| 日本欧美一区二区三区乱码| 欧美一二三在线| 精品亚洲国内自在自线福利| 精品久久久久久久人人人人传媒| 欧美电影在哪看比较好| 国产一区中文字幕| 一区二区日韩电影| 日本一区二区三区免费乱视频 | 风间由美性色一区二区三区| 亚洲福利一区二区| 欧美国产精品一区二区三区| 欧美日韩一区二区三区四区| 91丝袜美腿高跟国产极品老师| 午夜av一区二区| 一区二区三区四区不卡在线| 亚洲精品伦理在线| 亚洲黄一区二区三区| 亚洲欧美日韩国产综合| 亚洲裸体xxx| 亚洲精品免费电影| 亚洲国产精品天堂| 水野朝阳av一区二区三区| 毛片av中文字幕一区二区| 国产精品系列在线观看| 成人av免费网站| 欧美精品黑人性xxxx| 精品欧美一区二区久久| 久久精品日韩一区二区三区| 中文字幕乱码日本亚洲一区二区| 亚洲天堂免费看| 天天av天天翘天天综合网 | 91精品国产综合久久久久久| 26uuu亚洲综合色欧美| 中文字幕日韩一区二区| 一二三四社区欧美黄| 国产在线播精品第三| 欧美在线观看视频一区二区三区 | 天天av天天翘天天综合网色鬼国产| 久久99国产精品麻豆| 粉嫩aⅴ一区二区三区四区 | 日韩精品免费专区| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美成人欧美edvon| 一级中文字幕一区二区| 春色校园综合激情亚洲| 日韩欧美国产一区二区三区 |