Lạc đà Cup 2k18
Trong thử thách này, chúng tôi sẽ chơi trò chơi cờ bán phổ biến Camel Up.
Lạc đà lên! là một trò chơi cờ có người chơi đặt cược vào lạc đà để giành chiến thắng, thắng trò chơi hoặc thua trò chơi, đặt bẫy để ảnh hưởng đến chuyển động hoặc di chuyển một con lạc đà. Mỗi quyết định này thưởng cho bạn cơ hội nhận được một số tiền, đó là điều quyết định người chiến thắng. Người chơi nên sử dụng xác suất, cân nhắc trạng thái trò chơi và thuê nhà của đối thủ để đưa ra quyết định. Dưới đây là một đoạn video ngắn chỉ cho người chơi cách chơi .
Cách chơi
Đây là một ý tưởng sơ bộ về cách chơi. Xem một trong những video có thể hữu ích hơn vì chúng có hình ảnh :)
Đến lượt bạn, bạn có 4 lựa chọn.
- Di chuyển một con lạc đà. Điều này chọn một con lạc đà từ những người không di chuyển và di chuyển nó giữa 1-3 không gian. Bạn nhận được 1 xu. Vòng kết thúc khi tất cả năm con lạc đà đã di chuyển, sau đó tất cả chúng có thể di chuyển
- Đặt một cái bẫy. Điều này đi trên bảng cho đến khi kết thúc vòng. Bạn chọn bẫy + 1 / -1. Nếu một con lạc đà hoặc con lạc đà đậu trên nó, chúng di chuyển + 1 / -1 và bạn nhận được một đồng xu. Bạn không thể đặt bẫy trên ô vuông 0. Bạn có thể đặt bẫy ở nơi có lạc đà, mặc dù nó sẽ chỉ ảnh hưởng đến lạc đà đậu trên nó sau đó.
- Đặt cược thắng vòng. Bạn đặt cược vào một người chiến thắng vòng. Họ thắng bạn nhận được 5/3/2/1 tùy thuộc vào việc bạn có phải là 1/2 / 3 để đặt cược vào con lạc đà đó hay không.
- Người chiến thắng trò chơi / kẻ thua cuộc. Bạn đặt cược vào người sẽ ở vị trí đầu tiên hoặc cuối cùng vào cuối trò chơi. bạn nhận được 8/5/3/1/1 (tôi nghĩ) dựa trên việc bạn là 1/2 / 3/3 / etc để đặt cược vào con lạc đà đó
Ghi chú:
- Có 5 con lạc đà. Họ bắt đầu vào một vị trí ngẫu nhiên từ 0-2.
- Khi một con lạc đà được di chuyển (xem ở trên để biết điều gì kích hoạt điều này) chúng di chuyển 1-3 hình vuông. Nếu chúng được đặt trên một hình vuông với một con lạc đà khác, chúng sẽ được đặt "trên đỉnh" của con kia, tạo ra một chồng lạc đà. Nếu một con lạc đà là để di chuyển nó sẽ di chuyển tất cả các con lạc đà trên nó trên chồng lạc đà. Lạc đà ở đầu ngăn xếp được coi là dẫn đầu
- Nếu bạn rơi vào bẫy +1 (xem bên trên để biết điều gì kích hoạt điều này), bạn sẽ di chuyển một hình vuông về phía trước. Quy tắc xếp chồng tiêu chuẩn được áp dụng.
- Tuy nhiên, nếu bạn nhấn bẫy -1, bạn di chuyển một hình vuông về phía sau. Bạn đi dưới đống lạc đà trên hình vuông đó, nếu có.
- Trò chơi kết thúc khi một con lạc đà chạm vào quảng trường 16. Điều này ngay lập tức gọi kết thúc vòng và kích hoạt kết thúc trò chơi
- Đặt cược người thắng / thua người chơi chỉ có thể được thực hiện một lần cho mỗi con lạc đà. Tức là bạn không thể đặt cược vào một con lạc đà để thắng và thua trò chơi
Thử thách
Trong thử thách này, bạn sẽ viết chương trình Python 3 để chơi bốn người chơi, người chiến thắng sẽ chơi tất cả trò chơi vinh quang của Camel Up
Chương trình của bạn sẽ nhận được gamestate, bao gồm:
- camel_track : với vị trí của lạc đà
- bẫy_track : với vị trí của bẫy (mục nhập của biểu mẫu [bẫy_type (-1,1), người chơi])
- player_has_places_trap : một mảng cho bạn biết nếu người chơi đã đặt bẫy vòng này
- round_bets : một loạt các cược được đặt vòng này. Có dạng [lạc đà, người chơi]
- game_winner_bets / game_loser_bets : mảng các cược mà người chơi đặt cho lạc đà để thắng hoặc thua trò chơi. Bạn sẽ chỉ có thể thấy giá trị của những người chơi đã đặt cược chứ không phải người mà họ đặt cược. Bạn có thể biết bạn đặt cược vào ai. #of mẫu [lạc đà, người chơi]
- player_game_bets : một đại diện khác của game_winner_bets / game_loser_bets. Một lần nữa, chỉ nhìn vào các cược mà bot của bạn thực hiện.
- player_money_values : một mảng hiển thị số tiền mỗi người chơi có.
- camel_yet_to_move : Một mảng hiển thị nếu một con lạc đà đã di chuyển vòng này.
Trên đầu trò chơi, bạn cũng nhận được:
- người chơi : một số nguyên cho bạn biết bạn là số người chơi nào (0-3).
Cú pháp cho những gì người chơi nên trả lại là:
- [0]: Di chuyển lạc đà
- [1, bẫy_type, bẫy_location]: Đặt bẫy
- [2, projected_round_winner]: Đặt cược cho người chiến thắng vòng
- [3, projected_game_winner]: Đặt cược cho người chiến thắng trò chơi
- [4, projected_game_loser]: Đặt cược cho người thua trò chơi
Điều này nên được gói trong một phương thức di chuyển (người chơi, gamestate)
Chẳng hạn, đây là một người chơi sẽ đặt cược cho người chiến thắng vòng nếu họ ở vị trí cuối cùng. Nếu họ không thì họ sẽ đặt một cái bẫy trên một hình vuông ngẫu nhiên.
class Player1(PlayerInterface):
def move(player,g):
if min(g.player_money_values) == g.player_money_values[player]:
return [2,random.randint(0,len(g.camels)-1)]
return [1,math.floor(2*random.random())*2-1,random.randint(1,10)]
Trò chơi được chọn vì nhiều lý do: nó có một nhóm tùy chọn tương đối nhỏ để chọn (khoảng 20 lựa chọn mỗi lượt, dễ dàng thu hẹp xuống còn khoảng 3-4), các trò chơi ngắn và có yếu tố may mắn (làm cho nó vì vậy ngay cả các bot "xấu" cũng có thể giành chiến thắng).
Trò chơi
Người chạy giải đấu có thể được tìm thấy ở đây: lạc đà-cup . Chạy camelup.py
để chạy một giải đấu hoặc chức năng PlayGame để chạy trò chơi. Tôi sẽ giữ cho kho lưu trữ được cập nhật với các bài nộp mới. Chương trình ví dụ có thể được tìm thấy trong players.py
.
Một giải đấu bao gồm 100 trò chơi trên 10 người chơi (làm tròn số, vì vậy 14 người chơi có nghĩa là 200 trò chơi). Mỗi trò chơi sẽ có bốn người chơi ngẫu nhiên được chọn từ nhóm người chơi để điền vào bốn vị trí. Người chơi sẽ không thể tham gia trò chơi hai lần.
Chấm điểm
Người chiến thắng trong mỗi trò chơi là người chơi có nhiều tiền nhất vào cuối trò chơi. Trong trường hợp hòa vào cuối trò chơi, tất cả người chơi có số tiền tối đa sẽ được thưởng một điểm. Người chơi có nhiều điểm nhất khi kết thúc giải đấu sẽ thắng. Tôi sẽ đăng điểm khi tôi chạy các trò chơi.
Các cầu thủ được gửi sẽ được thêm vào hồ bơi. Tôi đã thêm ba bot thực sự ngu ngốc và một bot mà tôi đã thực hiện để bắt đầu.
Hãy cẩn thận
Không sửa đổi các đầu vào. Không cố gắng ảnh hưởng đến việc thực hiện bất kỳ chương trình nào khác, ngoại trừ thông qua hợp tác hoặc đào thoát. Không thực hiện một đệ trình hy sinh mà cố gắng nhận ra một đệ trình khác và mang lại lợi ích cho đối thủ bằng chi phí riêng của mình. Sơ hở tiêu chuẩn bị cấm.
Giới hạn thời gian thực hiện bởi bot của bạn là ~ 10 giây mỗi lượt.
Đệ trình không được lặp lại đệ trình trước đó.
Vui lòng không xem đặt cược game_winner hoặc game_loser từ những người chơi khác. Nó khá dễ làm nhưng vẫn gian lận.
Nếu bạn có bất kỳ câu hỏi, hãy hỏi.
Chiến thắng
Cuộc thi sẽ mở vô thời hạn, vì các bài nộp mới được đăng. Tuy nhiên, tôi sẽ tuyên bố một người chiến thắng (chấp nhận câu trả lời) dựa trên kết quả một tháng sau khi câu hỏi này được đăng (ngày 20 tháng 7).
Các kết quả
Player0: 12
Player1: 0
Player2: 1
Sir_Humpfree_Bogart: 87