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

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

?? demo12_7_16b.cpp

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


                          // now test if target reached
                          if (abs(ants[index].x - ants[index].varsI[ANT_INDEX_FOOD_TARGET_X]) < 4 &&
                              abs(ants[index].y - ants[index].varsI[ANT_INDEX_FOOD_TARGET_Y]) < 4)
                             {
                             // food reached, now find the biggest piece of food and
                             // vector to it, if none exist then go back to scan

                             // is there any food left?
                             if (ants[index].varsI[ANT_INDEX_FOOD_TARGET_ID] > 0)
                                {
                                // thank god!
                                Set_New_State(ANT_EATING, index, ants[index].varsI[ANT_INDEX_FOOD_TARGET_ID],0);
                                } // end if
                              else
                                 {
                                 // go back to scan
                                 ants[index].varsI[ANT_INDEX_AI_SUBSTATE] = ANT_SEARCH_FOOD_S1_SCAN;                            

                                 } // end if

                             } // end if
                        
                          } break;

                     case ANT_SEARCH_FOOD_S5: break;            
                     case ANT_SEARCH_FOOD_S6: break;           
                     case ANT_SEARCH_FOOD_S7: break;          

                     default: break;
                     } // end switch

               } break;

          case ANT_COMMUNICATING:  // talking to another ant  
               {
               // the ants sit and talk for a little bit, each ant picks
               // 16 memory cells from the matrix of 16x16 and then averages
               // the info, that is, they exchange information
               // this takes 1 unit of energy

               // time to exchange memory?
               if (++ants[index].counter_2 >= 3)
                  {
                  // reset counter
                  ants[index].counter_2 = 0;
                  
                  // select cell to exchange and exchange memory imprints
                  int memx = rand()%16;
                  int memy = rand()%16;

                  // sum with partners experience
                  ants_mem[index].cell[memx][memy] += 
                    0.5*ants_mem[ants[index].varsI[ANT_INDEX_LAST_TALKED_WITH]].cell[memx][memy];
     
                  // illuminate green to show communication
                  ants_mem[index].ilayer[memx][memy] = 250;
             
                  } // end if

               // test if we are done with this state and need a new one?
               if (--ants[index].counter_1 < 0 || 
                ants[ants[index].varsI[ANT_INDEX_LAST_TALKED_WITH]].varsI[ANT_INDEX_AI_STATE]!=ANT_COMMUNICATING)                                        
                  {
                  // select either rest or wander, search will pre-empt with logic following
                  // if hungry, state, probability of state, must sum to 100
                  select_new_state = Select_State_Rand(ANT_WANDERING,     90,            
                                                       ANT_EATING,        0,                
                                                       ANT_RESTING,       10,              
                                                       ANT_SEARCH_FOOD,   0,           
                                                       ANT_COMMUNICATING, 0,         
                                                       ANT_DEAD,          0);                    
                   } // end if


               // burn food
               ants[index].varsI[ANT_INDEX_HUNGER_LEVEL]++;

               // test for pre-empt into search mode if hunger is 50% tolerance
               if (ants[index].varsI[ANT_INDEX_HUNGER_LEVEL] > (ants[index].varsI[ANT_INDEX_HUNGER_TOLERANCE] >> 1) )
                  {
                  select_new_state = ANT_SEARCH_FOOD;
                  } // end if    

               } break;

          case ANT_DEAD:           // this guy is dead, got too hungry
               {
               // the any just sits there and is worm food, no enery expended          

 
               } break;

          default: break;

          } // end switch

    // was there a forced state transition?
if (ants[index].varsI[ANT_INDEX_AI_STATE]!=ANT_DEAD && 
   (ants[index].varsI[ANT_INDEX_HUNGER_LEVEL] >= ants[index].varsI[ANT_INDEX_HUNGER_TOLERANCE]))
   {
   // dead ant
   select_new_state = ANT_DEAD;

   } // end if

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

        // add a little forgetfulness, select a memory at random and weaken it
        int memx = rand()%16;
        int memy = rand()%16;

       ants_mem[index].ilayer[memx][memy] = 249; // illuminate red to show degradation

        if (ants_mem[index].cell[memx][memy] > 5)
           {
           ants_mem[index].cell[memx][memy]-=rand()%5;
           } // end if

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

// set new state if needed 
    if (select_new_state >= 0)
       {
       // set the state
       Set_New_State(select_new_state, index);
     
       } // end if
