L'idea di questa sfida è semplice: crea un bot per giocare al gioco di carte Euchre.
Per quelli di voi che non li conoscono già, ho scritto le regole a Euchre qui per quanto riguarda questa sfida.
Consiglio di usare Python o qualcosa di simile, ma l'unica vera limitazione è che deve essere compatibile con il codice del controller
Ingresso:
Il tuo bot euchre riceverà diversi tipi di input a seconda della fase corrente del gioco o del round. In generale, otterrai la fase di gioco sulla prima riga seguita da una virgola e dal numero di punti che la tua squadra ha, e quindi i dati rilevanti sulle seguenti righe.
Cronologicamente, il tuo bot riceverà input nel seguente ordine:
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
Produzione:
Il tuo bot euchre avrà output diversi a seconda della fase corrente del gioco o del round.
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
punteggio:
Il punteggio del tuo bot è il numero totale di partite che vince.
Il tuo bot giocherà contro ogni altro bot e sarà sempre associato a una copia di se stesso.
Appunti:
Ecco un semplice modello 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)
Ci saranno sempre 4 risposte totali. Se qualcuno va da solo, la risposta del suo partner sarà "p" al suo turno.
Ho provato a radere la quantità di input ridondante, quindi per essere più chiaro:
2a. Sia la tua posizione relativa al mazziere / leader sia la carta giocata dal tuo partner possono essere determinate dal numero di risultati precedenti. C'è 1 giocatore tra te e il tuo partner. Ad esempio, se ottieni "td, 8h, p" come ultima riga del tuo turno, puoi vedere che il tuo partner ha giocato un 8h e l'altra squadra ha un giocatore che sta andando da solo.
Se sei curioso, l'affare è fatto in modo tradizionale (in due turni alternando pacchetti di 2 e 3 carte) ma non è rilevante per il tuo bot, quindi ...
Se il secondo giocatore decide di ordinare nella fase di briscola, quella fase continuerà, ma le loro uscite saranno praticamente ignorate. In altre parole, chi ordina per primo fa parte del team Namers indipendentemente da qualsiasi altro risultato.
Di seguito sono riportate le impostazioni predefinite per le varie fasi del gioco. Se non ottieni una risposta valida per quel round, la tua risposta viene modificata in quello che segue.
Ordinare Trump: p
Trump dei nomi: p
Scarto: (la prima carta nella tua mano)
Andare da soli: n
Il tuo turno: (la prima carta legale in mano)
Ecco il codice del controller per i tuoi scopi di test.
6a. Nota che puoi passare in 2 o 4 nomi di bot, se gli dai 4 robot, questi vengono associati in modo casuale e con 2 vengono associati con copie di se stessi.
6b. È necessaria una directory "bot" nella stessa directory del codice controller e il codice bot deve trovarsi nella directory bot.
Per coloro che vogliono che il loro bot ricordi quali carte sono state giocate, durante la fase di "presa" ti viene data l'opportunità che dice al tuo bot quali carte sono state giocate. Puoi scrivere su un file nella directory dei bot purché quel file non superi 1kb.
Pagelle:
Old Stager: 2
Marius: 1
Random 8020: 0