itblaked.battleships
Schiffe versenken
Übersicht
Diese Ansible-Rolle simuliert das klassische Spiel 'Schiffe versenken'.
Sie ist verfügbar in Ansible Galaxy: https://galaxy.ansible.com/itblaked/battleships
https://de.wikipedia.org/wiki/Schiffe_versenken.
Schüsse werden als Liste von Gitterpunkten in der Variablen shots
gespeichert.
Schiffe werden in der Variablen ships
als Liste von Dictionaries gespeichert, wobei jedes Listenelement den Namen
, die Gesundheit
und die Position
jedes Schiffs enthält.
Siehe den Abschnitt Variablen unten für Beispiele, wie man diese schreibt und wo.
Das Spiel basiert auf einem 10x10 Gitter:
___________________________________________
| 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
|__________________________________________
Schiffe
Nr | Schiffsart | Größe |
---|---|---|
1 | Träger | 5 |
2 | Schlachtschiff | 4 |
3 | Zerstörer | 3 |
4 | U-Boot | 3 |
5 | Patrouillenboot | 2 |
Installation
Jeder Spieler sollte die Rolle installieren, indem er sie aus diesem Repository klont: https://github.com/itblaked/battleships. Die Rolle wird in Zukunft auf Ansible Galaxy veröffentlicht.
Spielablauf
Das Spiel wird gespielt, indem diese Rolle von einem Ansible-Playbook von jedem Spieler ausgeführt wird.
Die Spieler bereiten sich auf das Spiel vor, indem sie ihre Schiffe in der Rolle aktualisieren, wie im Abschnitt zum Spielaufbau beschrieben.
Sobald die Schiffe angeordnet sind, entscheiden die Spieler, wer zuerst schießt. Der erste Schütze sollte dem Verteidiger dann den Gitterpunkt seines ersten Schusses mitteilen. (Typischerweise ist es ein Schuss pro Runde, aber es hängt davon ab, wie schnell du das Spiel beenden möchtest.)
Die shots
-Variable kann als zusätzliche Variable im Playbook, als Standardvariable in der Rolle oder als zusätzliche Variable in der Befehlszeile an die Rolle übergeben werden. Die Liste der Schüsse sollte im Verlauf des Spiels kumuliert werden und sich nie zurückentwickeln.
Die Schüsse werden auf die Schiffe abgegeben, bis alle Gitterpunkte eines Schiffes zerstört sind, woraufhin das Schiff versenkt wird. Wenn ein Schiff versenkt wird, aktiviert sich die 'Spion-U-Boot'-Funktion.
Das Spiel beinhaltet das Konzept der 'Spion-U-Boote', die aktiv Teil des Spiels werden, wenn ein Schiff versenkt wurde. Es gibt zwei Spion-U-Boote: spysub1
und spysub2
.
Diese Spion-U-Boote bieten jeweils einen anderen Vorteil für den Verteidiger, wenn der Verteidiger in der Lage ist, den richtigen Zugangscode für jedes U-Boot zu erraten. spysub1
bietet einen Bonus-Schuss beim nächsten Angriff des Verteidigers und spysub2
bietet 2 Bonusschüsse beim nächsten Angriff des Verteidigers.
Jedes Mal, wenn die Rolle ausgeführt wird, wird der Zugangscode für jedes Spion-U-Boot zufällig aus einer Liste von vordefinierten Zahlen ausgewählt: 12, 8, 7, 14, 20
. Der Verteidiger sollte seinen Zugangscode als Ganzzahl in den Variablen spysub1_accesscode
und spysub2_accesscode
angeben, z.B. spysub1_accesscode: 12
.
Diese beiden Variablen können auf die gleiche Weise wie die ships
-Variable an die Rolle übergeben werden.
Spielaufbau
Schiffe
Jeder Spieler sollte die Schiffstandorte in der Datei defaults/main.yml
in der Rolle aktualisieren. Dabei gelten die Standardregeln für Schiffe versenken. Siehe den Wikipedia-Artikel für Details, jedoch einige wichtige Punkte sind:
- Keine überlappenden Gitterpunkte zwischen den Schiffen.
- Die Gitterpunkte müssen horizontal oder senkrecht aufeinander folgen (keine Diagonalen).
- Die Gitterpunkte müssen als YAML-Liste im Standortschlüssel jedes Schiffes angegeben werden.
Anforderungen
Keine
Rollenvariablen
# Eine Liste von Schüssen, die gegen die Schiffe des Verteidigers abgegeben werden.
shots:
- a1
- c2
- a8
- e4
- f8
# Die Vermutung des Verteidigers, was die Zugangscodes der Spion-U-Boote in der nächsten Runde sein werden.
# Wählen Sie die Nummer, die Sie für den Zugangscode jedes Spion-U-Boots aus 12, 8, 7, 14, 20 glauben.
spysub1_accesscode: 12
spysub2_accesscode: 20
# Standorte, Gesundheit und Namen der Schiffe des Verteidigers.
# Das Umbenennen der Schiffe oder das Ändern der Gesundheit hat keinen Einfluss auf das Spiel, solange
# der Gesundheitswert gleich der Anzahl der Standortgitterpunkte pro Schiff ist.
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
Abhängigkeiten
Keine.
Beispiel-Playbook
Ein Beispiel, wie man deine Rolle verwendet (zum Beispiel mit Variablen, die als Parameter übergeben werden) ist für die Nutzer ebenfalls hilfreich:
- name: Spiele Schiffe versenken
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: Schiffe versenken starten
include_role:
name: battleships
Lizenz
BSD
Autoreninformationen
Blake Douglas
ansible-galaxy install itblaked.battleships