Die Idee dieser Herausforderung ist einfach: Erstellen Sie einen Bot, um das Kartenspiel Euchre zu spielen.
Für diejenigen , die sie nicht wissen bereits, ich habe die Regeln Euchre geschrieben hier , da sie auf diese Herausforderung betreffen.
Ich empfehle die Verwendung von Python oder ähnlichem, aber die einzige wirkliche Einschränkung besteht darin, dass es mit dem Controller-Code kompatibel sein muss
Eingang:
Ihr Euchre-Bot erhält je nach aktueller Phase des Spiels oder der Runde unterschiedliche Eingaben. Im Allgemeinen erhalten Sie die Spielphase in der ersten Zeile, gefolgt von einem Komma und der Anzahl der Punkte, die Ihr Team hat, sowie den relevanten Daten in den folgenden Zeilen.
Chronologisch wird Ihr Bot in der folgenden Reihenfolge eingegeben:
Ordering Trump:
js,ah,qc,ts,jc // the cards in your hand
2 // number of points your team has
0 // number of tricks your team has taken
ordering // the phase of the game
th // the turned up card
p,p // each previous player’s decision
Naming Trump:
js,ah,qc,ts,jc // the cards in your hand
2 // number of points your team has
0 // number of tricks your team has taken
naming // the phase of the game
p // each previous player’s decision
Dealer Discarding:
js,ah,qc,ts,jc // the cards in your hand
2 // number of points your team has
0 // number of tricks your team has taken
discard // the phase of the game
th // the card you will pick up
Going alone:
js,ah,qc,ts,jc // the cards in your hand
2 // number of points your team has
0 // number of tricks your team has taken
alone // the phase of the game
h // the trump suit
n,n // each previous player’s decision
Your turn:
js,ah,qc,ts,jc // the cards in your hand
2 // number of points your team has
0 // number of tricks your team has taken
turn // the phase of the game
h // the trump suit
td,8h,p // each previous player’s card
Trick data:
// the cards in your hand (none, since this happens at the end of a trick)
2 // number of points your team has
1 // number of tricks your team has taken
trick // the phase of the game
0 // the index of the following list that is your card
js,tc,4d,js // the cards played during the trick in the order they were played
Ausgabe:
Ihr Euchre-Bot hat je nach aktueller Phase des Spiels oder der Runde unterschiedliche Ausgaben.
Ordering Trump:
p //for pass
OR
o //for order up
Naming Trump:
p //for pass
OR ANY OF
c,s,h,d //the suit you want to name
Going alone:
n // no
OR
y // yes
Your turn:
js //the card you want to play
Wertung:
Die Punktzahl Ihres Bots ist die Gesamtzahl der Spiele, die er gewinnt.
Ihr Bot spielt gegen jeden anderen Bot und ist immer mit einer Kopie von sich selbst verbunden.
Anmerkungen:
Hier ist eine einfache Vorlage in Python2.7:
#!/usr/bin/python2.7
import sys
data = sys.stdin.readlines()
hand = data[0].strip().split(',') # Hand as a list of strings
points = int(data[1]) # Number of points
tricks = int(data[2]) # Number of tricks
out = ''
if data[3] == 'ordering':
card = data[4] # The upturn card
prev = data[5].strip().split(',') # The previous player's decisions as a list
# Ordering logic
out = # 'o' or 'p'
elif data[3] == 'naming':
prev = data[4].strip().split(',') # The previous player's decisions as a list
# Naming logic
out = # 'p', 'h', 's', 'c', or 'd'
elif data[3] == 'discard':
card = data[4] # The card you'll take
# Discarding logic
out = # The card you want to discard
elif data[3] == 'alone':
trump = data[4] # The trump suit
prev = data[5].strip().split(',') # The previous player's decisions as a list
# Alone logic
out = # 'y' for yes, 'n' for no
elif data[3] == 'turn':
trump = data[4] # The trump suit
prev = data[5].strip().split(',')
# Turn logic
out = # The card you want to play
elif data[3] == 'trick':
trump = data[5]
cards = data[6].strip().split(',')
my_card = cards[int(data[4])]
# Data logic
print(out)
Es wird immer 4 Antworten geben. Wenn jemand alleine geht, lautet die Antwort seines Partners "p", wenn er an der Reihe ist.
Ich habe versucht, die Menge der redundanten Eingaben zu reduzieren, um besonders klar zu sein:
2a. Sowohl Ihre Position relativ zum Dealer / Leader als auch die Karte, die Ihr Partner gespielt hat, können durch die Anzahl der vorherigen Ausgaben bestimmt werden. Es gibt 1 Spieler zwischen Ihnen und Ihrem Partner. Wenn Sie beispielsweise "td, 8h, p" als letzte Zeile in Ihrem Zug erhalten, können Sie sehen, dass Ihr Partner eine 8h gespielt hat und das andere Team einen Spieler hat, der alleine geht.
Wenn Sie neugierig sind, erfolgt der Deal auf traditionelle Weise (in zwei Runden abwechselnd Pakete mit 2 und 3 Karten), aber das ist für Ihren Bot nicht wirklich relevant, also ...
Wenn der zweite Spieler beschließt, in der Trumpfphase zu bestellen, wird diese Phase fortgesetzt, aber ihre Ausgaben werden so gut wie ignoriert. Mit anderen Worten, wer zuerst bestellt, ist im Namers-Team, unabhängig von anderen Ausgaben.
Im Folgenden sind die Standardeinstellungen für die verschiedenen Spielphasen aufgeführt. Wenn Sie für diese Runde keine gültige Antwort ausgeben, wird Ihre Antwort in die folgende geändert.
Trump bestellen: p
Trump benennen: p
Abwerfen: (die erste Karte auf deiner Hand)
Alleine gehen: n
Du bist dran: (die erste legale Karte in deiner Hand)
Hier ist der Controller-Code für Ihre Testzwecke.
6a. Beachten Sie, dass Sie entweder 2 oder 4 Bot-Namen eingeben können. Wenn Sie 4 Bots vergeben, werden diese zufällig zusammengeführt, und bei 2 werden sie mit Kopien von sich selbst zusammengeführt.
6b. Sie benötigen ein 'Bots'-Verzeichnis im selben Verzeichnis wie der Controller-Code, und Ihr Bot-Code muss sich im Bots-Verzeichnis befinden.
Für diejenigen, die möchten, dass sich ihr Bot daran erinnert, welche Karten gespielt wurden, haben Sie während der "Trick" -Phase die Möglichkeit, Ihrem Bot mitzuteilen, welche Karten gespielt wurden. Sie können in eine Datei im Bots-Verzeichnis schreiben, solange diese Datei 1 KB nicht überschreitet.
Anzeigetafel:
Old Stager: 2
Marius: 1
Random 8020: 0
quelle
Antworten:
Marius
Ich habe diesen Bot in R geschrieben. Ich habe einige Tests mit Ihrem Controller durchgeführt und sie scheinen korrekt zu kommunizieren.
Ich werde es wahrscheinlich später ändern, da ich keine "Turn" -Logik implementiert habe, wenn der Bot verteidigt, aber ich poste es jetzt, damit die Leute einen anderen Bot haben, gegen den sie testen können.
Im Moment implementiert es nur sehr grundlegende Strategien wie das Führen mit einem Ass, einem Trumpf oder einer anderen hohen Karte. wenn möglich mit einer höheren Karte folgen oder wenn nicht mit der Karte mit dem niedrigsten Wert spielen; Bestellen, wenn die Hand einen hohen Wert hat, und Benennen der Farbe, in der die Hand den höchsten Wert gehabt hätte; alleine gehen, wenn die Hand einen sehr hohen Wert hat. Der "Wert" jeder Karte wird sehr einfach berechnet: Der Wert der Trümpfe beginnt bei 7 für den ersten Wagenheber und nimmt entlang der Trumpffarbe ab.
quelle
Alter Hase
Dieser Bot folgt einigen einfachen Regeln, die ihm lange Zeit gute Dienste geleistet haben:
Ich habe die Zielpunktzahl für Tests im Controller von 10 auf 100 erhöht. Die Ergebnisse sind immer noch sehr zufällig, aber viel stabiler als zuvor.
quelle
Zufällig 8020
Ein einfacher zufälliger Bot, der 80% der Zeit vergeht. Kommentieren Sie die letzte Zeile aus, um die (gelöschten) Ein- und Ausgaben anzuzeigen.
quelle