Ya contamos con la estructura básica de nuestro juego con el Contenido Gráfico, una clase Jugador, donde posee los atributos necesarios como la vida de la aeronave, la puntuación acumulada, despliegue del elemento en la escena, entre otros. El siguiente paso para nuestro juego de ejemplo será incluir la interacción del usuario.
En la clase Game1.cs
Agregaremos tres nuevos atributos a la clase principal de nuestro juego. Anéxalas debajo de la declaración Jugador jugador.
KeyboardState KeyboardActual; KeyboardState KeyboardPrevio; float jugadorVel;
En Initialize, asignaremos un valor arbitrario para la velocidad de desplazamiento de la nave:
protected override void Initialize()
{
jugador = new Jugador();
jugadorVel = 8.0f;
base.Initialize();
}
Ahora deberás agregar un método UpdateJugador, donde este irá chequeando si alguna de las teclas de dirección del teclado ha sido presionada, y en caso que lo estén, se suman o restan el valor de velocidad de la nave para desplazarla a lo largo de la pantalla. Al final de estas condiciones, usando el método Clamp, validamos que la nave del jugador permanezca dentro de las dimensiones de la pantalla. Pega este método antes del método Update.
private void UpdateJugador(GameTime gameTime)
{
if (KeyboardActual.IsKeyDown(Keys.Left))
{
jugador.Position.X -= jugadorVel;
}
if (KeyboardActual.IsKeyDown(Keys.Right))
{
jugador.Position.X += jugadorVel;
}
if (KeyboardActual.IsKeyDown(Keys.Up))
{
jugador.Position.Y -= jugadorVel;
}
if (KeyboardActual.IsKeyDown(Keys.Down))
{
jugador.Position.Y += jugadorVel;
}
jugador.Position.X = MathHelper.Clamp(jugador.Position.X, 0,
GraphicsDevice.Viewport.Width - jugador.Width);
jugador.Position.Y = MathHelper.Clamp(jugador.Position.Y, 0,
GraphicsDevice.Viewport.Height - jugador.Height);
}
Por último, evidentemente debemos invocar este método constantemente dentro del Game Loop. Eso se hace llamando UpdateJugador dentro del método Update, y previamente asignar los estados de teclado (KeyboardPrevio y KeyboardActual).
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back ==
ButtonState.Pressed) this.Exit();
KeyboardPrevio = KeyboardActual;
KeyboardActual = Keyboard.GetState();
UpdateJugador(gameTime);
base.Update(gameTime);
}
En este punto, el juego ya cuenta con una clase Jugador donde se despliega el elemento en escena, y además puede ser controlado con las flechas de dirección del teclado.
Ya con la interactividad del juego es un gran avance, sin embargo, todavía nos falta agregarle el factor diversión. No te preocupes que todo esto se ira implementando mas adelante y sin mayor dificultad. Puedes descargarte el proyecto en esta fase en el siguiente enlace:

