L'idée de ce défi est simple: créer un bot pour jouer au jeu de cartes Euchre.
Pour ceux d'entre vous qui ne les connaissent pas déjà, j'ai écrit les règles à Euchre ici en ce qui concerne ce défi.
Je recommande d'utiliser python ou quelque chose de similaire, mais la seule vraie restriction est qu'il doit être compatible avec le code du contrôleur
Contribution:
Votre bot euchre obtiendra différents types d'entrée en fonction de la phase actuelle du jeu ou du tour. De manière générale, vous obtiendrez la phase de jeu sur la première ligne suivie d'une virgule et du nombre de points de votre équipe, puis des données pertinentes sur les lignes suivantes.
Chronologiquement, votre bot recevra une entrée dans l'ordre suivant:
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
Production:
Votre bot euchre aura différentes sorties selon la phase actuelle du jeu ou du tour.
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
Notation:
Le score de votre bot est le nombre total de jeux qu'il gagne.
Votre bot jouera contre tous les autres bots, et il sera toujours associé à une copie de lui-même.
Remarques:
Voici un modèle simple en 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)
Il y aura toujours 4 réponses au total. Si quelqu'un part seul, la réponse de son partenaire sera "p" à son tour.
J'ai essayé de réduire la quantité d'entrée redondante, donc pour être plus clair:
2a. Votre position par rapport au croupier / leader et la carte que votre partenaire a joué peuvent être déterminées par le nombre de sorties précédentes. Il y a 1 joueur entre vous et votre partenaire. Là Par exemple, si vous obtenez "td, 8h, p" comme dernière ligne de votre tour, vous pouvez voir que votre partenaire a joué 8h, et l'autre équipe a un joueur qui va seul.
Si vous êtes curieux, la transaction se fait de manière traditionnelle (en deux tours alternant des paquets de 2 et 3 cartes) mais ce n'est pas vraiment pertinent pour votre bot, alors ...
Si le deuxième joueur décide de passer commande dans la phase d'atout, cette phase continuera, mais leurs sorties seront à peu près ignorées. En d'autres termes, celui qui commande en premier fait partie de l'équipe Namers indépendamment de toute autre sortie.
Voici les valeurs par défaut pour les différentes phases de jeu. Si vous ne fournissez pas de réponse valide pour ce tour, votre réponse est modifiée comme suit.
Commander Trump: p
Nommer Trump: p
Défausse: (la première carte de votre main)
Aller seul: n
Votre tour: (la première carte légale dans votre main)
Voici le code du contrôleur à des fins de test.
6a. Remarquez que vous pouvez transmettre 2 ou 4 noms de bots, si vous lui donnez 4 bots, ils seront associés de manière aléatoire et avec 2, ils seront associés à des copies d'eux-mêmes.
6b. Vous avez besoin d'un répertoire «bots» dans le même répertoire que le code du contrôleur, et votre code bot doit être dans le répertoire bots.
Pour ceux qui veulent que leur bot se souvienne quelles cartes ont été jouées, vous avez la possibilité pendant la phase de "truc", qui indique à votre bot quelles cartes ont été jouées. Vous pouvez écrire dans un fichier du répertoire des bots tant que ce fichier ne dépasse pas 1 Ko.
Tableau d'affichage:
Old Stager: 2
Marius: 1
Random 8020: 0
la source
Réponses:
Marius
J'ai écrit ce bot dans R. J'ai fait quelques tests avec votre contrôleur et ils semblent communiquer correctement.
Je vais probablement le modifier plus tard car je n'ai pas implémenté de logique de "tour" pour quand le bot se défend, mais je le poste maintenant pour que les gens aient un autre bot à tester.
Pour l'instant, il ne met en œuvre que des stratégies très basiques telles que mener avec un as, un atout ou toute autre carte haute; suivre avec une carte plus élevée dans la mesure du possible ou jouer la carte la moins chère sinon; ordonner lorsque la main a une valeur élevée et nommer la couleur dans laquelle la main aurait eu la valeur la plus élevée; aller seul lorsque la main a une valeur très élevée. La "valeur" de chaque carte est calculée très simplement: la valeur des atouts commence à 7 pour le premier jack et diminue le long de l'atout.
la source
Vieux routier
Ce bot suit quelques règles simples qui lui ont bien servi pendant longtemps:
J'ai augmenté le score cible de 10 à 100 pour les tests dans le contrôleur. Les résultats sont encore très aléatoires, mais bien plus stables qu'auparavant.
la source
Aléatoire 8020
Un bot aléatoire simple, qui passera 80% du temps. Décommentez la dernière ligne pour voir l'entrée et la sortie (effacées).
la source