itblaked.battleships
バトルシップ
概要
このAnsibleロールは、クラシックなゲーム「バトルシップ」をシミュレートします。
Ansible Galaxyのこちらで利用可能です: https://galaxy.ansible.com/itblaked/battleships
詳細はWikipediaをご覧ください: https://en.wikipedia.org/wiki/Battleship_(game)
発射は、shots
という変数に格納されたグリッドポイントのリストとして提供されます。
船は、ships
という変数に辞書のリストとして格納されます。各アイテムには、船の name
、health
、location
が含まれます。
これらの記述方法および場所については、以下の変数セクションを参照してください。
ゲームは10x10のグリッドに基づいています:
___________________________________________
| A B C D E F G H I J
|1 x x x x x x
|2 x
|3 s p p
|4 x s x
|5 b s
|6 b
|7 b x x
|8 b
|9 x
|10 x d d d
|__________________________________________
船
番号 | 船の種類 | サイズ |
---|---|---|
1 | キャリア | 5 |
2 | 戦艦 | 4 |
3 | 駆逐艦 | 3 |
4 | 潜水艦 | 3 |
5 | パトロールボート | 2 |
インストール
各プレイヤーは、こちらのリポジトリからロールをクローンしてインストールする必要があります: https://github.com/itblaked/battleships。将来的にAnsible-Galaxyに公開される予定です。
ゲームの進行
ゲームは、各プレイヤーがAnsibleプレイブックからこのロールを実行することで進行します。
プレイヤーは、ゲーム設定セクションに詳しく記載されているように、ロール内の船を更新することでプレイの準備をします。
船が配置されたら、プレイヤーは誰が最初に撃つかを決めます。最初に撃つ人は、最初のショットのグリッドポイントを守備側に提供します。_(通常はターンごとに1発のショットですが、ゲームをどれだけ早く進めたいかによって異なります。)_
shots
変数は、プレイブックの追加変数、ロールのデフォルト変数、またはコマンドラインの追加変数として提供することができます。ショットのリストはゲームを通じて蓄積され、減少することはありません。
ショットは、すべての船の位置のグリッドポイントが破壊されるまで発射され、その時点で船は沈みます。船が沈むと、「スパイサブ」機能がアクティブになります。
ゲームには、船が沈むとアクティブになる「スパイサブ」の概念が含まれています。2つのスパイサブ、spysub1
と spysub2
があります。
これらのスパイサブは、それぞれ異なる恩恵を守備側に提供します。守備側がそれぞれの潜水艦の正しいアクセスコードを推測できた場合に限ります。spysub1
は守備側の次の攻撃にボーナスショットを提供し、spysub2
は守備側の次の攻撃に2つのボーナスショットを提供します。
ロールが実行されるたびに、各スパイサブのアクセスコードは事前定義された数値のリストからランダムに選択されます;12, 8, 7, 14, 20
。守備側は、spysub1_accesscode
と spysub2_accesscode
変数に整数としてアクセスコードの予想を提供します。例:spysub1_accesscode: 12
。
これら2つの変数は、ships
変数と同様にロールに提供できます。
ゲーム設定
船
各プレイヤーは、ロールの defaults/main.yml
ファイル内で船の位置を更新する必要があります。この作業を行う際には、標準のバトルシップのルールが適用されます。詳細はWikipedia記事を参照してくださいが、いくつかの重要なポイントは以下の通りです:
- 船同士のグリッドポイントが重複してはいけません。
- グリッドポイントは、水平方向または垂直方向に連続していなければなりません(斜めは不可)。
- グリッドポイントは、各船の位置のキーにyamlのリストとして提供されなければなりません。
要件
特になし
ロールの変数
# 守備側の船に対して発射されるショットのリスト。
shots:
- a1
- c2
- a8
- e4
- f8
# 守備側による次のターンのスパイサブアクセスコードの推測。
# 12, 8, 7, 14, 20 の中から各スパイサブのアクセスコードになると思う番号を選んでください。
spysub1_accesscode: 12
spysub2_accesscode: 20
# 守備側の船の位置、健康状態、名前。
# 船の名称を変更するか健康状態を変更しても、ゲームプレイには影響しません。
# 健康の値が各船の位置のグリッドポイント数と等しい限り大丈夫です。
ships:
- name: carrier
health: 5
location:
- a1
- b1
- c1
- d1
- e1
- name: battleship
health: 4
location:
- d8
- d7
- d6
- d5
- name: destroyer
health: 3
location:
- j10
- h10
- i10
- name: submarine
health: 3
location:
- f5
- f4
- f3
- name: patrolboat
health: 2
location:
- h3
- i3
依存関係
特になし。
サンプルプレイブック
ロールの使用方法(例えば、変数をパラメータとして渡す方法)のサンプルを含めることは、ユーザーにとって非常に役立ちます:
- name: バトルシップをプレイ
hosts: localhost
connection: local
vars:
shots:
- a1
- b8
- f3
spysub1_accesscode: 12
spysub2_accesscode: 20
ships:
- name: carrier
health: 5
location:
- a1
- b1
- c1
- d1
- e1
- name: battleship
health: 4
location:
- d8
- d7
- d6
- d5
- name: destroyer
health: 3
location:
- j10
- h10
- i10
- name: submarine
health: 3
location:
- f5
- f4
- f3
- name: patrolboat
health: 2
location:
- h3
- i3
tasks:
- name: バトルシップを開始
include_role:
name: battleships
ライセンス
BSD
著者情報
ブレイク・ダグラス