Buenas, ¿Qué tal?
Pues regresando al tema de mini juego “Duelo de círculos”, pues
por fin me decido a empezar por algún lado.
Comenzaré este
pequeño desarrollo creando una nueva carpeta llamada
“dueloDeCirculo” y dentro de ella otra, más llamada “base”
Dentro de base vamos a incluir todos los archivos que fui generando
en entradas anteriores. Estos son: ControlDeColisiones.lua,
gestorDeEscenas.lua y escena.lua.
La carpeta “base”
contendrá todos los elementos generales que después harán andar el
juego.
Además de los
archivos anteriormente mencionados, vamos a generar cuatro archivos
nuevos con los siguientes nombres:
jugador.lua:
Contendrá el código base para después diseñar sobre el al círculo
manejado por un jugador y el círculo manejado por el ordenador.
cpu.lua: cpu
será el encargado real de manejar al círculo enemigo, este proceso
lo hará en base a una serie de condiciones y acciones programadas
por nosotros (Algo así como una máquina de estados pero a lo
sencillo)
condiciones.lua:
Este módulo contendrá el código necesario, para después poder
diseñar las condiciones de nuestro contrincante.
Acciones.lua:
Este módulo contendrá lo necesario para después poder programar
acciones a nuestro contrincante.
En suma cpu.lua,
condiciones.lua y acciones.lua, trabajan juntos para poder diseñar
un poco la picardía del contrincante.
Bueno ¿Qué es
todo esto de condiciones y acciones?
Pues va sobre como
escanea y reacciona nuestro contrincante ante una situación real.
Digamos que una
acción es una tarea que el enemigo está ejecutando en tiempo real,
por ejemplo: atacar, defender o recargar y las condiciones, son las
decisiones a tomar sobre el terreno para saber si a de ejecutar, una o
otra acción, con un mínimo de inteligencia.
Las acciones y
condiciones de nuestro juego van a ser muy sencillas, pero servirán
y las mismas son las siguientes:
Acciones
Vagar: Hará
que el enemigo se mueva de izquierda a derecha de manera aleatoria,
hasta hacer contacto con el jugador,
Atacar: Esta
acción se encargará de mover al enemigo hasta una zona propicia
donde poder alcanzar con sus disparos al jugador humano.
Defender:
Esta acción será la encargada de hacer huir al enemigo cuando este
se encuentre bajo el fuego del jugador o completamente sin balas.
Recargar:
Esta acción será la encargada de mover al enemigo hasta la posición
del nuevo cargador.
Condiciones
Esta cerca:
Se encarga de evaluar si el jugador está cerca, si es el caso
generalmente lanzará la acción “atacar”
Coger distancia:
Evalúa la distancia existente entre el y el jugador en caso de
huida.
Si no balas:
Evalúa si quedan balas, si es así evalúa si quedan cargadores, si
es así lanzará la acción recargar.
Bala a la vista:
Evalúa si está siendo atacado por el jugador, si es así lanzará
la acción “defender”
Bien, pues dicho
todo esto, pasaremos a construir el primero de los cuatro restantes,
este será “jugador.lua”
--[[Tabla que representa un jugador de la
partida]]--
colisiones=require("base/ControlDeColisiones")
Jugador=
{
--Contendra la estructura de un círculo
figura=nil,
--Vidas del jugador
vidas=3,
--Balas del jugador
balas=6,
--Cargadores del jugador
cargador=2,
--Velocidad de desplazamiento del jugador
velocidad=200,
--Variables usadas a modo de semáforo para
advertir que esta haciendo el jugador
recargando=false,
impacto=false,
disparando=false,
--Servirá para indicar a la cpu que está
haciendo es jugador, desplazarse a la izquierda, a la derecha o si
está parado.
estado="parado"
}
--Función que retorna una nueva tabla que
representa a un jugador
function Jugador:new()
obj = { };
setmetatable(obj, self);
self.__index = self;
return obj;
end
--[[Funciones a sobreescribir para darle vida a
los diferentes jugadores, humano y cpu]]--
function Jugador.update(dt)end
function Jugador.draw()end
return Jugador
En próximas entradas hablaremos más de este pequeño ejemplo. Por
ahora, hasta la próxima.
No hay comentarios:
Publicar un comentario