////////////////////////////////////////////////////

   // clear the memory matrix
   if (clear_ilayer >= 5)
      memset(ants_mem[index].ilayer,0, 1024);


   // this point is where the "physics" system need to operate
   // have any of the state changes or motions caused a physical problem
   // in the universe, we could do it in each state, but this is simpler

   // test for out of bounds
   if (ants[index].x > 472)
       {
       // bounce back a bit
       ants[index].x-=4;

       // turn to new heading
       switch(rand()%3)
             {
             case 0: ants[index].varsI[ANT_INDEX_DIRECTION] = ANT_ANIM_LEFT; break;
             case 1: ants[index].varsI[ANT_INDEX_DIRECTION] = ANT_ANIM_UP; break;
             case 2: ants[index].varsI[ANT_INDEX_DIRECTION] = ANT_ANIM_DOWN; break;
             default: break;
             } // end switch
     
       // add a little time to counters     
       ants[index].counter_2 += RAND_RANGE(30, 60);
       ants[index].counter_1 += RAND_RANGE(15, 30);

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

       } // end if
else
if (ants[index].x <= 16)
    {
    // bounce back a bit
    ants[index].x+=4;

    // turn to new heading
    switch(rand()%3)
          {
          case 0: ants[index].varsI[ANT_INDEX_DIRECTION] = ANT_ANIM_RIGHT; break;
          case 1: ants[index].varsI[ANT_INDEX_DIRECTION] = ANT_ANIM_UP; break;
          case 2: ants[index].varsI[ANT_INDEX_DIRECTION] = ANT_ANIM_DOWN; break;
          default: break;
          } // end switch
     
    // add a little time to counter     
    ants[index].counter_2 += RAND_RANGE(30, 60);
    ants[index].counter_1 += RAND_RANGE(15, 30);

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

    } // end if

if (ants[index].y < 0)
    ants[index].y = screen_height;
else
if (ants[index].y > screen_height)
    ants[index].y = 0;

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

    } // end for index

// update global memory clear counter
if (++clear_ilayer > 5)
    clear_ilayer= 0;



} // end Move_Ants

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

void Draw_Food(void)
{
// draw the food

int index;

for (index=0; index<NUM_MNMS; index++)
    {
    if (food[index].energy > 0)
       {
       // set position of mnm
       Set_Pos_BOB(&mnm, food[index].x-4, food[index].y-4);
       Draw_BOB16(&mnm, lpddsback);
       } // end if

    } // end for index

} // end Draw_Food

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

void Draw_Info(void)
{
// this function draws the state information for 8 ants

static char *state_to_text[6] = {"Wander", "Eating", "Resting", "Srchfood", "Talking", "Dead"};         

static int intensity_to_index[16] = {0,65,94,151,166,175,203,208,221,227,233,236,239,242,245,245};

#define DELTA_LINE 14

for (int index=0; index < NUM_ANTS; index++)
    {
    int px = 480;
    int py = 8+index * 60;


    // only show infor for first 8 ants
    if (index < 8 )
    {
    // print name of ant and state
    sprintf(buffer,"Ant%d=%s,%d", index, state_to_text[ants[index].varsI[ANT_INDEX_AI_STATE]], ants[index].varsI[ANT_INDEX_AI_SUBSTATE]);    
    Draw_Text_GDI(buffer,px, py, RGB(0,255,0),lpddsback);


    // print counters
    sprintf(buffer, "C1:%d,C2:%d", ants[index].counter_1, ants[index].counter_2);
    Draw_Text_GDI(buffer,px, py+DELTA_LINE, RGB(0,255,0),lpddsback);

    // print hunger level and tolerance
    sprintf(buffer,"Hungr:%d,Tol:%d", ants[index].varsI[ANT_INDEX_HUNGER_LEVEL],
                                      ants[index].varsI[ANT_INDEX_HUNGER_TOLERANCE]);

    Draw_Text_GDI(buffer,px, py+2*DELTA_LINE, RGB(0,255,0),lpddsback);

    // draw memory, the brighter the green dot, the stronger the memory
    Draw_Rectangle(px+124, py, px+124+18, py+18, 0, lpddsback);

    // dont draw memory if ant dead
    if (ants[index].varsI[ANT_INDEX_AI_STATE]!=ANT_DEAD)
    {
    DDraw_Lock_Back_Surface();
    for (int x = 0; x<16; x++)
        for (int y=0; y<16; y++)
            {
            // get memory and convert into pixel value to disply
            // dark means low recall, bright white means strong memory of food
            float mem_strength = ants_mem[index].cell[x][y];

            // each mnm is worth on average 500, so if a cell has a 2500 then we know there is 
            // a lot of food, use this as the highest strength
            if (mem_strength > 2500)
               mem_strength = 2500;

            // normalize and scale to color range
            int color_intensity = (int)((mem_strength/2500)*15);
            Draw_Pixel16(px+124+x+1,py+y+1, RGB16Bit((color_intensity*16),0,0), back_buffer, back_lpitch);
      
            int active_pixel = ants_mem[index].ilayer[x][y];

            if (active_pixel)
               // scan input layer to see where degradation and communication have taken place
               Draw_Pixel16(px+124+x+1,py+y+1, RGB16Bit(0,active_pixel,0), back_buffer, back_lpitch);
            } // end for

        DDraw_Unlock_Back_Surface();
       } // end if
       else
           // draw flat line :)
           {
           DDraw_Lock_Back_Surface();
           HLine16(px+124,px+124+18, py+9, RGB16Bit(255,0,0), back_buffer, back_lpitch);
           DDraw_Unlock_Back_Surface();
           } // end else

       } // end if < 8

    } // end for index

} // end Draw_Info


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

