이 도전의 아이디어는 간단합니다. 카드 게임 Euchre를 플레이하기 위해 봇을 만드십시오.
이미 모르는 분들을 위해, 나는 유커에 대한 규칙을 작성했습니다 여기 가이 문제와 관련있다.
파이썬이나 그와 비슷한 것을 사용하는 것이 좋지만 유일한 제한은 컨트롤러 코드와 호환되어야한다는 것입니다.
입력:
유커 봇은 게임의 현재 단계 또는 라운드에 따라 다른 종류의 입력을받습니다. 일반적으로 첫 번째 줄에는 게임 단계가 표시되고 쉼표와 팀의 점수는 다음 줄에 표시됩니다.
연대순으로 봇은 다음 순서로 입력을받습니다.
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
산출:
유커 봇은 게임의 현재 단계 또는 라운드에 따라 다른 출력을 갖습니다.
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
채점 :
봇의 점수는 승리 한 총 게임 수입니다.
봇은 다른 모든 봇과 대결하며 항상 자신의 사본과 파트너가됩니다.
노트:
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)
항상 총 4 개의 응답이 있습니다. 누군가 혼자 가면 파트너의 차례가 "p"가됩니다.
여분의 입력량을 줄이려고 노력했습니다.
2a. 딜러 / 리더와의 상대 위치 및 파트너가 사용한 카드는 이전 출력 수에 따라 결정될 수 있습니다. 당신과 당신의 파트너 사이에 1 명의 플레이어가 있습니다. 예를 들어, 턴에서 마지막 줄에 "td, 8h, p"가 표시되면 파트너가 8 시간을 뛰었고 다른 팀에 혼자가는 선수가 있다는 것을 알 수 있습니다.
호기심이 많으면 거래는 전통적인 방식으로 이루어지며 (2와 3 카드로 이루어진 두 번의 라운드로) 봇과는 관련이 없습니다.
두 번째 플레이어가 트럼프 단계에서 주문하기로 결정하면 해당 단계는 계속되지만 출력은 거의 무시됩니다. 다시 말해, 먼저 주문한 사람은 다른 출력과 상관없이 Namers 팀에 있습니다.
다음은 다양한 게임 단계의 기본값입니다. 해당 라운드에 유효한 응답을 출력하지 않으면 응답이 아래의 내용으로 변경됩니다.
주문 트럼프 : p
명명 트럼프 : p
폐기 : (손에 든 첫 번째 카드)
혼자가 : n
당신의 차례 : (당신의 손에있는 첫 번째 법정 카드)
테스트 목적의 컨트롤러 코드는 다음과 같습니다 .
6a. 2 개 또는 4 개의 봇 이름을 전달할 수 있습니다. 4 개의 봇을 제공하면 무작위로 파트너가되고 2 개는 자신의 사본과 파트너가됩니다.
6b. 컨트롤러 코드와 동일한 디렉토리에 'bots'디렉토리가 필요하며 봇 코드는 bots 디렉토리에 있어야합니다.
봇이 어떤 카드를 사용했는지 기억하고 싶은 사람들을 위해, "트릭"단계에서 봇에게 어떤 카드를 사용했는지 알려주는 기회가 주어집니다. 파일이 1kb를 초과하지 않는 한 bots 디렉토리의 파일에 쓸 수 있습니다.
스코어 보드 :
Old Stager: 2
Marius: 1
Random 8020: 0