itblaked.battleships

战舰游戏

概述

这个 Ansible 角色模拟了经典游戏“战舰”。

它可以在 Ansible Galaxy 上找到:https://galaxy.ansible.com/itblaked/battleships

更多信息请参见:https://en.wikipedia.org/wiki/Battleship_(game)。

射击的位置以一个存储在变量 shots 中的网格点列表形式提供。

舰船存储在变量 ships 中,作为字典列表,每个列表项包含每艘舰艇的 namehealthlocation

请查看下面的变量部分,了解如何书写这些变量以及它们的位置。

游戏以 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 Playbook 中运行这个角色来进行。

玩家在游戏设置部分中详细说明的步骤中更新他们的船只以准备游戏。

一旦船只排好,玩家决定谁先射击。第一次射击的玩家应该向防守者提供他们的第一次射击的网格点。 (通常每次轮流一子,但具体取决于你想多快完成游戏。)

shots 变量可以在 playbook 中作为额外变量提供给角色,或作为角色中的默认变量,或者在命令行中作为额外变量提供。射击列表应在游戏中不断累积,切勿减少。

发射的射击会瞄准舰船,直到所有舰船的网格点被摧毁,此时该舰船就沉没。当一艘舰船沉没时,“间谍潜艇”特性会激活。

游戏中包含“间谍潜艇”的概念,当一艘舰船沉没时,它们成为游戏的一个活跃部分。共有两个间谍潜艇; spysub1spysub2

这些间谍潜艇在防守者能够猜出每个潜艇的正确访问代码时,分别为防守者提供不同的好处。 spysub1 提供防守者下次攻击的额外一次射击,而 spysub2 提供防守者下次攻击的两次额外射击。

每次运行角色时,两个间谍潜艇的访问代码会从预定义的数字列表中随机选择; 12, 8, 7, 14, 20。防守者应在 spysub1_accesscodespysub2_accesscode 变量中提供其访问代码的猜测,以整数形式输入,例如: spysub1_accesscode: 12

这两个变量可以像 ships 变量一样提供给角色。

游戏设置

舰船

每个玩家应在角色的 defaults/main.yml 文件中更新舰船的位置。在完成此操作时,适用标准的战舰规则,具体信息请参见维基百科文章,但一些关键点如下:

  1. 舰船之间的网格点不得重叠。
  2. 网格点必须水平或垂直连续(不能对角)。
  3. 网格点必须以 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

依赖

无。

示例 Playbook

提供一个使用角色的示例(例如,作为参数传入变量)对用户也很有帮助:

    - 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
下载
72
拥有者
Geeking it up and loving it.