Iniciar juego de arqueros en el bosque

Arqueros en el bosque con C – Programación de juego

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):

Cuadrícula de bosque para arqueros - Juego programado en C
Cuadrícula de bosque para arqueros – Juego programado en C

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

Solicitar tamaño de tablero, jugador y movimiento - Arqueros en el bosque con C
Solicitar tamaño de tablero, jugador y movimiento – Arqueros en el bosque con C

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

Iniciar nuevo round cuando el flechazo es acertado
Iniciar nuevo round cuando el flechazo es acertado

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

Mover jugador en el bosque - Juego programado en C
Mover jugador en el bosque – Juego programado en C

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

Disparar flecha en el bosque - Cazadores
Disparar flecha en el bosque – Cazadores

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

Iniciar juego de arqueros en el bosque
Iniciar juego de arqueros en el bosque

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.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario