Deve Kupası 2k18
Bu meydan okumada, yarı popüler masa oyunu Camel Up'ı oynayacağız.
Deve Yukarı! turları kazanmak, oyunu kazanmak veya oyunu kaybetmek, hareketi etkilemek veya bir deveyi hareket ettirmek için tuzaklar kurmak için develere bahis yapan bir masa oyunudur. Bu kararların her biri, kazananı belirleyen şey olan para kazanma şansını size verir. Oyuncular kararlarını vermek için olasılık, oyun durumu değerlendirmeleri ve rakip kiracılık kullanmalıdır. İşte oyunculara nasıl oynayacaklarını gösteren kısa bir video .
Nasıl oynanır
İşte nasıl oynanacağı hakkında kabaca bir fikir. Videolardan birini izlemek daha yararlı olabilir çünkü görselleri var :)
Sırayla 4 seçeneğiniz var.
- Bir deveyi hareket ettirin. Bu hareket etmeyenlerden bir deve alır ve 1-3 boşluk arasında hareket ettirir. 1 madalyon al. Beş devenin hepsi hareket ettiğinde mermiler sona erer, sonra hepsi hareket edebilir
- Bir tuzak yerleştirin. Bu, turun sonuna kadar tahtada devam eder. + 1 / -1 tuzağını seçersiniz. Bir deve veya deve yığını üzerine düşerse + 1 / -1 taşırlar ve bir bozuk para alırsınız. 0 karesine bir tuzak yerleştiremezsiniz. Develerin bulunduğu yere bir tuzak yerleştirebilirsiniz, ancak yalnızca üzerine gelen develeri etkileyecektir.
- Yuvarlak kazanan bahis. Bir tur kazanan için bahis oynarsınız. Bu deveye bahis yapmak için 1. / 2. / 3. olmanıza bağlı olarak 5/3/2/1 alırsınız.
- Oyunu kazanan / kaybeden. Oyunun ilk kimin içinde veya sonunda kimin olacağı üzerine bir bahis oynarsınız. Bu deveye bahis yapmak için 1. / 2. / 3. / vb. olmanıza bağlı olarak 8/5/3/1/1 (sanırım) alıyorsunuz
Notlar:
- 5 deve var. 0-2 arasında rastgele bir pozisyonda başlarlar.
- Bir deve hareket ettiğinde (bunu tetikleyen şey için yukarıya bakın) 1-3 kare hareket ettirir. Eğer başka bir deve ile bir kareye yerleştirilirlerse, bir diğerinin üzerine konur ve deve yığını oluşturulur. Bir deve hareket edecekse, deve yığınındaki tüm develeri hareket ettirir. Yığının üstündeki deve kurşun olarak kabul edilir
- +1 tuzağına inerseniz (bunu neyin tetiklediğini görmek için yukarıya bakın) bir kareyi daha ileriye taşırsınız. Standart istifleme kuralları geçerlidir.
- Ancak -1 tuzağına vurursanız, bir kare geriye doğru hareket edersiniz. Sen git altında varsa o karede olan deve yığını.
- Bir deve 16 no'lu kareye çarptığında oyun sona erer.
- Oyun kazanan / kaybeden bahisler deve başına sadece bir kez yapılabilir. Yani oyunu kazanmak ve kazanmak için bir deveye bahse giremezsiniz
Meydan okuma
Bu meydan okumada, dört oyuncu oynamak için bir Python 3 programı yazacaksınız, kazanan Camel Up'ın tüm zafer oyununu alıyor
Programınız aşağıdakileri içeren oyun tablosunu alacaktır:
- camel_track : develerin konumlarıyla
- trap_track : tuzakların yeri ile ([trap_type (-1,1), oyuncu] formunun girişi)
- player_has_placed_trap : oyuncuların bu turda bir tuzak yapıp yapmadığını söyleyen bir dizi
- round_bets : Bu rauntta oynanan bahisler dizisi. Formun [deve, oyuncu]
- game_winner_bets / game_loser_bets : Develerin oyunu kazanması veya kaybetmesi için yapılan bahislerin dizileri. Bahis yaptıklarını değil , yalnızca bahis yapan oyuncuların değerini görebileceksiniz . Kime bahis oynadığınızı bilirsiniz. formun # sayısı [deve, oyuncu]
- player_game_bets : game_winner_bets / game_loser_bets'in başka bir temsili. Yine, sadece botunuzun yaptığı bahislere bakın.
- player_money_values : her oyuncunun sahip olduğu para miktarını gösteren bir dizi.
- camel_yet_to_move : Bir devenin bu turda hareket edip etmediğini gösteren bir dizi.
Oyun masasının üstünde şunları da elde edersiniz:
- player : hangi oyuncu numarasında olduğunuzu söyleyen bir tam sayı (0-3).
Oyuncuların geri dönmesi gereken sözdizimi:
- [0]: Deveyi Taşı
- [1, trap_type, trap_location]: Tuzağı Yerleştir
- [2, projected_round_winner]: Yuvarlak Kazanan Bahsi Yap
- [3, projected_game_winner]: Oyunu Kazanan Bahsi Yap
- [4, projected_game_loser]: Oyun Kaybeden Bahsi Yap
Bu bir move (oyuncu, gamestate) yöntemiyle sarılmalıdır
Örneğin, son sırada yer alırlarsa yuvarlak kazanan bir bahis yapacak bir oyuncu. Eğer değilse, rastgele bir kareye bir tuzak koyacaklar.
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)]
Oyun birkaç nedenden dolayı seçildi: seçim yapmak için nispeten küçük bir seçenek havuzuna sahiptir (tur başına yaklaşık 20 seçenek, genellikle yaklaşık 3-4'e kadar daraltılabilir), oyunlar kısadır ve bir şans unsuru vardır ( böylece "kötü" botlar bile kazanabilir).
Oynanış
Turnuva koşucusu burada bulunabilir: deve-up kupası . camelup.py
Bir turnuva çalıştırmak için çalıştırın veya oyunları çalıştırmak için PlayGame işlevi. Bu havuzu yeni gönderimlerle güncel tutacağım. Örnek programlar bulunabilir players.py
.
Bir turnuva 10 oyuncu başına 100 oyundan oluşur (yuvarlanır, böylece 14 oyuncu 200 oyun anlamına gelir). Her oyun, dört pozisyonu doldurmak için oyuncu havuzundan seçilen dört rastgele oyuncu olacaktır. Oyuncular oyunda iki kez yer alamazlar.
puanlama
Her oyunun galibi, oyunun sonunda en fazla paraya sahip olan oyuncudur. Bir oyunun sonunda beraberlik olması durumunda, azami para miktarına sahip tüm oyunculara bir puan verilir. Turnuvanın sonunda en çok puanı alan oyuncu kazanır. Oyunları çalıştırırken skorlar yayınlayacağım.
Gönderilen oyuncular havuza eklenir. Üç aptal bot ve başlamak için yaptığım bir bot ekledim.
Uyarılar
Girişlerde değişiklik yapmayın. İşbirliği veya kusur dışında başka bir programın yürütülmesini etkilemeye çalışmayın. Başka bir sunumu tanımaya ve rakibe kendi pahasına fayda sağlamaya çalışan fedakar bir sunum yapmayın. Standart boşluklar yasaklanmıştır.
Botunuzun aldığı zamanı tur başına ~ 10s olacak şekilde sınırlayın.
Gönderiler daha önceki gönderimleri çoğaltamaz.
Lütfen diğer oyuncuların game_winner veya game_loser bahislerini görüntülemeyin. Yapması oldukça kolay ama yine de hile yapıyor.
Herhangi bir sorunuz varsa, sormaktan çekinmeyin.
Kazanan
Yeni gönderiler gönderildikçe yarışma süresiz olarak açık kalacaktır. Ancak, bu sorunun gönderilmesinden bir ay sonra (20 Temmuz) elde edilen sonuçlara göre bir kazanan ilan edeceğim (bir cevap kabul ediyorum).
Sonuçlar
Player0: 12
Player1: 0
Player2: 1
Sir_Humpfree_Bogart: 87