Distribución de mercadería
- Fácil
- Búsqueda - fácil, usar las funciones de 1
- Búsqueda, hay que usar
opuesto
, usar las funciones de 1 - Usar 2 y 3 + un
if
y una función para ver si hay suficiente - Idem 4
- Combinación de 4 y 5
- No lo hacemos - necesita recorrer el tablero
- Función de búsqueda con retorno
- Combinación del anterior
Unitarios y federales
Vamos a usar el tablero para representar un campo de batalla, donde intervienen dos ejércitos: los unitarios (representados con bolitas azules) y los federales (representados con bolitas rojas).
En cada celda puede haber o no combatientes, y de cada uno de ellos nos va a interesar conocer su rango. Los rangos están representados por la cantidad de bolitas de colores, respetando la siguiente codificación:
Cant. bolitas | Rango |
---|---|
1 | Soldado raso |
2 | Teniente |
3 | Capitán |
4 | Comandante |
Parte 1: inteligencia
Lo primero que vamos a necesitar es una serie de funciones que nos sirvan para “hacer inteligencia” sobre el campo de batalla.
haySoldado()
que indica si hay algún soldado en la celda actual.rangoSoldado(colorEjercito)
que indica el rango del soldado perteneciente al ejército dado que hay en la celda actual.haySoldadoHacia(dir)
que indica si hay algún soldado en direccióndir
.gradoSoldadoMasCercano(dir, colorEjercito)
que devuelve el grado del soldado más cercano en direccióndir
, perteneciente al ejército correspondiente.haySoldadoALaVista(dir, colorEjercito)
que indica si hay algún soldado de ese ejército a la vista, o sea: si miramos en línea recta haciadir
lo primero que vemos es un soldado de ese color.haySuperiorALaVista(dir, colorEjercito)
que indica si hay algún superior a la vista en esa dirección. Para saber si hay un superior, hay que comparar con el rango del soldado que está en la celda actual (se puede asumir que hay uno). Si en el trayecto hacia el superior hay algún enemigo, la función debería devolverFalse
. Ayudín: lo primero que hay que mirar es si hay un soldado de mi bando a la vista en la dirección requerida.puedeAvanzarHacia(colorEjercito, dirAvance)
que indica si un soldado ubicado en la celda actual podría avanzar en una dirección dada. Para poder avanzar, es necesario que haya aliados a mis costados: por ejemplo para poder moverme alNorte
tiene que haber un soldado de mi mismo bando hacia elEste
y hacia elOeste
. Ayudín: revisar las funciones del machete que trabajan con direcciones.
Parte 2: estrategia
En esta segunda parte nos vamos a encargar de mover distintos soldados por el campo de batalla.
MoverSoldado(colorEjercito, dir)
que mueva al soldado de la celda actual en la dirección dada. Ayudín: como no sabemos el rango del soldado, una vez que nos movamos no sabremos cuántas bolitas había en la posición original. El truco acá es construir primero otro procedimientoMoverBolitas(color, cantidad, direccion)
y con ese definir el que se pide.AvanzarLoQuePuedaHacia(colorEjercito, dirAvance)
que avance al soldado de la celda actual todo lo que pueda en la dirección dada, teniendo en cuenta lo ya mencionado sobre los movimientos de los soldados.ReportarseConSuperiorHacia(colorEjercito, dir)
asumiendo que hay un superior en la dirección dada, avanzar hasta quedar al lado de él.ReportarseConSuperior(colorEjercito)
asumiendo que hay un superior en alguna de las cuatro direcciones, avanzar hasta quedar al lado de él.