–危機と殉教
(字幕がかっこいいのでそれが字幕です)
Python でのこの挑戦的な挑戦(うん、あなたはJavaで送信しないかもしれないと知る必要はありません)では、ダンジョンへようこそと非常によく似たゲームをプレイするボットを作成する必要があります
ゲームのルール
(これは元のゲームではないことに注意してください)
デッキ、アイテムセット、そしていくつかのポイントカードとデスカードがあります。基本HPは3です。このデッキ1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 9
は、強みを示すために番号が付けられた13枚のモンスターカードで構成されています。
アイテムリスト
悪魔の契約:デーモン(強度7のモンスター)とその下のモンスターをダンジョンパイルで倒します。-(デーモンがダンジョンの最後だった場合、デーモンを倒すだけです)
体力ポーション:0 HPに落ちたら、モンスターを倒して3 HPに戻る。
聖杯:偶数の強さのモンスターを倒す(ゲームでは、これらはアンデッドです)。悪魔の協定が使用された後に偶数番号のモンスターが発生した場合、それが最初に動作し、このモンスターの後に余分な協定のキルは得られません。
ヴォーパルダガー:ダンジョンに入る前にモンスターを1つ選択してください。このタイプのモンスターは打ち負かされます。悪魔の契約が使用された後に対象のモンスターが発生した場合、それが最初に機能し、このモンスターの後に追加の契約キルを得ることができません。
シールド:スペルを上げる前に、合計HPに3を追加します。これはヘルスポーションの使用には影響しません。ヘルスポーションは常にヘルスを3に戻します。
装甲:スペルする前に、合計HPに5を追加します。これはヘルスポーションの使用には影響しません。ヘルスポーションは常にヘルスを3に戻します。
ポイントカードは、誰がダンジョンで成功したかを追跡するために使用されます。デスカードは、ダンジョンで失敗した人を追跡します。
描画フェーズ
引き分け段階が始まる前に、すべてのモンスターカードがデッキに戻され、両方のプレイヤーが3 HPに回復し、廃棄されたすべてのアイテムがそれぞれ1つになるように回復されます。
最初のプレイヤーはデッキからカードを引くかどうかを決定し、他のプレイヤーからそれを隠します。もしそうなら、彼らはそれをダンジョンパイルの上に置くか、自分の選んだアイテムと一緒に捨てるかを選ばなければなりません。捨てられたアイテムとカードは、次のラウンドまでどちらのプレイヤーも利用できません。
プレーヤー1が自分の番になった後、プレーヤー2も同じようにします。プレイヤーは、誰かがドローしないことを決定するか、プレイヤーが最後のカードをデッキから取り出すまで、ドローするかどうか、およびドローしたカードをどうするかを交互に決定します。プレイヤーがドローしないことを決定した場合、または最後のカードをドローした場合、ドローフェーズは終了し、他のプレイヤーはダンジョンに入り、洞窟探検を開始する必要があります。
Spelunkingフェーズ
ヴォーパルダガーが捨てられていない場合、スペルを打ったプレイヤーは、どのカードに適用するかを決定する必要があります。このフェーズの残りの部分について、積極的な決定はありません。
最初のプレイヤーが一番上のカードを取ります。つまり、ダンジョンに配置された最後のカードで、その強さの数値が表示されます。悪魔の契約が前のターンからアクティブである場合、引かれたカードは捨てられます。それ以外の場合、プレイヤーのアイテムは「悪魔の契約」、「聖杯」、「ヴォーパルダガー」の順にチェックされます。引き出されたカードを倒すことができる最初の捨てられていないアイテムが使用され、カードは捨てられます。悪魔の契約が使用されている場合は、次のカードで有効になります。使用済みのアイテムは廃棄されません。
該当するアイテムがない場合、カードの強さはプレイヤーのヘルスから差し引かれます。体力がポジティブでなくなった場合、3 HPに回復し、可能な場合はポーションが破棄されます。そうでない場合、ダンジョンクロールは終了し、デスカードを取得します。
プレイヤーが敗北せず、ダンジョンにカードが残っている間、このトップのカードを引くプロセスが繰り返されます。ダンジョン内のすべてのカードを無事に倒すと、ダンジョンクロールは終了し、洞窟探検家はポイントカードを集めます。
完全なゲームの説明
ゲームは一連のラウンドで構成されており、それぞれが描画フェーズとそれからスペルフェーズを持っています。各ラウンドの終わりに、1人のプレイヤーがデスカードまたはポイントカードのいずれかを収集します。プレイヤーがいずれかのタイプの5を蓄積すると、ゲームは終了します。彼らが5枚のデスカードを持っている場合、彼らはゲームに負けます。彼らが5枚のポイントカードを持っている場合、彼らは勝ちます。いずれにしても、他のプレイヤーは反対の結果を受け取ります。どちらのプレイヤーも1つのタイプのカードを5枚持っていない場合、プレイは次のラウンドに進み、前のラウンドで2番目に進んだプレイヤーが最初に進み、その逆も同様です。
コス詳細
各ボットは、上記のルールに従って、他のすべてのボットに対して400ゲームをプレイします。プレイヤー1であるボット(つまり、最初のラウンドで最初に実行されるボット)が各ゲームを交互に切り替え、すべての状態がゲーム間でリセットされます。
再びアイテムは次のとおりです。
悪魔の契約:デーモン(強度7のモンスター)とその下のモンスターをダンジョンパイルで倒します。-(デーモンがダンジョンの最後だった場合、デーモンを倒すだけです)
体力ポーション:0 HPに落ちたら、モンスターを倒して3 HPに戻る。
聖杯:偶数の強さのモンスターを倒す(ゲームでは、これらはアンデッドです)。悪魔の協定が使用された後に偶数番号のモンスターが発生した場合、それが最初に動作し、このモンスターの後に余分な協定のキルは得られません。
ヴォーパルダガー:ダンジョンに入る前にモンスターを1つ選択してください。このタイプのモンスターは打ち負かされます。悪魔の契約が使用された後に対象のモンスターが発生した場合、それが最初に機能し、このモンスターの後に追加の契約キルを得ることができません。
シールド:スペルを上げる前に、合計HPに3を追加します。これはヘルスポーションの使用には影響しません。ヘルスポーションは常にヘルスを3に戻します。
装甲:スペルする前に、合計HPに5を追加します。これはヘルスポーションの使用には影響しません。ヘルスポーションは常にヘルスを3に戻します。
デッキ:1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 9
。
次の基本クラスから派生したクラス変数を使用しないボットクラスを実装する必要があります。
class BasePlayer:
def start_turn(self, last_turn):
raise NotImplementedError
def play(self, card):
raise NotImplementedError
def vorpal_choice(self, last_turn):
raise NotImplementedError
def result(self, bot, result, dungeon, vorped):
raise NotImplementedError
この基本クラスは、クラスが実装する必要があるメソッドと、各メソッドが取る引数の数を示します。
メソッド引数の説明
last_turn
中vorpal_choice
及びstart_turn
整数又はなしの値です。0から5の値は、敵がその値で示されたアイテム(上記のアイテムのリストを参照)とともにドローカードを破棄したことを示します。値6は、敵がカードをダンジョンに置いたことを示します。None値は、ボットがこのラウンドの最初にプレイしていることを示します(では不可能vorpal_choice
)。でvorpal_choice
last_turn彼らはそのターンを通過したことを示す、7である可能性が高いです。7でない唯一の状況は、敵が最後のカードを引いたときです。card
上記のように、デッキのカードの1枚の強さを表す数値です。
ここでの引数result
はもう少し複雑です:
bot
ダンジョンに入ったボットを示します。0はダンジョンに入ったことを示し、1は敵がダンジョンに入ったことを示します。result
旅行の成功を示します。Falseはスペルボットが成功したことを示し、Trueは失敗したことを示します。dungeon
ダンジョンにあったカードを表すカード/ intのリストです。ダンジョンは、注文順に並べられています。ダンジョンに配置された最初のカードがリストの最初になり、配置された最後のカードが最後になります。廃棄されたカードに関する情報は受け取りません。彼らは他のボットから秘密です。vorped
vorpal_choice
spelunkingボットによって作成されたを表す整数です。の場合bot==0
、あなたはすでにこれを知っていますが、の場合bot==1
、これは有用な情報になる場合があります。
正直に言って、なぜ勝った結果をFalseにしたのか完全には思い出しませんが、当時はそれは良い考えだったと思います。
戻り値
start_turn
:カードを引くには1を、パスするには0を返します。play
:対応するアイテムと描画されたカードを破棄する場合は0から5を、ダンジョンにカードを配置する場合は6を返します(start_turn中に行われるパスを除いて、last_turn入力と同じです)。vorpal_choice
:Vorpalダガーを使用して、削除するカードの番号を返します(1を削除するには1、5を削除するには5)。存在しないカードを選択すると、殺されます(8は違法、10は違法、0は違法)。result
:これはボットのデータを更新する通知機能なので、何でも返すことができます。
ここでコントローラを確認できます
追加の説明、または単にスキップして、すぐに知りたいと思うかもしれないいくつかの小さな詳細を繰り返す:
ボットは他のボットと400ゲームをプレイします。
クラス変数なし
特定の他のボットをターゲットにしない
他のボットを支持しない
ランダムモジュールや他のボットを変更するようなリフレクションはありません。
すべてのボットがKOTHに含める価値があることが明らかでない限り、最大6ボット(1人あたり)(ただし、ボットの束を作成しないでください)
このKOTHに特定の終了時間はありませんが、それだけの価値がある報奨金の終了を除きます。ただ毎回勝つようにしてください。
これまでの結果(これらの人にかなり怠惰だったのは残念です:P)
1 GrailThief 2732 0.98
2 Steve 2399 0.86
3 DevilWorshipper 1854 0.66
4 RunAway 1336 0.48
5 BoringPlayer 1190 0.42
6 SlapAndFlap 783 0.28
7 DareDevilDumDum 750 0.27
8 RandomMandom 156 0.06
杯泥棒は賞金を「盗み」ます。それはそれを獲得したからです。よくできました、スリーファー!
2. place the item in the dungeon. The item goes in the dungeon (duh)
タイプミスのようです。その時点で言及されているアイテムはありません(モンスターデッキからカードを1枚引いただけです)。ルールはおそらく少し明確にする必要があります。
or any information known only to one player.
私は再び不明瞭になっていますか?ダンジョンは最後にのみ公開されるので、ボットが引いたカードは1つのボットだけが認識します。ボーナスとして、捨てられたカードは決して明らかにされません。あなたが「まあ、それから確率論的な最善の戦略がある」と思うなら、対戦相手の予測は依然として非常に重要なので、これも無効です