ดาวน์โหลดโปรแกรมฟรี
       
   สมัครสมาชิก   เข้าสู่ระบบ
 
THAIWARE.COM | ไทยแวร์ถามตอบ
 
 
Add ตั้งคำถาม

แบ่งปัน
คนดู
5,826
 
ตอบ
2

0

 โหวตให้คะแนนดี  ดี  โหวตให้คะแนนแย่  แย่

ถามว่า >

ทำอย่างไรให้ฟังก์ชันนี้ฉลาดขึ้นกว่าที่เป็นอยู่ในปัจจุบัน

int SnakeDecision::snakeMove(SnakeResource *resource){



    int i;

    int mapx[4]={0,0,-1,1};

    int mapy[4]={-1,1,0,0};

    word localData = resource->tempData;    // ค่าในตัวแปรนี้สามารถแบ่งไปใช้ และนำไปเก็บไว้เพื่อใช้ตาต่อไปได้ครับ

    // ตัวอย่างการใช้งานตัวแปร localData

    int aa,bb;

    aa = localData &0xff;

    bb = localData >> 8;

    aa++;

    bb+=3;

    localData = (aa&0xff)|((bb&0xff)<<8);

    

    // จบตัวอย่างการใช้งานตัวแปร localData

    int direction;



    //ถ้ามีไอเท็มใกล้ตัว  กินซะ

    for(i=0;i<4;i++)

    {

        if(resource->getLocalMap(mapx[i],mapy[i])==I_SHORT) break;      //หดหางตัวเอง

        if(resource->getLocalMap(mapx[i],mapy[i])==I_SHORT_O) break;  //หดหางคนอื่น

        if(resource->getLocalMap(mapx[i],mapy[i])==I_DELAY) break;    //ทำให้ตัวเองช้า

        if(resource->getLocalMap(mapx[i],mapy[i])==I_DELAY_O) break;  //ทำให้ตัวเองเร็ว

    }

    // เลือกที่จะกินไอเท็ม  หากพบไอเท็ม  

    direction = i;

    if(i==4){  // ในกรณีที่ไม่พบไอเท็ม ตัดสินใจเดินต่อตามปกติ



    srand((int)time(NULL));

    direction=(rand()+(int)time(NULL))%4;

    if(resource->getLocalMap(0,-1)==resource->getOwnerColorCode()) direction = DOWN;

    if(resource->getLocalMap(0,1) ==resource->getOwnerColorCode()) direction = UP;

    if(resource->getLocalMap(-1,0)==resource->getOwnerColorCode()) direction = RIGHT;

    if(resource->getLocalMap(1,0) ==resource->getOwnerColorCode()) direction = LEFT;

    if((rand()+(int)time(NULL))%2){

        if((direction==DOWN) && (resource->getLocalMap(0,1) !=BACKGROUND)) direction=LEFT;

        if((direction==LEFT) && (resource->getLocalMap(-1,0)!=BACKGROUND)) direction=UP;

        if((direction==UP)   && (resource->getLocalMap(0,-1)!=BACKGROUND)) direction=RIGHT;

        if((direction==RIGHT)&& (resource->getLocalMap(1,0) !=BACKGROUND)) direction=DOWN;

        if((direction==DOWN) && (resource->getLocalMap(0,1) !=BACKGROUND)) direction=LEFT;

        if((direction==LEFT) && (resource->getLocalMap(-1,0)!=BACKGROUND)) direction=UP;

        if((direction==UP)   && (resource->getLocalMap(0,-1)!=BACKGROUND)) direction=RIGHT;

    }else{

        if((direction==DOWN) && (resource->getLocalMap(0,1) !=BACKGROUND)) direction=RIGHT;

        if((direction==RIGHT)&& (resource->getLocalMap(1,0) !=BACKGROUND)) direction=UP;

        if((direction==UP)   && (resource->getLocalMap(0,-1)!=BACKGROUND)) direction=LEFT;

        if((direction==LEFT) && (resource->getLocalMap(-1,0)!=BACKGROUND)) direction=DOWN;

        if((direction==DOWN) && (resource->getLocalMap(0,1) !=BACKGROUND)) direction=RIGHT;

        if((direction==RIGHT)&& (resource->getLocalMap(1,0) !=BACKGROUND)) direction=UP;

        if((direction==UP)   && (resource->getLocalMap(0,-1)!=BACKGROUND)) direction=LEFT;

    }

    }

    return (direction<<16)|localData;

}



ถามเมื่อ 12 พฤศจิกายน 2558 10:48:06


1

 โหวตให้คะแนนดี  ดี  โหวตให้คะแนนแย่  แย่

คะแนนโหวตสูงสุด
คำตอบที่ดีที่สุด (ถูกเลือกโดยเจ้าของคำถาม)

วิธีง่ายๆ เอา random ออก แล้วคำนวนว่าถ้าจะเดินหาเป้าหายให้เดินยังไง



ถ้า map โล่งๆ ก็ขยับแกน X ให้เท่าเป้าหมายก่อน แล้วค่อยขยับแกน Y ก็ได้



ถ้า Map ไม่โล่ง ลองประยุกต์จากพวก




  • A* (https://en.wikipedia.org/wiki/A*_search_algorithm)

  • Pathfinding ต่างๆ (https://en.wikipedia.org/wiki/Pathfinding)



ตอบเมื่อ 12 พฤศจิกายน 2558 15:13:13

Sort by Datetime เรียงตามลำดับเวลา


1

 โหวตให้คะแนนดี  ดี  โหวตให้คะแนนแย่  แย่

วิธีง่ายๆ เอา random ออก แล้วคำนวนว่าถ้าจะเดินหาเป้าหายให้เดินยังไง



ถ้า map โล่งๆ ก็ขยับแกน X ให้เท่าเป้าหมายก่อน แล้วค่อยขยับแกน Y ก็ได้



ถ้า Map ไม่โล่ง ลองประยุกต์จากพวก




  • A* (https://en.wikipedia.org/wiki/A*_search_algorithm)

  • Pathfinding ต่างๆ (https://en.wikipedia.org/wiki/Pathfinding)



ตอบเมื่อ 12 พฤศจิกายน 2558 15:13:13

0

 โหวตให้คะแนนดี  ดี  โหวตให้คะแนนแย่  แย่

ขอบคุณครับ



 



ตอบเมื่อ 13 พฤศจิกายน 2558 01:12:15

ตอบคำถาม 

ตอบคำถาม

 คุณจำเป็นต้องเป็นสมาชิกจึงจะสามารถตอบคำถามได้
เข้าสู่ระบบ | สมัครสมาชิก
หรือ