int Game_Main(void *parms)
{
// this is the workhorse of your game it will be called
// continuously in real-time this is like main() in C
// all the calls for you game go here!

int index; // looping var


// start the timing clock
Start_Clock();

// clear the drawing surface
DDraw_Fill_Surface(lpddsback, 0);

// lock back buffer and copy background into it
DDraw_Lock_Back_Surface();

// draw background
Draw_Bitmap16(&background_bmp, back_buffer, back_lpitch,0);

// unlock back surface
DDraw_Unlock_Back_Surface();

// read keyboard
DInput_Read_Keyboard();

// move ants and perform ai
Move_Ants();

// draw the food
Draw_Food();

// draw ants and animate image

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美久久久久久久久久| 亚洲激情图片小说视频| 国产精品久线观看视频| 午夜久久电影网| 成人久久视频在线观看| 日韩欧美国产三级| 亚洲高清在线精品| 成人av电影在线播放| 日韩欧美国产综合在线一区二区三区| 亚洲视频资源在线| 国产精品18久久久久久久网站| 欧美精品第1页| 一区二区三区四区蜜桃 | 精品毛片乱码1区2区3区| 亚洲精品国产视频| av一区二区三区四区| 国产午夜精品理论片a级大结局| 日韩 欧美一区二区三区| 在线观看成人免费视频| 老司机精品视频线观看86| 欧美在线播放高清精品| 中文字幕一区二区三区不卡| 国产伦精品一区二区三区视频青涩| 欧美精品在线一区二区三区| 亚洲精品v日韩精品| 91最新地址在线播放| 中文字幕av一区二区三区高 | 亚洲国产精品久久人人爱蜜臀| 国产成人综合视频| 精品国产一区二区精华| 老司机精品视频导航| 日韩一本二本av| 蜜臂av日日欢夜夜爽一区| 91精品视频网| 麻豆91精品91久久久的内涵| 欧美精品粉嫩高潮一区二区| 亚洲h精品动漫在线观看| 在线不卡a资源高清| 天天av天天翘天天综合网色鬼国产| 欧美三级三级三级| 蜜臀av性久久久久蜜臀aⅴ四虎 | 在线一区二区视频| 午夜久久久久久久久| 51久久夜色精品国产麻豆| 日本不卡在线视频| 欧美精品一区二区三区在线 | 久久久久久久久99精品| 大桥未久av一区二区三区中文| 国产蜜臀av在线一区二区三区| 成人黄色电影在线 | 欧美中文字幕一区二区三区亚洲| 亚洲综合小说图片| 欧美一级在线视频| 国产精品中文有码| 1024国产精品| 欧美情侣在线播放| 国产一区二区三区黄视频 | 久久久精品综合| 99九九99九九九视频精品| 亚洲人亚洲人成电影网站色| 在线视频你懂得一区| 日韩精品成人一区二区三区| 国产色一区二区| 一本久久a久久免费精品不卡| 亚洲亚洲精品在线观看| 精品国产网站在线观看| 成人18视频在线播放| 日本亚洲最大的色成网站www| 久久久国产精华| 欧美午夜在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 日韩欧美aaaaaa| 91天堂素人约啪| 捆绑紧缚一区二区三区视频| 最新热久久免费视频| 91精品国产综合久久久蜜臀粉嫩| 国产成人av电影在线观看| 五月天久久比比资源色| 欧美激情综合五月色丁香小说| 欧美日韩一区二区在线观看| 国产成人aaa| 日韩和的一区二区| 亚洲精品国产品国语在线app| 精品久久久久久久久久久院品网| 色系网站成人免费| 国产精品 欧美精品| 日本成人在线电影网| 亚洲国产日日夜夜| 亚洲欧洲在线观看av| 久久综合狠狠综合久久综合88| 欧美日韩久久不卡| 91原创在线视频| 国产精品一卡二卡| 日本欧美一区二区三区乱码 | 国产大陆a不卡| 亚洲18影院在线观看| 亚洲视频综合在线| 中文字幕av一区二区三区高| 久久综合九色综合欧美亚洲| 一区二区欧美在线观看| 色婷婷精品大在线视频| 日韩国产成人精品| 亚洲精品v日韩精品| 中文字幕av一区二区三区高| 久久久一区二区三区捆绑**| 欧美videos中文字幕| 91精选在线观看| 欧美精三区欧美精三区| 欧美裸体一区二区三区| 欧美色图一区二区三区| 91久久精品网| 欧洲av一区二区嗯嗯嗯啊| 91久久精品网| 欧美日韩激情在线| 欧美日韩国产精品成人| 欧美天堂亚洲电影院在线播放| 色婷婷av一区二区三区软件 | 欧美亚洲国产怡红院影院| 91婷婷韩国欧美一区二区| av网站免费线看精品| www.日韩精品| av中文字幕不卡| 91蝌蚪国产九色| 欧美性色黄大片| 欧美日韩国产一区二区三区地区| 欧美日韩精品免费| 91精品欧美久久久久久动漫| 欧美一二三四在线| 亚洲精品在线免费观看视频| 国产亚洲一二三区| ...中文天堂在线一区| 一区二区三区日韩欧美| 污片在线观看一区二区| 久久精品av麻豆的观看方式| 国产成人av一区二区| 欧美日韩亚洲综合一区| 日韩欧美国产小视频| 中文天堂在线一区| 一区二区三区国产| 奇米综合一区二区三区精品视频| 国内精品伊人久久久久影院对白| 国产成人精品三级麻豆| 91精彩视频在线| 日韩免费观看高清完整版 | 精品久久久久99| 国产日韩欧美a| 亚洲成人免费在线| 韩国av一区二区三区| 99精品视频一区二区三区| 欧美日韩视频在线一区二区| 精品国产乱码久久久久久闺蜜| 国产性天天综合网| 一区二区三区在线观看国产| 麻豆成人av在线| 99国产精品久久久| 欧美一区二区三区四区视频| 国产精品久久一卡二卡| 免费欧美日韩国产三级电影| 成人美女视频在线看| 欧美日韩精品欧美日韩精品| 久久精品视频免费观看| 亚洲成a人v欧美综合天堂| 国内精品国产成人国产三级粉色 | 国产成人高清在线| 欧美日本一区二区| 日韩一区日韩二区| 精品在线观看免费| 日本乱人伦aⅴ精品| 久久综合色之久久综合| 视频一区国产视频| 色综合天天综合在线视频| xfplay精品久久| 天天亚洲美女在线视频| 色吧成人激情小说| 国产日韩欧美不卡在线| 日韩电影免费在线看| 欧美少妇一区二区| 亚洲视频在线一区观看| 国产高清一区日本| 精品国产乱码久久久久久浪潮| 香蕉成人伊视频在线观看| 91麻豆福利精品推荐| 国产精品热久久久久夜色精品三区| 免费看日韩精品| 欧美区一区二区三区| 一区二区三区四区不卡视频| av电影一区二区| 中文字幕高清一区| 国产sm精品调教视频网站| 欧美成人一区二区三区在线观看| 亚洲国产毛片aaaaa无费看 | 成人小视频在线| 中文字幕欧美激情| 国产河南妇女毛片精品久久久| 精品裸体舞一区二区三区| 老司机一区二区| 欧美精品一区二区三区很污很色的| 日韩av中文字幕一区二区| 欧美一区二区三区思思人| 天天色综合天天|