itblaked.battleships

Battleships

Przegląd

Ten rol Ansible symuluje klasyczną grę w 'Battleship'.

Jest dostępny w Ansible Galaxy: https://galaxy.ansible.com/itblaked/battleships

https://pl.wikipedia.org/wiki/Battleship_(gra).

Strzały są podawane jako lista punktów na siatce przechowywana w zmiennej shots.

Statki są przechowywane w zmiennej ships jako lista słowników, gdzie każdy element listy zawiera nazwa, zdrowie i lokację każdego statku.

Zobacz sekcję ze zmiennymi poniżej po przykłady, jak to napisać i gdzie.

Gra opiera się na siatce 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   
|__________________________________________

Statki

Nr Klasa statku Rozmiar
1 Lotniskowiec 5
2 Okstatek 4
3 Zniszczyciel 3
4 Podwodny 3
5 Łódź patrolowa 2

Instalacja

Każdy gracz powinien zainstalować rolę, klonując ją z tego repozytorium: https://github.com/itblaked/battleships. Rola będzie opublikowana na Ansible-Galaxy w przyszłości.

Rozgrywka

Gra jest rozgrywana przez uruchomienie tej roli z Playbooka Ansible przez każdego gracza.

Gracze przygotowują się do gry, aktualizując lokalizacje swoich statków w roli, co jest opisane poniżej w sekcji przygotowania do gry.

Gdy statki są już rozmieszczone, gracze decydują, kto strzela pierwszy. Pierwszy strzelec powinien następnie podać obrońcy punkt na siatce swojego pierwszego strzału. (Typowo to jeden strzał na turę, ale to zależy od tego, jak szybko chcesz zakończyć grę.)

Zmienna shots może być przekazana do roli jako zmienna dodatkowa w playbooku, jako zmienna domyślna w roli lub jako zmienna dodatkowa w wierszu poleceń. Lista strzałów powinna gromadzić się przez całą grę i nigdy nie cofać.

Lista strzałów jest oddawana w kierunku statków, aż wszystkie punkty lokalizacji statku zostaną zniszczone, wówczas statek tonie. Gdy statek tonie, aktywuje się funkcja 'spysub'.

Gra zawiera koncepcję 'spysub', które stają się aktywną częścią gry, gdy statek zostaje zatopiony. Są dwa spysuby: spysub1 i spysub2.

Te spysuby oferują różne korzyści obrońcy jeżeli obrońca będzie w stanie zgadnąć prawidłowy kod dostępu dla każdego z sub. spysub1 daje dodatkowy strzał w następnym ataku obrońcy, a spysub2 zapewnia 2 dodatkowe strzały w następnym ataku obrońcy.

Za każdym razem, gdy rola jest uruchamiana, kod dostępu dla każdego spysub jest losowo wybierany z listy wstępnie zdefiniowanych numerów: 12, 8, 7, 14, 20. Obrońca powinien podać swój zgadywany kod dostępu jako liczbę całkowitą w zmiennych spysub1_accesscode i spysub2_accesscode, np. spysub1_accesscode: 12.

Te dwie zmienne mogą być przekazywane do roli w ten sam sposób, co zmienna ships.

Przygotowanie do gry

Statki

Każdy gracz powinien zaktualizować lokalizacje statków w pliku defaults/main.yml w roli. Podczas tego działania obowiązują standardowe zasady gry w statki, zobacz artykuł na Wikipedii dla szczegółów, ale kluczowe punkty to:

  1. Brak nakładających się punktów siatki między statkami.
  2. Punkty siatki muszą być kolejne poziomo lub pionowo (bez przekątnych).
  3. Punkty siatki muszą być podane jako lista yaml w kluczu lokalizacji każdego statku.

Wymagania

Brak.

Zmienne roli


# Lista strzałów, które mają być oddane przeciwko statkom obrońcy.

shots:
  - a1
  - c2
  - a8
  - e4
  - f8


# Zgadywanie obrońcy, jakie będą kody dostępu do spysub w kolejnej turze. 
# Wybierz numer, który uważasz, że będzie kodem dostępu dla każdego spysub z 12, 8, 7, 14, 20.

spysub1_accesscode: 12

spysub2_accesscode: 20



# Lokacje, zdrowie i nazwy statków obrońcy. 
# Zmiana nazw statków lub zmiana zdrowia nie wpłynie na rozgrywkę, o ile
# wartość zdrowia jest równa liczbie punktów lokalizacji per statek.

ships:
  - name: lotniskowiec
    health: 5
    location:
      - a1
      - b1
      - c1
      - d1
      - e1
  - name: okstatek
    health: 4
    location:  
      - d8
      - d7
      - d6
      - d5
  - name: zniszczyciel
    health: 3
    location:
      - j10
      - h10
      - i10
  - name: podwodny
    health: 3
    location:
      - f5
      - f4
      - f3
  - name: łódź patrolowa
    health: 2
    location:
      - h3
      - i3

Zależności

Brak.

Przykładowy Playbook

Zawiera przykład, jak używać twojej roli (na przykład z przekazanymi zmiennymi jako parametry), co jest zawsze mile widziane dla użytkowników:

    - name: Graj w Battleships
      hosts: localhost
      connection: local
      vars:
        shots:
          - a1
          - b8
          - f3
        spysub1_accesscode: 12
        spysub2_accesscode: 20
        ships:
        - name: lotniskowiec
          health: 5
          location:
            - a1
            - b1
            - c1
            - d1
            - e1
        - name: okstatek
          health: 4
          location:  
            - d8
            - d7
            - d6
            - d5
        - name: zniszczyciel
          health: 3
          location:
            - j10
            - h10
            - i10
        - name: podwodny
          health: 3
          location:
            - f5
            - f4
            - f3
        - name: łódź patrolowa
          health: 2
          location:
            - h3
            - i3
      tasks:
        - name: Uruchom Battleships
          include_role:
            name: battleships

Licencja

BSD

Informacje o autorze

Blake Douglas

O projekcie

A classic game of Battleships, with Ansible.

Zainstaluj
ansible-galaxy install itblaked.battleships
Licencja
mit
Pobrania
72
Właściciel
Geeking it up and loving it.