Idea tego wyzwania jest prosta: stwórz bota, aby zagrać w grę karcianą Euchre.
Dla tych z was, którzy jeszcze ich nie znają, napisałem zasady Euchre , które dotyczą tego wyzwania.
Polecam używanie Pythona lub czegoś podobnego, ale jedynym prawdziwym ograniczeniem jest to, że musi on być zgodny z kodem kontrolera
Wejście:
Twój bot euchre otrzyma różne dane wejściowe w zależności od aktualnej fazy gry lub rundy. Ogólnie rzecz biorąc, fazę gry otrzymujesz w pierwszym wierszu, po której następuje przecinek i liczba punktów, które ma Twoja drużyna, a następnie odpowiednie dane w kolejnych wierszach.
Chronologicznie twój bot otrzyma dane wejściowe w następującej kolejności:
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
Wynik:
Twój bot euchre będzie miał różne wyjścia w zależności od aktualnej fazy gry lub rundy.
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
Punktacja:
Wynik twojego bota to łączna liczba wygranych gier.
Twój bot będzie grał przeciwko każdemu innemu botowi i zawsze będzie współpracował z jego kopią.
Uwagi:
Oto prosty szablon w 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)
Zawsze będą 4 odpowiedzi ogółem. Jeśli ktoś pójdzie sam, wówczas odpowiedź jego partnera będzie oznaczać „p” w swojej turze.
Próbowałem zmniejszyć ilość zbędnych danych wejściowych, aby być bardziej wyraźnym:
2a. Zarówno twoją pozycję w stosunku do rozdającego / lidera, jak i kartę, którą zagrał twój partner, można określić na podstawie liczby poprzednich wyników. Jest jeden gracz między tobą a twoim partnerem. Tam Na przykład, jeśli dostaniesz „td, 8h, p” jako ostatnią linię w swojej turze, możesz zobaczyć, że twój partner grał 8h, a druga drużyna ma gracza, który idzie sam.
Jeśli jesteś ciekawy, transakcja odbywa się w tradycyjny sposób (w dwóch rundach na przemian pakiety 2 i 3 kart), ale to nie jest tak naprawdę odpowiednie dla twojego bota, więc ...
Jeśli drugi gracz zdecyduje się zamówić w fazie atutowej, faza ta będzie kontynuowana, ale ich wyniki zostaną w zasadzie zignorowane. Innymi słowy, ktokolwiek zamawia jako pierwszy, należy do zespołu Namers, niezależnie od innych wyników.
Poniżej przedstawiono ustawienia domyślne dla różnych faz gry. Jeśli nie podasz prawidłowej odpowiedzi dla tej rundy, twoja odpowiedź zostanie zmieniona na poniżej.
Zamawianie Trump: p
Naming Trump: s
Odrzucanie: (pierwsza karta w ręce)
Going Alone: n
Twoja kolej: (pierwsza legalna karta w twojej ręce)
Oto kod kontrolera do celów testowych.
6a. Zauważ, że możesz podać 2 lub 4 nazwy botów, jeśli dasz mu 4 boty, zostaną one losowo powiązane, a przy 2 są powiązane z kopiami samych siebie.
6b. Potrzebujesz katalogu „botów” w tym samym katalogu, co kod kontrolera, a kod bota musi znajdować się w katalogu botów.
Dla tych, którzy chcą, aby ich bot pamiętał, które karty zostały zagrane, masz możliwość podczas fazy „lewy”, która informuje bota, które karty zostały zagrane. Możesz pisać do pliku w katalogu botów, o ile plik ten nie przekracza 1kb.
Tablica wyników:
Old Stager: 2
Marius: 1
Random 8020: 0
źródło
Odpowiedzi:
Marius
Napisałem tego bota w R. Zrobiłem kilka testów z twoim kontrolerem i wydają się one poprawnie komunikować.
Prawdopodobnie zmodyfikuję go później, ponieważ nie wdrożyłem logiki „zakrętu”, gdy bot się broni, ale publikuję go teraz, aby ludzie mieli innego bota do przetestowania.
Na razie implementuje tylko bardzo podstawowe strategie, takie jak prowadzenie z asem, atutem lub inną wysoką kartą; podążanie za wyższą kartą, jeśli to możliwe, lub zagrywanie karty o najniższej wartości, jeśli nie; porządkowanie, gdy ręka ma wysoką wartość, i nazywanie koloru, w którym ręka miałaby najwyższą wartość; idąc samotnie, gdy ręka ma bardzo wysoką wartość. „Wartość” każdej karty jest obliczana bardzo prosto: wartość atutów zaczyna się od 7 dla pierwszego waleta i maleje wraz z kolorem atutu.
źródło
Wyjadacz
Ten bot przestrzega kilku prostych zasad, które dobrze mu służyły przez długi czas:
Podniosłem wynik docelowy z 10 do 100 za testowanie w kontrolerze. Wyniki są nadal bardzo losowe, ale o wiele bardziej stabilne niż wcześniej.
źródło
Losowo 8020
Prosty losowy bot, który zajmie 80% czasu. Usuń komentarz z ostatniego wiersza, aby zobaczyć (wyczyszczone) wejście i wyjście.
źródło