itblaked.battleships
Buques de Guerra
Descripción
Este rol de Ansible simula el clásico juego 'Buques de Guerra'.
Está disponible en Ansible Galaxy https://galaxy.ansible.com/itblaked/battleships
https://es.wikipedia.org/wiki/Batalla_naval.
Los disparos se proporcionan como una lista de puntos en la cuadrícula, almacenados en la variable shots
.
Los buques se almacenan en la variable ships
como una lista de diccionarios, donde cada elemento de la lista contiene el nombre
, la salud
y la ubicación
de cada buque.
Consulta la sección de variables a continuación para ver ejemplos de cómo escribir esto y dónde hacerlo.
El juego se basa en una cuadrícula de 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
|__________________________________________
Buques
No | Clase de Buque | Tamaño |
---|---|---|
1 | Portaaviones | 5 |
2 | Buque de Guerra | 4 |
3 | Destructor | 3 |
4 | Submarino | 3 |
5 | Lancha Patrullera | 2 |
Instalación
Cada jugador debería instalar el rol clonándolo desde este repositorio https://github.com/itblaked/battleships. El rol se publicará en Ansible-Galaxy en el futuro.
Cómo Jugar
El juego se juega ejecutando este rol desde un Playbook de Ansible por cada jugador.
Cada jugador se prepara para jugar actualizando sus buques en el rol como se detalla a continuación en la sección de configuración del juego.
Una vez que los buques estén organizados, los jugadores deciden quién disparará primero. El primer tirador debe luego proporcionar al defensor el punto en la cuadrícula de su primer disparo. (Típicamente es un disparo por turno, sin embargo, realmente depende de qué tan rápido quieras completar el juego.)
La variable shots
puede ser proporcionada al rol como una variable extra en el playbook, como una variable por defecto en el rol o como una variable extra en la línea de comandos. La lista de disparos debe acumularse durante el juego y no debe disminuir.
Los disparos se realizan contra los buques hasta que todos los puntos de ubicación de un buque sean destruidos, momento en el cual el buque se hunde. Cuando un buque se hunde, se activa la función 'spysub'.
El juego incluye el concepto de 'spysub', que se convierte en una parte activa del juego cuando un buque ha sido hundido. Hay dos spysubs: spysub1
y spysub2
.
Estos spysubs proporcionan un beneficio diferente al defensor si el defensor puede adivinar el código de acceso correcto de cada submarino. spysub1
proporciona un disparo extra en el próximo ataque del defensor y spysub2
proporciona 2 disparos extra en el próximo ataque del defensor.
Cada vez que se ejecuta el rol, el código de acceso para cada spysub se selecciona aleatoriamente de una lista de números predefinidos: 12, 8, 7, 14, 20
. El defensor debe proporcionar su suposición del código de acceso como un número entero en las variables spysub1_accesscode
y spysub2_accesscode
, por ejemplo, spysub1_accesscode: 12
.
Estas dos variables pueden ser proporcionadas al rol de la misma manera que la variable ships
.
Configuración del Juego
Buques
Cada jugador debe actualizar las ubicaciones de los buques en el archivo defaults/main.yml
en el rol. Al completar esto, se aplican las reglas estándar de la batalla naval; consulta el artículo de Wikipedia para obtener detalles específicos. Sin embargo, algunos puntos clave son:
- No debe haber puntos de cuadrícula superpuestos entre buques.
- Los puntos de cuadrícula deben ser consecutivos horizontal o verticalmente (sin diagonales).
- Los puntos de cuadrícula deben ser proporcionados como una lista yaml en la clave de ubicación de cada buque.
Requisitos
Ninguno
Variables del Rol
# Una lista de disparos a realizar contra los buques del defensor.
shots:
- a1
- c2
- a8
- e4
- f8
# Suposición del defensor sobre cuál será el código de acceso de los spysubs en el siguiente turno.
# Elige el número que crees que será el código de acceso para cada spysub de entre 12, 8, 7, 14, 20.
spysub1_accesscode: 12
spysub2_accesscode: 20
# Ubicaciones, salud y nombres de los buques del defensor.
# Renombrar los buques o cambiar la salud no afectará el juego, siempre que
# el valor de salud sea igual al número de puntos de ubicación por buque.
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
Dependencias
Ninguna.
Ejemplo de Playbook
Incluir un ejemplo de cómo usar tu rol (por ejemplo, con variables pasadas como parámetros) siempre es útil para los usuarios también:
- name: Jugar Buques de Guerra
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: Lanzar Buques de Guerra
include_role:
name: battleships
Licencia
BSD
Información del Autor
Blake Douglas
ansible-galaxy install itblaked.battleships