aBOTcalypse
Thiết kế một bot để cạnh tranh trong một thử thách King-of-the-Hill! Đây là một phát lại của một trò chơi bot mặc định.
Bảng là 2D, giống như một trò chơi video cuộn bên (nhưng không có bất kỳ cuộn nào).
Một bot hợp lệ phải chấp nhận một đại diện chuỗi đa dòng của khu vực của bảng mà nó có thể nhìn thấy và đưa ra một động thái cho bot.
Cơ học
Đây là một game sinh tồn. Ngày tận thế đã đến, và chỉ còn lại bot (và một nguồn cung cấp đá vô tận được lưu trữ trong không gian võng ). Mỗi bot được cung cấp một vị trí bắt đầu ngẫu nhiên, ở độ cao 0. Trong một lần di chuyển nhất định, bot có thể nghỉ ngơi, di chuyển, ném đá hoặc thả đá. Bots có thể chia sẻ không gian với những tảng đá đứng yên, nhưng một con bot va chạm với một con bot khác hoặc một thiên thạch bị giết, cũng như một con bot bị đá ném trúng.
- Trọng lực: bot và đá phải nằm trên sàn của bảng hoặc trên đá khác; nghỉ ngơi trên một cái gì đó khác (không khí, sao băng, bot, v.v.) để lại một "không được hỗ trợ". Bot hoặc đá không được hỗ trợ sẽ rơi cho đến khi chúng được hỗ trợ; một cú rơi lớn hơn một khoảng trống sẽ giết chết một con bot và một con bot bên dưới một tảng đá hoặc bot rơi xuống cũng bị giết. Điều này có nghĩa là cố gắng di chuyển hoặc thả xuống sẽ chỉ hoạt động nếu bot hiện đang chia sẻ không gian với một tảng đá (nếu không bot / rock sẽ rơi xuống 1 khoảng trống). Một không gian có thể trở nên "không được hỗ trợ" nếu tảng đá bên dưới nó rơi xuống hoặc bị phá hủy bởi thiên thạch hoặc đạn .
- Thiên thạch: Mỗi lượt một thiên thạch rơi vào bảng từ trên xuống. Một thiên thạch có vận tốc 2 độ, với một góc ngẫu nhiên được chọn đồng đều trong phạm vi [-180,0] và vị trí x bắt đầu ngẫu nhiên. Thiên thạch rơi theo một đường thẳng dọc theo quỹ đạo đã cho cho đến khi chúng va phải thứ gì đó, tại thời điểm chúng biến mất. Lưu ý rằng làm tròn trong chuyển động của thiên thạch là 0 (theo trăn
int()
). - Projectiles: Một bot có thể chọn ném một hòn đá bất kỳ khoảng cách nào lên đến độ cao của nó. Một hòn đá ném di chuyển theo một đường thẳng cho đến khi nó chạm vào một thứ gì đó (tất cả trong một lượt, không giống như một thiên thạch; những hòn đá ném không xuất hiện trên bảng), ở độ dốc
- elevation / max distance
. Lưu ý rằng đá ném bắt đầu quỹ đạo của chúng tại x + - 1 hình vuông. Ví dụ: nếu bot ở độ cao 5 và ném trái khoảng cách 1, đá sẽ bắt đầu(x-1,5)
và kết thúc tại(x-2,0)
. Va chạm chỉ được kiểm tra theo các bướcdx=1
vàdy
được làm tròn về 0 (theo trănint()
).
Đầu vào
Mỗi bot có thể nhìn thấy một hình vuông 20 pixel theo mỗi hướng (khoảng cách Ch Quashev = 20), cho đến ranh giới của bảng. Có 8 ký tự khác nhau trong mỗi chuỗi đầu vào:
'#'
(ranh giới bảng)'.'
(không khí)'@
'(sao băng)'&'
(đá)'e'
/'s'
(bot kẻ thù, hoặc chính nó)'E'
/'S'
(bot kẻ thù, hoặc chính nó, chia sẻ không gian với một tảng đá)
Đây là một ví dụ đầu vào (ngắt dòng sẽ là \n
):
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............................#
..............@...............#
.....................E........#
.....................&........#
.....................&........#
.....................&........#
.....................&........#
...........@.........&........#
....................s&........#
###############################
Đầu ra
Có bốn hành động mà một bot có thể thực hiện mỗi lượt.
rest
(nghĩa đen là ngồi và không làm gì cả)move <direction>
di chuyển một không gian bot trong bất kỳ của bốn hướng,up
,down
,left
, hoặcright
. Chuyển động làm cho bot rơi xuống nếu không gian mới không được hỗ trợ bởi sàn hoặc đá (fall > 1 = bot.kill()
).drop <direction>
đặt ("giọt") một hòn đá theo hướng được chỉ định. Thả một tảng đá lên (tức là đặt một tảng đá vào hình vuông[bot_x, bot_y+1]
) hoặc sang một bên khiến nó rơi xuống cho đến khi được hỗ trợ (có thể rơi vào bot trong khidrop up
).drop down
đặt một hòn đá ở vị trí tương tự như bot, nếu chưa có đá ở đó.throw <direction> <distance>
ném một hòn đá theo cơ học "đạn" ở trên, với khoảng cách tối đa được chỉ định. Khoảng cách tối đa không liên quan để ném lên hoặc xuống - vật phóng va chạm với hình vuông bên dưới (chodown
) hoặc cố gắng va chạm với hình vuông bên trên (choup
) và sau đó với hình vuông của bot nếu nó không chạm vào bất cứ thứ gì (giết bot) .
Một bot trong cuộc thi phải xuất ra một chuỗi vô hướng với hành động của nó khi nhận được chuỗi đầu vào.
Giao diện
Một bot phải bao gồm một chương trình duy nhất có thể được gọi thông qua python 2 subprocess
. Bất kỳ lệnh nào sẽ được chỉ định và sẽ được lưu trong tệp được gọi command.txt
; trước khi trò chơi bắt đầu, bộ điều khiển sẽ thực hiện từng lệnh theo command.txt
thứ tự và sau đó lệnh cuối cùng sẽ được sử dụng để chuyển đầu vào cho bot từ đó trở đi.
Một bot có thể có một tệp lưu trữ duy nhất được gọi storage.txt
trong thư mục của nó; bot "Thrower mặc định" hiển thị một triển khai ví dụ, sử dụng json để lưu trạng thái của nó trong các lượt khác nhau. Ngoài ra, vui lòng bao gồm đầu ra gỡ lỗi ở chế độ chỉ ghi errlog.txt
, tôi sẽ chuyển qua trong trường hợp bot của bạn bị lỗi trong khi chạy. Tôi sẽ đảm bảo chạy một số thử nghiệm với mỗi bot, để thử và tìm bất kỳ lỗi nào trước đó.
Chấm điểm
Tổng số điểm của bot bằng với số lượt mà nó sống sót, được tích lũy qua các trò chơi X có độ dài tối đa Y. Hiện tại , X,Y = 10, 500
; nếu các bot kéo dài trong một thời gian dài, tôi sẽ tăng Y và nếu chúng tồn tại trong một thời gian ngắn, tôi sẽ tăng X.
Mã điều khiển được tìm thấy trong bộ điều khiển ; rất cám ơn @Nathan Merrill vì DDOS koth của anh ấy mà tôi đã điều chỉnh mã Communicator.
&&&\n&S&\n###
? Họ sẽ trở nên bất khả xâm phạm đối với các thiên thạch rơi xuống.