(Volver al índice)
Como el rediseño usando clases ha supuesto muchos cambios, en la entrega anterior habíamos creado una primera versión, que todavía tenía muchas carencias:
private Fuente fuenteSans18; // Declaramos la variable como atributo
fuenteSans18 = new Fuente("FreeSansBold.ttf",18); // Leemos, en el constructor
Hardware.EscribirTextoOculta( // Usamos:
"Hola", // texto
110,440, // posición
0xFF, 0xAA, 0xAA, // color (R,G,B)
fuenteSans18); // fuente
public void Dibujar()
{
...
Hardware.EscribirTextoOculta("Nivel",380,60,
0x88, 0xFF, 0xFF, fuenteSans14);
Hardware.EscribirTextoOculta(miJuego.GetNumeroNivel().ToString(),420,60,
0xFF, 0xFF, 0x88, fuenteSans14);
Hardware.EscribirTextoOculta("Vidas",480,60,
0x88, 0xFF, 0xFF, fuenteSans14);
for (byte i=0; i<miJuego.GetPersonaje().GetNumVidas()-1; i++)
iconoVida.Dibujar( (short)(520+i*30),48);
}
public class Marcador
{
// Atributos
private Juego miJuego; // Para comunicar con el resto de elementos
...
// Constructor
public Marcador(Juego j)
{
miJuego = j;
...
miMarcador = new Marcador(this);
// Anima los enemigos y demás elementos del nivel.
// Cambia el nivel si corresponde.
private void SiguienteFotograma()
{
miNivel.SiguienteFotograma();
if (miNivel.GetCompleto())
SiguienteNivel();
}
// Bucle principal del juego
public void BuclePrincipal()
{
// Parte repetitiva ("bucle de juego")
NuevaPartida();
do {
DibujarPantalla();
ComprobarTeclas();
ComprobarColisiones();
SiguienteFotograma();
// Pausa de 40 ms, para velocidad de 25 fps (1000/40 = 25)
Hardware.Pausa(40);
// Fin de la parte repetitiva
} while (! partidaTerminada); // Hasta tecla ESC
}
// ColisionCon, en "ElemGrafico"
public bool ColisionCon(ElemGrafico otroElem)
{
if ((otroElem.x+otroElem.ancho > x)
&& (otroElem.y+otroElem.alto > y)
&& (x+ancho > otroElem.x)
&& (y+alto > otroElem.y))
return true;
else
return false;
}
// ComprobarColisiones, en "Juego"
private void ComprobarColisiones()
{
foreach (Enemigo e in miNivel.GetEnemigos() )
if ( e.ColisionCon(miPersonaje) )
{
miPersonaje.PerderVida();
if (miPersonaje.GetNumVidas() == 0)
PartidaTerminada();
break; // Para no perder 2 vidas si se choca con 2
}
}
Como siempre, todo el fuente del proyecto está en: code.google.com/p/fruityfrank
(Volver al índice)