jueves, 31 de marzo de 2016

Duelo de círculos mini juego en love2d (Primer contacto)


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