battleships

Баттлшипы

Обзор

Эта роль Ansible имитирует классическую игру "Баттлшипы".

Она доступна в Ansible Galaxy по ссылке: https://galaxy.ansible.com/itblaked/battleships

https://ru.wikipedia.org/wiki/Баттлшип_(игра).

Выстрелы представляются в виде списка координат на сетке, который хранится в переменной 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 каждым игроком.

Игроки подготавливаются к игре, обновляя свои корабли в роли, как указано ниже в разделе настройки игры.

После того как корабли расположены, игроки решают, кто будет стрелять первым. Первый стрелок должен предоставить защитнику координаты своей первой выстрела. (Обычно это один выстрел за ход, но все зависит от того, насколько быстро вы хотите закончить игру.)

Переменная shots может быть передана роли как дополнительная переменная в плейбуке, как переменная по умолчанию в роли или как дополнительная переменная в командной строке. Список выстрелов должен накапливаться на протяжении всей игры и никогда не уменьшаться.

Список выстрелов производится по кораблям до тех пор, пока все точки расположения корабля не будут уничтожены, после чего корабль считается потопленным. Когда корабль потоплен, активируется функция "шпионские подводные лодки".

Игра включает концепцию "шпионских подводных лодок", которые становятся активной частью игры, когда корабль потоплен. Есть две шпионские подводные лодки: spysub1 и spysub2.

Эти шпионские подводные лодки предоставляют различные преимущества защитнику если защитник сможет угадать правильный код доступа для каждой подводной лодки. spysub1 предоставляет бонусный выстрел при следующей атаке защитника, а spysub2 предоставляет 2 бонусных выстрела при следующей атаке защитника.

Каждый раз, когда роль выполняется, код доступа для каждой шпионской подводной лодки выбирается случайным образом из списка предопределенных чисел: 12, 8, 7, 14, 20. Защитник должен указать свою догадку кода доступа как целое число в переменных spysub1_accesscode и spysub2_accesscode, например, spysub1_accesscode: 12.

Эти две переменные могут быть переданы роли так же, как переменная ships.

Настройка игры

Корабли

Каждый игрок должен обновить расположение кораблей в файле defaults/main.yml в роли. При этом действуют стандартные правила баттлшипов, см. статью в Википедии для получения подробностей, но некоторые ключевые моменты:

  1. Нет перекрывающихся координат между кораблями.
  2. Координаты должны располагаться последовательно по горизонтали или вертикали (без диагоналей).
  3. Координаты должны быть представлены в виде yaml-списка в ключе location каждого корабля.

Требования

Отсутствуют

Переменные роли


# Список выстрелов, которые будут сделаны по кораблям защитника.

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

Информация об авторе

Блейк Дуглас

О проекте

A classic game of Battleships, with Ansible.

Установить
ansible-galaxy install itblaked/battleships
Лицензия
mit
Загрузки
58
Владелец
Geeking it up and loving it.