Hoy te mostraré la solución a un ejercicio propuesto en C que trata sobre hacer el juego de Arqueros en el bosque.
El juego consiste de un bosque representado mediante una cuadrícula, como el que se presenta a continuación (la vista es aérea):
Donde X
representa un árbol. El objetivo del juego consiste en que 2 jugadores (arqueros) ingresan al bosque por extremos opuestos (J1 en 9-A y J2 en 1-I) y cada uno debe de intentar eliminar al otro.
Para ello en cada turno un arquero podrá elegir entre moverse un lugar o disparar un flechazo. Los flechazos se mueven en línea recta, una distancia máxima de 5 metros (asuma cada celda 1 metro).
Por otro lado un jugador no puede moverse a una celda donde hay un árbol y las flechas no pueden traspasarlos. Al recibir un flechazo el jugador pierde el round, las partidas se componen de 3 round y las gana el que gane 2 de ellos.
Veamos entonces cómo hacer este juego en ANSI C, C, C 99 o como le quieras llamar. Obviamente es compatible con C++.
Funcionamiento general del juego
Todo el escenario del juego (el bosque) será una matriz cuadrada. Vamos a tener métodos que recibirán el bosque como argumento.
Las funciones que tendremos son varias, entre ellas las que limpian el bosque, colocan los árboles (generando coordenadas aleatorias) y colocan los jugadores.
Igualmente vamos a tener algunas variables que llevarán la ubicación de los jugadores así como los flechazos recibidos. Lo más interesante será simular el disparo de la flecha y comprobar si no colisiona con un árbol, o si termina su recorrido sin impactar.
Preparando el bosque
Al inicio de todo debemos limpiar el bosque y colocar los árboles así:
Como puedes observar, se coloca la misma cantidad de árboles que la medida del tablero. Todos son colocados de manera aleatoria y en espacios vacíos.
Por cierto, tenemos una función que va a imprimir el bosque, imprimiendo encabezados, letras, números, etcétera:
Puedes ver la salida de esa función en la imagen que está al inicio de este post.
Solicitando datos
Veamos las funciones que van a preguntar el tamaño del tablero, solicitar direcciones, dar a elegir entre disparar o moverse, etcétera.
Para solicitar la dirección hacia donde se mueve el personaje usamos un ciclo while hasta que la dirección sea correcta. Este patrón se va a repetir en los siguientes métodos:
Por ejemplo, para solicitar la dirección del disparo:
La medida del bosque:
Por cierto, como puedes ver la medida debe ser de 5, 7 o 9. Técnicamente puede ser de cualquier longitud, ya solo haría falta ajustar las letras para que cuando se llegue a la Z se reinicie o algo así.
Finalmente veamos la que pregunta cuál arquero inicia el juego y también la que pregunta si el jugador desea disparar o moverse.
Nueva partida y nuevo round
Cada que haya una nueva partida o un nuevo round vamos a reiniciar ciertas variables. Por ejemplo, cuando se inicia un nuevo round, los jugadores se vuelven a colocar en las posiciones iniciales y los árboles se colocan aleatoriamente, pero los contadores de flechazos recibidos no se reinician.
En cambio, cuando se inicia una nueva partida se reinician los contadores de flechazos recibidos.
Mover jugador
Veamos uno de las dos funciones más importantes del juego arqueros en el bosque programado en C. En este caso para mover al jugador tenemos dos funciones: una que verifica si puede moverse y otra que mueve al jugador.
Recuerda que en este caso tenemos las coordenadas de manera global en variables separadas, por eso es que las modificamos:
Disparar
La otra función de este juego programado en C es la de disparar. Disfruté mucho programando esta función imaginando el recorrido de la flecha en mi mente para identificar si choca con un árbol, una pared, el jugador o termina su recorrido.
Por cierto, esta función aumenta el contador de los flechazos dependiendo del oponente. Ya que si dispara el jugador 1 y acierta, es porque le ha disparado al jugador 2 y viceversa.
Juego en C
Una vez que hemos visto las funciones más importantes veamos cómo es el ciclo principal del juego.
Tenemos la función principal que solo debe ser invocada una vez, ahí se pregunta el tamaño del bosque y, cuando se acaba de jugar, pregunta al usuario si quiere iniciar una nueva partida.
Después tenemos la función que inicia una nueva partida en donde solicitamos al jugador el movimiento, el arquero que inicia el juego, etcétera y comenzamos a jugar preguntando las opciones al usuario mientras vamos imprimiendo el bosque.
La partida termina cuando un jugador ha recibido dos flechazos:
Y así es como funciona este juego de arqueros o cazadores en el bosque programado con puro C.
Poniendo todo junto
Ya te he explicado el funcionamiento general del juego, las funciones más importantes y todo lo demás. Pero ahora te dejo aquí con el código completo.
Recuerda que todos mis programas son configurables así que puedes cambiar tamaños de tablero, rounds, etcétera.
Además, mis juegos están escritos (al menos los de C) pensando en la portabilidad, por lo que puedes ejecutar esto en Dev C++, CLion, compilarlo con GCC, clang, g++, etcétera.
También te lo dejo en línea por si quieres probarlo. Y por aquí te dejo con más tutoriales y ejemplos en C.