この課題のアイデアは単純です。カードゲームユーカーをプレイするボットを作成します。
それらをまだ知らない皆さんのために、私はここでユーカーにこの挑戦に関係するルールを書き留めました。
私はpythonまたは類似のものを使用することをお勧めしますが、唯一の実際の制限は、コントローラーコードと互換性がある必要があることです。
入力:
ユーカーボットは、ゲームまたはラウンドの現在のフェーズに応じて、さまざまな種類の入力を取得します。一般的に言えば、最初の行にゲームフェーズが表示され、その後にコンマとチームのポイント数が続き、その後に関連するデータが次の行に表示されます。
年代順に、ボットは次の順序で入力を受け取ります。
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ラウンドのパケットを2枚と3枚のカードに交互に入れます)が、ボットとはあまり関係がないので...
2番目のプレーヤーが切り札フェーズで注文することを決定した場合、そのフェーズは続行されますが、それらの出力はほとんど無視されます。つまり、他の出力に関係なく、最初に注文した人はすべてNamersチームに所属します。
以下は、さまざまなゲームフェーズのデフォルトです。そのラウンドの有効な応答を出力しない場合、応答は以下のように変更されます。
トランプの注文:p
トランプの命名:p
破棄:(あなたの手札の最初のカード)
一人で行く:n
あなたの番:(あなたの手札の最初の合法カード)
ここだ、あなたのテストの目的で、コントローラのコードは。
6a。2つまたは4つのボット名を渡すことができることに注意してください。4つのボットを指定すると、ランダムにパートナーになり、2つのボットは自分のコピーとパートナーになります。
6b。コントローラーコードと同じディレクトリに「bots」ディレクトリが必要であり、ボットコードがbotsディレクトリにある必要があります。
どのカードがプレイされたかをボットに記憶させたい場合は、「トリック」フェーズ中に機会が与えられ、どのカードがプレイされたかをボットに知らせます。ボットディレクトリ内のファイルに書き込むことができるのは、そのファイルが1kbを超えない限りです。
スコアボード:
Old Stager: 2
Marius: 1
Random 8020: 0