domingo, 1 de abril de 2012

Puntuación y Vida

Carrera de XNA – Capítulo 4 – Artículo 11

shooter_scoreLa última parada en nuestro capítulo integrador es la visualización del puntaje (dependiendo de cuantas naves enemigas matemos) y la vida del jugador (dependiendo de cuanto nos hayan pegado.

Utilizaremos un archivo de definición de fuentes, como hemos visto en capítulos anteriores, para establecer que tipografía (familia de fuente y tamaño) usar.

Para esto definiremos dentro de nuestro Game1  dos campos. El campo score para guardar el puntaje y el campo font para cargar la fuente a utilizar.

//Number that holds the player score
int score;
// The font used to display UI elements
SpriteFont font;

Inicializamos la variable score para tener el valor en 0 al momento de comenzar el juego.

Dentro del método Initialize() ponemos el siguiente código.

//Set player's score to zero
score = 0;

Cargamos el archivo spritefont dentro del LoadContent() con las siguientes líneas.

// Load the score font
font = Content.Load<SpriteFont>("Fuente/gameFont");

Lo siguiente es actualizar el puntaje a medida que eliminamos a nuestros enemigos. Para esto dentro del método UpdateEnemies() colocamos la siguiente línea de código debajo de la reproducción del sonido de explosión añadido en el artículo anterior (explosionsSound.Play()).

//Add to the player's score
score += enemies[i].Value;

A continuación, escribiremos el código necesario para dibujar el puntaje actual y la vida del jugador. Dentro del método Draw() colocamos:

// Draw the score
spriteBatch.DrawString(font, "puntos: " + score, new Vector2(GraphicsDevice.Viewport.TitleSafeArea.X, GraphicsDevice.Viewport.TitleSafeArea.Y), Color.White);
// Draw the player health
spriteBatch.DrawString(font, "salud: " + jugador.Health, new Vector2(GraphicsDevice.Viewport.TitleSafeArea.X, GraphicsDevice.Viewport.TitleSafeArea.Y + 30), Color.White);

Para finalizar el manejo de puntos y también el tutorial completo, solo nos resta detectar si la vida del jugador llegó al límite inferior (en este caso 0) para reiniciar el juego y borrar los puntos logrados. Dentro del método UpdatePlayer(), al final del mismo, colocamos el código a continuación.

// reset score if player health goes to zero
if (jugador.Health <= 0)
{
    jugador.Health = 100;
    score = 0;
}

 

Versión Final

Así, tenemos nuestro juego completo con puntaje, efectos de sonidos, música, imagenes de fondo, imagenes para el jugador y el enemigo, detectamos las colisiones y hasta disparamos lasers. La imagen final de nuestro juego debería verse de la siguiente manera:

image

Podemos bajar la versión final desde el siguiente link: http://sdrv.ms/JuumiT

8 comentarios:

  1. Claudio Esteban Gonzalez Rojas24 de agosto de 2012 a las 19:28

    Muchas gracias, realmente ha sido de mucha utilidad este curso de XNA. Gracias por la dedicación y el contenido de calidad que prepararon.

    ResponderEliminar
  2. gracias por dar la enseñanza para poder seguir avanzando solo falta el ajuste de que el jugador ejecute el laser y que el juego tenga un fin y un comienzo gracias, Dios los bendiga Cristo viene pronto, "Maranatha", Busquenlo ya que el ofrece la salvacion de este mundo...

    ResponderEliminar
  3. Gracias por el curso, habra alguno de 3D pronto o alguna fuente donde pueda investigar sobre uno en 3D

    ResponderEliminar
  4. Muchas gracias por el curso, totalmente agradecido.

    Excelente trabajo y muy bien explicado.

    :)

    ResponderEliminar
  5. Muy buen tutorial. Empezando con lo básico
    .

    ResponderEliminar
  6. Muchas gracias por sus aportes. Apenas estoy empezando y creo que este tutorial me ha dado buenas bases para el desarrollo de mis videojuegos.

    ResponderEliminar
  7. Agradecido inmensamente, el curso esta bién planteado; Pero me gustaría que los ejemplos los dieran también en VB...Gracias

    ResponderEliminar
  8. no me resta nada por decir que muchísimas gracias por el esfuerzo la verdad es que aprendí muchísimas cosas aun tengo un largo camino por delante pero esto fue un buen comienzo, aunque tengo que confesar que cuando entre al curso me toco devolverme a aprender un poco mas sobre C# :D me perdía con las clases y los objetos y lo demás pero bueno nada que con esfuerzo no se pueda lograr

    muchas gracias

    ResponderEliminar