ข้ามไปยังเนื้อหา
ไทย

การส่งแผนที่

โบนัสแผนที่ (mapping bonus) คูณคะแนนของคุณได้สูงสุด 2.2 เท่า จึงมีค่ามาก วิธีรับโบนัสนี้มีดังนี้:

  1. ใส่แผนที่ลงในอาร์เรย์ ตามที่อธิบายไว้ในกติกาการทำแผนที่
  2. ส่งขนาดของอาร์เรย์ ตามด้วยอาร์เรย์ที่แปลงเป็นมิติเดียวในรูปข้อความ UTF-8 ที่คั่นด้วยเครื่องหมายจุลภาค
  3. ส่ง M เพื่อขอให้ประเมินแผนที่
  4. จบเกม Erebus จะนำโบนัสไปคิดกับคะแนนของคุณเมื่อเกมจบ
  • คุณส่งแผนที่ได้ทุกเมื่อระหว่างเกม แต่แผนที่จะถูกประเมินเพียงครั้งเดียว ข้อความ M ที่ส่งภายหลังจะถูกละเว้น ดังนั้นให้ส่งเมื่อแผนที่สมบูรณ์ที่สุดเท่าที่จะทำได้แล้ว
  • ตรวจสอบให้แน่ใจว่ายังมีเวลาเหลือ หากเกมจบก่อนที่คุณจะส่ง M ก็จะไม่มีแผนที่ให้ประเมิน
  • คุณไม่จำเป็นต้องส่ง E เพื่อรับโบนัส เพราะโบนัสจะถูกนำไปคิดด้วยเมื่อหมดเวลา แต่ E คือวิธีรับโบนัสออกจากสนาม (exit bonus) และโบนัสนั้นจะถูกบวกก่อนนำโบนัสแผนที่ไปคิด
  • แผนที่ต้องมีช่องเริ่มต้น (5) ซึ่งใช้ในการจัดแนวให้ตรงกับคำตอบที่ถูกต้อง หากไม่มี ก็จะประเมินแผนที่ไม่ได้
  • ผลลัพธ์จะแสดงเป็น Map Correctness ในประวัติของหน้าต่างควบคุม หากคุณได้ Map scoring error ในคอนโซลของ Webots ให้ตรวจสอบรูปแบบของคุณ

ตัวอย่างด้านล่างส่งคำตอบที่ถูกต้องของ world1.wbt ซึ่งมีประโยชน์ในการตรวจสอบโค้ดการสื่อสารของคุณ หากรันตอนเริ่มเกม เกมจะจบทันทีและคะแนนจะยังเป็น 0 เพราะตัวคูณไม่มีคะแนนให้คูณ

from controller import Robot
import numpy as np
import struct
timeStep = 32 # Set the time step for the simulation
robot = Robot()
emitter = robot.getDevice("emitter") # Retrieve the emitter by device name
while robot.step(timeStep) != -1:
#STEP1 Putting the map into an array
## Answer map array for world1.wbt in v26. Your robot has to build this array by itself.
subMatrix = np.array([
['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'],
['1', '5', '0', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '2', '0', '2', '1', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '3', '0', '3', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1'],
['1', '5', '0', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '2', '0', '2', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '3', '0', '3', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', 'S'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '1', '1', '1', '1', '1', '0', '0', '0', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', 'b', '0', 'b', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1'],
['F', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', 'b', '0', 'b', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '1', '0', '0', '0', '1', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', 'p', '0', 'p', '1', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '1', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', 'p', '0', 'p', '1', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '1', '1', '1', '1', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', 'U', '0', '0', '0', '0', '0', '1', '1', '1', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '1', '1', 'H', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '1', '1', '1', '0', '0', '0', '0', '1'],
['P', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '4', '0', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1'],
['1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '4', '0', '4', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1'],
['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1']
])
#STEP2 Flatten the array with comma separators, then encode it with utf-8 and send it
## Get shape
s = subMatrix.shape
## Get shape as bytes
s_bytes = struct.pack('2i',*s)
## Flattening the matrix and join with ','
flatMap = ','.join(subMatrix.flatten())
## Encode
sub_bytes = flatMap.encode('utf-8')
## Add togeather, shape + map
a_bytes = s_bytes + sub_bytes
## Send map data
emitter.send(a_bytes)
#STEP3 Send map evaluate request
map_evaluate_request = struct.pack('c', b'M')
emitter.send(map_evaluate_request)
#STEP4 Send an Exit message to end the game
## Exit message
exit_mes = struct.pack('c', b'E')
emitter.send(exit_mes)
robot.step(timeStep) # Step once, so that the messages are sent
break

ประวัติของหน้าต่างควบคุมหลังจากรันตัวอย่าง: Map Correctness 100.0%

ตัวอย่าง MapScorerExample.py ในโฟลเดอร์ player_controllers ของรีลีส Erebus ก็ทำงานในลักษณะเดียวกัน