Scriptbot Warz!
Kết quả là và Assassin là nhà vô địch của chúng tôi, chiến thắng 2/3 trận đấu! Cảm ơn tất cả những người đã gửi Scriptbots của họ! Đặc biệt cảm ơn sừng cho BestOpportunityBot đã hiển thị đường dẫn tuyệt vời và sử dụng đầy đủ tất cả các tùy chọn hành động.
Bản đồ 1
Assassin đã loại BestOpportunityBot từ rất sớm và phần còn lại của trận đấu khá nhàm chán. Chơi chi tiết tại đây.
- Sát thủ: 10 HP, 10 sát thương, 3 sát thương
- Bộ tránh v3: 10 HP, 0 sát thương, 0 sát thương
- Ăn xong: 10 HP, 0 sát thương, 0 sát thương
- BestOpportunityBot: 0 HP, 3 sát thương, 10 sát thương
Bản đồ 2
BestOpportunityBot đã làm hầu hết các công việc trong trận đấu này, nhưng Assassin cuối cùng đã có thể đưa anh ta ra ngoài. Chơi chi tiết tại đây.
- Sát thủ: 2 HP, 10 sát thương, 9 sát thương
- BestOpportunityBot: 0 HP, 32 sát thương, 10 sát thương
- Công cụ tránh v3: 0 HP, 0 sát thương, 12 sát thương
- Ăn xong: 0 HP, 0 sát thương, 11 sát thương
Bản đồ 3
BestOpportunityBot đã đẩy mọi người vào bẫy trong trận đấu này. Rất tuyệt. Chơi chi tiết tại đây.
- BestOpportunityBot: 10 HP, 30 sát thương, 0 sát thương
- Sát thủ: 0 HP, 0 sát thương gây ra, 0 sát thương gây ra
- Ăn xong: 0 HP, 0 sát thương, 0 sát thương
- Bộ tránh v3: 0 HP, 0 sát thương, 0 sát thương
Cảm ơn câu trả lời của bạn! Vì chỉ có 4 Scriptbots, chúng tôi đang từ bỏ các kế hoạch giải đấu cho ba trận đấu miễn phí cho tất cả các trận đấu, một trận đấu trên mỗi bản đồ bên dưới. Các scriptbot với kỷ lục chiến thắng cao nhất chiến thắng. Trong trường hợp hòa, chúng ta sẽ rơi vào cái chết bất ngờ, trong đó scriptbot phá vỡ cà vạt trước sẽ thắng.
Nhiệm vụ của bạn, nếu bạn chọn chấp nhận nó, là viết mã Scriptbot có thể đi qua bản đồ ASCII và tiêu diệt đối thủ của nó. Mỗi trận chiến sẽ có hình thức của một trò chơi theo lượt bắt đầu theo thứ tự ngẫu nhiên, trong đó mỗi Scriptbot có cơ hội sử dụng điểm năng lượng (EP) để hành động. Tập lệnh GameMaster sẽ cung cấp đầu vào và giải thích đầu ra từ mỗi Scriptbot.
Môi trường
Mỗi Scriptbot được chứa trong thư mục riêng của nó, nơi nó có thể đọc từ map
và stats
các tệp và đọc / ghi vào data
tệp. Các data
tập tin có thể được sử dụng để lưu trữ bất kỳ thông tin liên tục mà bạn có thể thấy hữu ích.
Tập tin thống kê
Các stats
tập tin chứa thông tin về đối thủ của bạn và được định dạng như sau. Mỗi người chơi được đại diện trên một hàng riêng biệt. Cột đầu tiên là ID người chơi ( @
có nghĩa là bạn). Cột thứ hai là sức khỏe của người chơi đó.
1,9HP
@,10HP
3,9HP
4,2HP
Tệp bản đồ
Các map
tập tin có thể trông giống như thế này ...
####################
# # # #
# 1 # # 2 #
# #
### ###
# #
# # #
# # ! #
# # #
# !#### #
# ####! #
# # #
# ! # #
# # #
# #
### ###
# #
# 3 # # @ #
# # # #
####################
... hoặc cái này ...
######################################
# # 1 # @ #
# # # #! #
# # # #### #
# # # # # !#! #
# # # # # ##### #
# ### # #### # # #
# # #! ### # #
# ###### # # # ##### #
# #! # ###### # !# #
# ### # # # #
# # 2 # # 4 # #
######################################
... hoặc cái này ...
###################
###!!!!!!#!!!!!!###
##! !##
#! 1 ! 2 !#
#! ! !#
#! !#
#! !#
#! !!! !#
## !! !!! !! ##
#! !!! !#
#! !#
#! !#
#! ! !#
#! 3 ! @ !#
##! !##
###!!!!!!#!!!!!!###
###################
... Hoặc nó có thể trông hoàn toàn khác nhau. Dù bằng cách nào, các ký tự được sử dụng và ý nghĩa của chúng sẽ vẫn giống nhau:
#
Một bức tường, không thể vượt qua và không thể xuyên thủng.1
,2
,3
... Một số đại diện cho một cầu thủ đối phương. Những con số này tương ứng với ID người chơi trongstats
tệp.!
Một cái bẫy. Scriptbots di chuyển đến các địa điểm này sẽ chết ngay lập tức.@
Vị trí Scriptbot của bạn.Không gian mở mà bạn có thể tự do di chuyển trong.
Trò chơi
Tập lệnh GameMaster sẽ chỉ định một thứ tự bắt đầu ngẫu nhiên cho Scriptbots. Các Scriptbots sau đó được gọi theo thứ tự này trong khi chúng vẫn còn sống. Scriptbots có 10 Điểm Sức khỏe (HP) và bắt đầu với 10 Điểm Năng lượng (EP) mỗi lượt, chúng có thể sử dụng để di chuyển hoặc tấn công. Khi bắt đầu mỗi lượt, Scriptbot sẽ hồi máu cho một HP hoặc được cấp thêm một EP nếu đã ở mức 10 HP (do đó, việc chạy có thể là chiến lược khả thi vào các thời điểm).
Trận chiến kết thúc khi chỉ có một Scriptbot sống sót hoặc khi 100 lượt đã trôi qua. Nếu nhiều Scriptbots còn sống khi kết thúc trận chiến, vị trí của chúng được xác định dựa trên các tiêu chí sau:
- Sức khỏe nhất.
- Hầu hết các thiệt hại gây ra.
- Hầu hết thiệt hại thực hiện.
Đầu vào Scriptbot
GameMaster sẽ in bản đồ chiến đấu thành một tệp có tên map
Scriptbot sẽ có quyền truy cập để đọc từ đó. Bản đồ có thể có bất kỳ hình thức nào, vì vậy điều quan trọng là Scriptbot có thể diễn giải nó. Scriptbot của bạn sẽ được gọi với một tham số cho biết EP. Ví dụ...
:> example_scriptbot.py 3
Scriptbot sẽ được gọi cho đến khi nó dành tất cả EP hoặc tối đa 10 11 lần. Các tập tin bản đồ và số liệu thống kê được cập nhật trước mỗi lần gọi.
Đầu ra Scriptbot
Scriptbots nên xuất hành động của họ thành mập mạp. Một danh sách các hành động có thể như sau:
MOVE <DIRECTION> <DISTANCE>
Chi phí 1 EP mỗi
DISTANCE
. CácMOVE
lệnh di chuyển Scriptbot của bạn xung quanh bản đồ. Nếu có thứ gì đó cản đường như một bức tường hoặc một Scriptbot khác, GameMaster sẽ di chuyển Scriptbot của bạn càng xa càng tốt. NếuDISTANCE
số EP lớn hơn của Scriptbot được đưa ra, GameMaster sẽ di chuyển Scriptbot cho đến khi hết EP.DIRECTION
có thể là bất kỳ hướng la bàn củaN
,E
,S
, hoặcW
.PUSH <DIRECTION> <DISTANCE>
Chi phí 1 EP mỗi
DISTANCE
. CácPUSH
lệnh cho phép một Scriptbot để di chuyển Scriptbot khác. Scriptbot ban hành lệnh phải được đặt trực tiếp bên cạnh Scriptbot đang được đẩy. Cả hai Scriptbots sẽ di chuyển theo hướng được chỉ định nếu không có đối tượng chặn Scriptbot bị đẩy.DIRECTION
vàDISTANCE
giống như đối vớiMOVE
lệnh.ATTACK <DIRECTION>
Chi phí một EP. Các
ATTACK
lệnh giao dịch 1 thiệt hại cho bất kỳ Scriptbot trực tiếp bên cạnh Scriptbot ban hành và theo hướng quy định.DIRECTION
cũng giống như đối vớiMOVE
lệnh.PASS
Kết thúc lượt của bạn.
Ngôn ngữ được hỗ trợ
Để giữ điều này hợp lý với tôi, tôi sẽ chấp nhận các ngôn ngữ sau:
- Java
- Node.js
- Con trăn
- PHP
Bạn bị giới hạn trong các thư viện thường được đóng gói với các ngôn ngữ của bạn. Vui lòng không làm cho tôi xác định vị trí các thư viện tối nghĩa để làm cho mã của bạn hoạt động.
Trình và đánh giá
Gửi mã nguồn Scriptbot của bạn dưới đây và đặt cho nó một cái tên hay! Vui lòng liệt kê phiên bản của ngôn ngữ bạn đã sử dụng. Tất cả các Scriptbots sẽ được xem xét cho tomfoolery, vì vậy vui lòng bình luận tốt và không làm xáo trộn mã của bạn.
Bạn có thể gửi nhiều mục, nhưng vui lòng tạo chúng cho các mục hoàn toàn độc đáo và không phải là phiên bản của cùng một mục. Chẳng hạn, bạn có thể muốn mã hóa bot Zerg Rush và bot Gorilla Warfare. Tốt rồi. Không đăng Zerg Rush v1, Zerg Rush v2, v.v.
Vào ngày 7 tháng 11, tôi sẽ thu thập tất cả các câu trả lời và những câu trả lời đánh giá ban đầu sẽ được thêm vào khung giải đấu. Nhà vô địch nhận được câu trả lời được chấp nhận. Khung lý tưởng được hiển thị dưới đây. Vì có thể sẽ không có chính xác 16 mục, một số dấu ngoặc có thể chỉ có ba hoặc thậm chí hai bot. Tôi sẽ cố gắng làm cho khung càng công bằng càng tốt. Bất kỳ sự thiên vị cần thiết nào (trong trường hợp cần một tuần tạm biệt) sẽ được trao cho các bot đã được gửi trước.
BOT01_
BOT02_|
BOT03_|____
BOT04_| |
|
BOT05_ |
BOT06_|___ |
BOT07_| | |
BOT08_| | |_BOT ?_
|___BOT ?_|
BOT09_ ___BOT ?_|___CHAMPION!
BOT10_| | _BOT ?_|
BOT11_|__| |
BOT12_| |
|
BOT13_ |
BOT14_|____|
BOT15_|
BOT16_|
Hỏi và đáp
Tôi chắc chắn tôi đã bỏ lỡ một số chi tiết, vì vậy hãy đặt câu hỏi!
Chúng tôi có thể tin tưởng rằng một tệp bản đồ luôn được bao quanh bởi các ký hiệu # không? Nếu không, điều gì xảy ra trong trường hợp bot cố gắng rời khỏi bản đồ? - BrainSteel
Có, bản đồ sẽ luôn bị giới hạn bởi # và Scriptbot của bạn sẽ bắt đầu bên trong các giới hạn này.
Nếu không có bot hiện diện theo hướng được chỉ định trong lệnh PUSH, thì lệnh này hoạt động như thế nào? - BrainSteel
GameMaster sẽ không làm gì cả, zero EP sẽ được chi tiêu và Scriptbot sẽ được gọi lại.
EP không sử dụng tích lũy? - frageum
Không. Mỗi Scriptbot sẽ bắt đầu vòng / lượt với 10 EP. Bất kỳ EP không chi tiêu sẽ lãng phí.
Tôi nghĩ rằng tôi đã có nó, nhưng chỉ cần làm rõ: với bot A và B, là thứ tự của các sự kiện A @ 10EP-> DI CHUYỂN MAP_UPDATE B @ 10EP-> PUSH MAP_UPDATE A @ 9EP-> ATTACK MAP_UPDATE B @ 9EP-> ATTACK ... hoặc A @ 10EP-> DI CHUYỂN A @ 9EP-> ATTACK ... MAP_UPDATE B @ 10EP-> PUSH B @ 9EP-> ATTACK ... MAP_UPDATE? Nói cách khác, tất cả hành động trong một nguyên tử vòng truy vấn bộ điều khiển-bot? Nếu vậy, tại sao vòng lặp? Tại sao không trả lại một tệp duy nhất với tất cả các hành động sẽ được hoàn thành? Nếu không, các bot sẽ phải viết ra các tệp trạng thái của riêng chúng để theo dõi các chuỗi đa hành động. Tệp bản đồ / số liệu thống kê sẽ chỉ có hiệu lực trước hành động đầu tiên. - COTO
Ví dụ thứ hai của bạn là gần, nhưng không hoàn toàn đúng. Trong một lượt chơi, Scriptbot được gọi liên tục cho đến khi EP của họ được sử dụng, hoặc tối đa là 11 lần. Các tập tin bản đồ và số liệu thống kê được cập nhật trước mỗi lần gọi. Vòng lặp rất hữu ích trong trường hợp bot cung cấp đầu ra không hợp lệ. GameMaster sẽ xử lý đầu ra không hợp lệ và liên kết lại bot, tạo cơ hội cho bot sửa lỗi.
bạn sẽ phát hành tập lệnh GameMaster để thử nghiệm chứ? - IchBinKeinBaum
Kịch bản GameMaster sẽ không được phát hành. Tôi sẽ khuyến khích bạn tạo một tệp bản đồ và số liệu thống kê để kiểm tra hành vi của bot.
Nếu robotA đẩy robotB vào bẫy, robotA có được ghi điểm "sát thương" bằng với sức khỏe hiện tại của robotB không? - Mike Sweeney
Vâng đó là một ý tưởng tốt. Một bot sẽ được cấp điểm sát thương tương đương với sức khỏe của bất kỳ bot nào mà nó đẩy vào bẫy.
#
và Scriptbot của bạn sẽ bắt đầu bên trong các giới hạn này.
map
tập tin luôn được bao quanh bởi#
các biểu tượng? Nếu không, điều gì xảy ra trong trường hợp bot cố gắng rời khỏi bản đồ?