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

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

?? demo12_7.cpp

?? 一本外國人寫的關于3D游戲編程的書的源碼
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
               // 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_BOB(&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_Pixel(px+124+x+1,py+y+1, intensity_to_index[color_intensity], 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_Pixel(px+124+x+1,py+y+1, active_pixel, back_buffer, back_lpitch);
            } // end for

        DDraw_Unlock_Back_Surface();
       } // end if
       else
           // draw flat line :)
           {
           DDraw_Lock_Back_Surface();
           HLine(px+124,px+124+18, py+9, 249, 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_Bitmap(&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 imagery
Draw_Ants(); 

// draw info
Draw_Info();


sprintf(buffer,"Artificial Intelligence Memory Demo. Press <ESC> to Exit.");
Draw_Text_GDI(buffer,8, 8,RGB(255,255,255),lpddsback);

// flip the surfaces
DDraw_Flip();

// sync to 30ish fps
Wait_Clock(30);

// check of user is trying to exit
if (KEY_DOWN(VK_ESCAPE) || keyboard_state[DIK_ESCAPE])
    {
    PostMessage(main_window_handle, WM_DESTROY,0,0);

    // stop all sounds
    DSound_Stop_All_Sounds();

    // do a screen transition
    Screen_Transitions(SCREEN_DARKNESS,NULL,0);

    } // end if

// return success
return(1);

} // end Game_Main

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
裸体一区二区三区| 欧美一区二区人人喊爽| 欧美大片免费久久精品三p| 国产精品丝袜在线| 天天操天天色综合| 91麻豆免费观看| 日本一区二区视频在线观看| 亚洲福利视频导航| 99国产一区二区三精品乱码| 日韩精品一区二区三区中文精品| 亚洲一区二区在线观看视频 | hitomi一区二区三区精品| 欧美日韩国产天堂| 亚洲精品高清视频在线观看| 从欧美一区二区三区| 精品久久人人做人人爰| 免费在线欧美视频| 日本韩国一区二区三区视频| 国产精品家庭影院| 国产精品1区2区| 久久网站最新地址| 激情综合色播五月| 精品av久久707| 国产裸体歌舞团一区二区| 国产精品久久一卡二卡| 久色婷婷小香蕉久久| 在线不卡的av| 水蜜桃久久夜色精品一区的特点| 欧美性xxxxx极品少妇| 一区二区三区中文免费| 欧美亚洲综合另类| 亚洲国产一区视频| 7777精品伊人久久久大香线蕉完整版| 一区二区三区不卡视频| 欧美午夜电影一区| 午夜成人在线视频| 欧美一区二区免费| 九九精品一区二区| 国产欧美视频在线观看| av中文一区二区三区| 亚洲欧美韩国综合色| 欧美日韩免费高清一区色橹橹| 夜夜嗨av一区二区三区| 制服丝袜亚洲色图| 久99久精品视频免费观看| 国产日韩精品一区二区三区 | 麻豆国产精品一区二区三区 | 日韩精品一区二区在线观看| 国产美女精品一区二区三区| 国产欧美精品国产国产专区| 成人福利电影精品一区二区在线观看| 亚洲欧美在线视频观看| 精品视频色一区| 国产一区二区视频在线| 欧美韩日一区二区三区四区| 欧美一级免费观看| 国产一区二区毛片| 亚洲精品国产精品乱码不99| 欧美一区二区视频网站| 国产福利91精品一区| 亚洲欧美视频一区| 日韩欧美激情四射| www.一区二区| 日本中文字幕不卡| 国产日产精品一区| 在线成人av网站| 成人精品一区二区三区四区 | 九九精品一区二区| 亚洲男同性恋视频| www国产成人| 欧美日韩午夜在线视频| 国产成人免费视频网站| 一区二区三区在线高清| 久久亚洲综合av| 91福利国产成人精品照片| 久久精品国产**网站演员| 中文字幕在线不卡一区| 日韩视频免费直播| 色成年激情久久综合| 国产乱码精品一区二区三区忘忧草 | 亚洲国产精品精华液ab| 国产亚洲精品资源在线26u| bt欧美亚洲午夜电影天堂| 久久国产精品色婷婷| 亚洲香蕉伊在人在线观| 日本一区二区三区高清不卡| 91精品国产福利在线观看| 97久久超碰国产精品电影| 国模娜娜一区二区三区| 日日夜夜精品视频免费 | 精品精品欲导航| 欧美日韩国产美| 欧美亚一区二区| 99久久精品免费| 成人福利在线看| 岛国精品一区二区| 国产精一区二区三区| 麻豆成人久久精品二区三区红| 夜夜嗨av一区二区三区四季av | 免费高清不卡av| 亚洲综合视频网| 亚洲精品网站在线观看| 中文一区二区完整视频在线观看| 日韩三级精品电影久久久| 欧美三级蜜桃2在线观看| 日本精品视频一区二区| 色综合久久久久久久久| 99精品欧美一区二区三区小说 | 成人免费在线播放视频| 国产欧美精品日韩区二区麻豆天美| 精品国产乱码久久久久久免费 | 国产精品电影一区二区| 国产精品妹子av| 国产精品乱码妇女bbbb| 国产精品国产精品国产专区不蜜| 国产亚洲一区二区三区| 99精品视频在线免费观看| av一本久道久久综合久久鬼色| 国产成人精品一区二区三区网站观看| 国产美女娇喘av呻吟久久| 经典三级一区二区| 国产乱码精品一品二品| 国产成人综合亚洲91猫咪| 国产.精品.日韩.另类.中文.在线.播放| 国产一区二区在线观看免费| 国产一区二区三区黄视频| 成人性色生活片免费看爆迷你毛片| 国产精品一二三区| 95精品视频在线| 欧美色综合久久| 日韩欧美国产午夜精品| 国产亚洲成年网址在线观看| 国产精品久久久久一区| 秋霞午夜鲁丝一区二区老狼| 日本欧美一区二区在线观看| 精品中文字幕一区二区| 丁香六月综合激情| 一本大道av一区二区在线播放| 在线视频你懂得一区二区三区| 欧美色网一区二区| 精品黑人一区二区三区久久| 国产色爱av资源综合区| 一区二区三区在线影院| 日韩高清中文字幕一区| 国产麻豆91精品| 色婷婷久久一区二区三区麻豆| 91精品国产色综合久久久蜜香臀| 久久嫩草精品久久久精品一| 亚洲精品第1页| 极品少妇xxxx偷拍精品少妇| 91一区二区在线| 欧美大片日本大片免费观看| 国产精品久久久久精k8| 日韩成人一区二区三区在线观看| 国产jizzjizz一区二区| 欧美酷刑日本凌虐凌虐| 国产精品理论在线观看| 日韩成人免费看| 97久久精品人人澡人人爽| 日韩精品一区二区三区中文不卡| 亚洲色图制服诱惑| 国产综合久久久久久鬼色 | 91免费在线视频观看| 日韩天堂在线观看| 亚洲狠狠丁香婷婷综合久久久| 久草精品在线观看| 欧美老肥妇做.爰bbww| 亚洲欧洲99久久| 国产乱子轮精品视频| 欧美日韩午夜在线| 亚洲激情图片一区| 成人精品一区二区三区四区| 亚洲精品在线三区| 五月天精品一区二区三区| av动漫一区二区| 欧美激情在线一区二区| 精品系列免费在线观看| 欧美日韩国产另类一区| 亚洲免费在线观看视频| 波多野结衣91| 欧美激情艳妇裸体舞| 国产精品综合久久| 精品少妇一区二区三区免费观看| 亚洲高清不卡在线观看| 色av成人天堂桃色av| 中文字幕中文字幕一区二区| 国产福利精品导航| 久久你懂得1024| 久88久久88久久久| 精品国产sm最大网站免费看| 久久精品国产亚洲一区二区三区| 欧美日本一区二区三区| 亚洲va韩国va欧美va| 欧美日韩精品欧美日韩精品| 亚洲国产精品尤物yw在线观看| 在线一区二区三区做爰视频网站| 亚洲天天做日日做天天谢日日欢| 成人av免费观看| 亚洲欧美韩国综合色| 欧美三区在线观看|