Bladimir Díaz Campos
Agenda
 Mostrar el inicio de la creación de un juego.
 Algoritmos y como testear y mejorar uno.
 Averiguar como un programa puede detectar cambios
del estado de los botones de un gamepad.
 Crear un programa que cuente los eventeos para crear
un juego llamado:”Button Bashing”
Crear un juego
 Hasta ahora conocemos como están estructurados los
juegos en XNA y como se adiciona el código c# dentro
de los métodos que controlan el juego.
 Podemos leer la entrada del usuario utilizando un
gamepad.
 Podido mostrar mensajes de texto en la pantalla bajo el
control del programa.
 Ahora vamos a crear nuestro primer (propio) juego.
 Hay muchos juegos comerciales basados en la idea de
este juego
La idea del juego
 La idea de este juego es ver
cuantas veces un jugador
puede presionar un botón en
10 segundos.
 Hay un gran número de juegos
que simulan deportes que
trabaja con este método
 Muchos juegos tienen este tipo
de juego como un “mini juego”
El diseño del juego
 Este juego puede incrementar un contador cada vez
que uno de los botones del gamepad es presionado y
soltado.
 Eso significa que necesitamos una variable contador
que almacena el valor actual del contador.
 Cada vez que el método update detecta la presión de
un botón, el contador será incrementado.
 El método Draw dibujará el valor actual del contador.
 La versión final del juego tiene un contador para cada
Botón del gamepad, por lo que el juego puede soportar
la acción de múltiples jugadores.
Iniciando la versión para un solo
jugador
 Sus vamos a comenzar haciendo una versión del juego
para un solo jugador.
 Podemos expandir luego de soporte para múltiples
jugadores por juego y aún para múltiples gamepad.
 El juego soportara eventualmente hasta 16 jugadores.
 Comenzar con soporte para un jugador, mantendrá las
cosas simples.
El mundo del juego para Button
Bash
 El mundo del juego tiene dos items.
 La variable count que almacena el número de presiones.
 La variable font utilizada para dibujar texto.
 La variable count es del tipo int y puede almacenar
valores hasta 4,000,000,000
 Esto debería ser suficiente para la mayoría de
jugadores
// Game World
SpriteFont font;
int count;
Limpiar el contador al inicio del
juego
 Al inicio del juego el valor de count debe ser cero.
 Podemos utilizar el botón Start del gamepad.
 Cuando el boton Start es presionado c el valor de count
es configurado de nuevo a cero
GamePadState pad1 = GamePad.GetState(PlayerIndex.One);
if (pad1.Buttons.Start == ButtonState.Pressed)
{
count = 0;
}
Mostrar el contador dentro del
método Draw
 El método Draw contiene el código necesario para
dibujar en pantalla el valor actual de count.
 Utilizamos el método ToString proveído por la variable
count para obtener una versión de texto del valor
almacenado
string countString = count.ToString();
Vector2 countVector = new Vector2(50, 400);
spriteBatch.Begin();
spriteBatch.DrawString(font, countString,
countVector, Color.Red);
spriteBatch.End();
Contar las veces que se presiona
 El método Update es donde el estado del juego debe
ser actualizado.
 Si el botón ha sido presionado el contador debe de
incrementarse ninguno
if (pad1.Buttons.B == ButtonState.Pressed)
{
count++;
}
Demostración
 Cual es el requerimiento que hace falta
Encontrando el fallo
 Sabemos que el método Update es llamado 60 veces en
un segundo.
 Cada vez que el método es llamado, verificamos el
botón B del gamepad e incrementamos el contador si
el botón esta presionado.
 Pero esto no lo que queremos.
 Queremos incrementar el contador cuando el botón
cambie de estado de arriba hacia abajo, y no sólo
cuando el botón esté presionado.
Señales y límites
 El contador no debe de incrementarse cuando el botón
este presionado abajo.
 Debe incrementarse justo cuando es presionado.
 El programa puede detectar este límite.
 Todos los teclados trabajan de manera similar.
Detectando un límite
 La segunda vez que el método Update es llamado el
estado del voto ha cambiado de arriba hacia abajo.
 El juego debe detectar este cambio
Mundo del juego para la prueba
del Button Bash
 El mundo del juego ahora contiene una variable extra.
 Esta registra el estado previo del gamapad.
 Esto permite al juego comparar el estado actual del
estado de una tecla con previo estado.
 El código en el método Update puede testear un
cambio de estado del botón.
// Game World
SpriteFont font;
int count;
GamePadState oldpad1;
Un algoritmo de detección de limites
 Un algoritmo es la manera de resolver un problema.
 El algoritmo de detección es:
 “Si el estado previo del botón es arriba y el estado actual
del botón estaba, el contador debe ser incrementado ”
 Ahora necesitamos convertir este algoritmo a un
lenguaje como C# y luego adicionarlo al método
Update
El código
 Este es el código que implementa el algoritmo.
 Este incrementará el Valor de la variable count
solución botón ha cambiado de estado de liberado a
presionado.
 Note que además almacena el estado antiguo para la
siguiente llamada del método Update
if ( oldpad1.Buttons.B == ButtonState.Released &&
pad1.Buttons.B == ButtonState.Pressed )
{
count++;
}
oldpad1 = pad1; // remember the state for next time
Demostración
 Esta versión utiliza el método de detección mejorado
Fallos y algoritmos
 La primera versión del juego no trabajaba porque el
algoritmo estaba erróneo.
 Nuestro entendimiento de cómo solventar el problema
estaba erróneo
 Este es el peor tipo de terror en programación.
 Con frecuencia un programa trabajará bien hasta que
se obtengan valores para los cuales no se diseñó:
 La edad de 1 millón en un programa de pensiones
 La presión de -50 en un cálculo de descuento
Resumen
 La primera idea que obtenemos para implementado un
juego puede no ser la que sea funcional.
 La descripción de la solución al problema que es
llamada algoritmo
 Algunas entradas al programa serán por niveles (alto o
bajo) y otros serán eventos (cambio del estado).
 Para que un juego XNA detecte cambios en el estado,
debe contener datos del mundo del juego para retener
el estado previo del juego
Verdadero o falso
 Un algoritmo debe ser escrito en C#
 Para detectar el nivel de un signo, un programa debe
retener el valor del predio signo
 Un programa XNA puede solamente detectar límites
de un solo botón del gamepad
 El método Update en los juegos XNA es llamado 60
veces en un segundo
Verdadero o falso
 Un algoritmo debe ser escrito en C#
 Para detectar el nivel de un signo, un programa debe
retener el valor del predio signo
 Un programa XNA puede solamente detectar límites
de un solo botón del gamepad
 El método Update en los juegos XNA es llamado 60
veces en un segundo
Verdadero o falso
 Un algoritmo debe ser escrito en C#
 Para detectar el nivel de un signo, un programa debe
retener el valor del predio signo
 Un programa XNA puede solamente detectar límites
de un solo botón del gamepad
 El método Update en los juegos XNA es llamado 60
veces en un segundo
Verdadero o falso
 Un algoritmo debe ser escrito en C#
 Para detectar el nivel de un signo, un programa debe
retener el valor del predio signo
 Un programa XNA puede solamente detectar límites
de un solo botón del gamepad
 El método Update en los juegos XNA es llamado 60
veces en un segundo
Verdadero o falso
 Un algoritmo debe ser escrito en C#
 Para detectar el nivel de un signo, un programa debe
retener el valor del predio signo
 Un programa XNA puede solamente detectar límites
de un solo botón del gamepad
 El método Update en los juegos XNA es llamado 60
veces en un segundo
Agenda de trabajo
 Construir un juego que cuente el número de veces que
se presiona un botón en particular.
 Extender el juego para permitir que varios jugadores
compitan al mismo tiempo.
 Crear un juego que automáticamente en reaccione
cuando un jugador se integra.
 Averiguar cómo utilizar la compilación condicionar
para hacer programas más fáciles de probar
Extendiendo a cuatro jugadores
 La presente versión del
botón solamente trabajar
con un jugador.
 El siguiente paso es
extender este soporte
para cuatro jugadores en
un solo juego.
 Cada jugador debe
presionar un botón.
 Es posible adicionarlo
más si así se desea.
Variables contador para el
Gamepad 1
 Cada una de estas variables almacenada un Valor de
contado para uno de los botones del gamepad1.
 El identificador de la variable ha sido seleccionador
para ser claro, que botón va a trabajar esa variable
 Se crearán variables como nombres similares para
otros gamepad
int acount1;
int bcount1;
int xcount1;
int ycount1;
Va configurando las posiciones en
donde se mostraran
 Cada una de las variables
contadores debe ser mostrado
en la pantalla.
 El mundo del juego también
contienen una posición a
mostrar para cada valor
 Estos son arregladas en la
misma posición que tienen
dentro de un gamepad
int acount1;
int bcount1;
int xcount1;
int ycount1;
Comportamiento del método
Update
 El comportamiento del mercado es solamente activar
sí el gamepad es conectado
pad1 = GamePad.GetState(PlayerIndex.One);
if (pad1.IsConnected)
{
if (oldpad1.Buttons.A == ButtonState.Released &&
pad1.Buttons.A == ButtonState.Pressed)
{
acount1++;
}
// repeat for the other gamepad buttons
}
Comportamiento del método draw
 Los contadores son mostrados sí el Gamepad es
conectado
 El valor de Pad1 es parte de las variables del ,mundo
del juego
if (pad1.IsConnected)
{
spriteBatch.DrawString(font, acount1.ToString(),
apos1, Color.Green);
spriteBatch.DrawString(font, bcount1.ToString(),
bpos1, Color.Red);
spriteBatch.DrawString(font, xcount1.ToString(),
xpos1, Color.Blue);
spriteBatch.DrawString(font, ycount1.ToString(),
ypos1, Color.Yellow);
}
Demostración
 En esta versión del juego soportar hemos hasta cuatro
Gamepad
 Solamente muestra valores para los Gamepad que han
sido conectados
Diseño del programa
 Esta versión del programa trabajo bien.
 Puede soportar hasta dieciséis jugadores.
 Sin embargo, el diseño no es tan bueno, ya que las
mismas sentencia se repiten entrada en Gamepad
 Cualquier falla en el programa debe ser corregido cuatro
veces.
 Luego vamos a ver, diseñar un programa con código
que pueda ser rehusado
Diseño de prueba
 La versión final del juego trabajará con hasta cuatro
Gamepad
 Sin embargo, cuando hacemos la prueba
probablemente no tengamos disponible los cuatro
Gamepad
 Es necesario encontrar alguna manera de probar el
programa sin la necesidad de todo el hardware
 Este diseño de pruebas, es muy importante cuando
creamos proyectos de gran escala
Prueba con un solo Gamepad
 Una manera de probar con un solo Gamepad es copiar
el Valor del primer Gamepad dentro de la variable que
es utilizada por el segundo
// test code – copy the value of pad1 into pad2
pad2 = pad1;
if (pad2.IsConnected)
{
// code for gamepad 2
}
Utilizando una compilación
condicional
 Necesitamos adicionarlo sentencias para permitir al
juego ser probado con un solo Gamepad
 Las sentencias copian los datos del Gamepad uno
dentro de las variables Gamepad de los otros que se
utilizan.
 Esto nos permite prorrogar la versión de cuatro
jugadores del juego con un solo Gamepad.
 Sin embargo, necesitamos recordar que queremos
quitar las sentencias de pruebas antes de enviar el
juego finalizado
Uso de la directiva condicional #if
 Esto luce como una decisión de un programa cuando este
apartado, pero no es lo que está pasando.
 El código fuente puede contener directivas de pre
procesador
 Un directiva de la pre procesador se inicia con el carácter #
 La directiva #if controla que código es compilador a
#if test
// test code - copy the value of pad1 into pad4
pad4 = pad1;
#endif
El proceso de compilación
 El trabajo de compilar es tomar el código C# y
convertirlo a instrucciones de bajo nivel la que se
utilizan en la plataforma seleccionada.
 El pre procesador es el frente del compilador y procesa
el código fuente antes de que este alcance al
compilador
...
#if test
// test code
pad4 = pad1;
#endif
...
Pre-processor
Compiler
Low
Level
Instructions
La directiva de compilación
condicional
 Las directivas de pre procesador comienzan con el carácter
#.
 Si el símbolo test la ha sido definido, el pre procesador
pasara la asignación de sentencia dentro del compilador y
aparecerá la en la salida que el compilador genera.
 Síel símbolo test no está definido en la sentencia no pasará
al compilador
#if test
// test code - copy the value of pad1 into pad4
pad4 = pad1;
#endif
Definiendo un símbolo
 Los símbolos son definidos al inicio del programa.
 #define es el comando de pre procesador para definir
un símbolo.
 El símbolo puede ser utilizado para controlar una
compilación condicional.
 Es posible definir tanto símbolos como se desee en
dentro de un programa
#define test
Demostración
Uso de la compilación condicional
 Cuando un programa es creado, es muy buena idea
decidir cómo va a ser probado.
 Muchos de los juegos utilizan compilación condicional
para permitir que pequeños códigos sean movidos a
través de el código.
 Los juegos además utiliza una compilación condicional
para hacer más fácil la producción de versiones demo
de un juego
Resumen
 Es posible escalar un programa replicando el mismo
código para adicionar comportamientos.
 Sin embargo, desde un buen punto de diseño
extradición no es la mejor manera para escribir
programas.
 Cuando creamos un programa es necesario poner
atención a cómo éste será aprobado.
 Es posible utilizar la compilación condicional para
adicionar pruebas de código que pueden ser fácilmente
intercambiables cuando un programa es construido
Verdadero o falso
 La propiedad IsConnected de una variable
Gamepadstate permite a los juegos determinar si aún
Gamepad está conectado a la consola
 Para que un juego se ejecute debe tener conectado al
menos un Gamepad
 La compilación condicional es administrado por el
compilador llamado pre procesador
 Los comandos del pre procesador comienzan como el
carácter #
Verdadero o falso
 La propiedad IsConnected de una variable
Gamepadstate permite a los juegos determinar si aún
Gamepad está conectado a la consola
 Para que un juego se ejecute debe tener conectado al
menos un Gamepad
 La compilación condicional es administrado por el
compilador llamado pre procesador
 Los comandos del pre procesador comienzan como el
carácter #
Verdadero o falso
 La propiedad IsConnected de una variable
Gamepadstate permite a los juegos determinar si aún
Gamepad está conectado a la consola
 Para que un juego se ejecute debe tener conectado al
menos un Gamepad
 La compilación condicional es administrado por el
compilador llamado pre procesador
 Los comandos del pre procesador comienzan como el
carácter #
Verdadero o falso
 La propiedad IsConnected de una variable
Gamepadstate permite a los juegos determinar si aún
Gamepad está conectado a la consola
 Para que un juego se ejecute debe tener conectado al
menos un Gamepad
 La compilación condicional es administrado por el
compilador llamado pre procesador
 Los comandos del pre procesador comienzan como el
carácter #
Verdadero o falso
 La propiedad IsConnected de una variable
Gamepadstate permite a los juegos determinar si aún
Gamepad está conectado a la consola
 Para que un juego se ejecute debe tener conectado al
menos un Gamepad
 La compilación condicional es administrado por el
compilador llamado pre procesador
 Los comandos del pre procesador comienzan como el
carácter #

Presentacion610

  • 1.
  • 2.
    Agenda  Mostrar elinicio de la creación de un juego.  Algoritmos y como testear y mejorar uno.  Averiguar como un programa puede detectar cambios del estado de los botones de un gamepad.  Crear un programa que cuente los eventeos para crear un juego llamado:”Button Bashing”
  • 3.
    Crear un juego Hasta ahora conocemos como están estructurados los juegos en XNA y como se adiciona el código c# dentro de los métodos que controlan el juego.  Podemos leer la entrada del usuario utilizando un gamepad.  Podido mostrar mensajes de texto en la pantalla bajo el control del programa.  Ahora vamos a crear nuestro primer (propio) juego.  Hay muchos juegos comerciales basados en la idea de este juego
  • 4.
    La idea deljuego  La idea de este juego es ver cuantas veces un jugador puede presionar un botón en 10 segundos.  Hay un gran número de juegos que simulan deportes que trabaja con este método  Muchos juegos tienen este tipo de juego como un “mini juego”
  • 5.
    El diseño deljuego  Este juego puede incrementar un contador cada vez que uno de los botones del gamepad es presionado y soltado.  Eso significa que necesitamos una variable contador que almacena el valor actual del contador.  Cada vez que el método update detecta la presión de un botón, el contador será incrementado.  El método Draw dibujará el valor actual del contador.  La versión final del juego tiene un contador para cada Botón del gamepad, por lo que el juego puede soportar la acción de múltiples jugadores.
  • 6.
    Iniciando la versiónpara un solo jugador  Sus vamos a comenzar haciendo una versión del juego para un solo jugador.  Podemos expandir luego de soporte para múltiples jugadores por juego y aún para múltiples gamepad.  El juego soportara eventualmente hasta 16 jugadores.  Comenzar con soporte para un jugador, mantendrá las cosas simples.
  • 7.
    El mundo deljuego para Button Bash  El mundo del juego tiene dos items.  La variable count que almacena el número de presiones.  La variable font utilizada para dibujar texto.  La variable count es del tipo int y puede almacenar valores hasta 4,000,000,000  Esto debería ser suficiente para la mayoría de jugadores // Game World SpriteFont font; int count;
  • 8.
    Limpiar el contadoral inicio del juego  Al inicio del juego el valor de count debe ser cero.  Podemos utilizar el botón Start del gamepad.  Cuando el boton Start es presionado c el valor de count es configurado de nuevo a cero GamePadState pad1 = GamePad.GetState(PlayerIndex.One); if (pad1.Buttons.Start == ButtonState.Pressed) { count = 0; }
  • 9.
    Mostrar el contadordentro del método Draw  El método Draw contiene el código necesario para dibujar en pantalla el valor actual de count.  Utilizamos el método ToString proveído por la variable count para obtener una versión de texto del valor almacenado string countString = count.ToString(); Vector2 countVector = new Vector2(50, 400); spriteBatch.Begin(); spriteBatch.DrawString(font, countString, countVector, Color.Red); spriteBatch.End();
  • 10.
    Contar las vecesque se presiona  El método Update es donde el estado del juego debe ser actualizado.  Si el botón ha sido presionado el contador debe de incrementarse ninguno if (pad1.Buttons.B == ButtonState.Pressed) { count++; }
  • 11.
    Demostración  Cual esel requerimiento que hace falta
  • 12.
    Encontrando el fallo Sabemos que el método Update es llamado 60 veces en un segundo.  Cada vez que el método es llamado, verificamos el botón B del gamepad e incrementamos el contador si el botón esta presionado.  Pero esto no lo que queremos.  Queremos incrementar el contador cuando el botón cambie de estado de arriba hacia abajo, y no sólo cuando el botón esté presionado.
  • 13.
    Señales y límites El contador no debe de incrementarse cuando el botón este presionado abajo.  Debe incrementarse justo cuando es presionado.  El programa puede detectar este límite.  Todos los teclados trabajan de manera similar.
  • 14.
    Detectando un límite La segunda vez que el método Update es llamado el estado del voto ha cambiado de arriba hacia abajo.  El juego debe detectar este cambio
  • 15.
    Mundo del juegopara la prueba del Button Bash  El mundo del juego ahora contiene una variable extra.  Esta registra el estado previo del gamapad.  Esto permite al juego comparar el estado actual del estado de una tecla con previo estado.  El código en el método Update puede testear un cambio de estado del botón. // Game World SpriteFont font; int count; GamePadState oldpad1;
  • 16.
    Un algoritmo dedetección de limites  Un algoritmo es la manera de resolver un problema.  El algoritmo de detección es:  “Si el estado previo del botón es arriba y el estado actual del botón estaba, el contador debe ser incrementado ”  Ahora necesitamos convertir este algoritmo a un lenguaje como C# y luego adicionarlo al método Update
  • 17.
    El código  Estees el código que implementa el algoritmo.  Este incrementará el Valor de la variable count solución botón ha cambiado de estado de liberado a presionado.  Note que además almacena el estado antiguo para la siguiente llamada del método Update if ( oldpad1.Buttons.B == ButtonState.Released && pad1.Buttons.B == ButtonState.Pressed ) { count++; } oldpad1 = pad1; // remember the state for next time
  • 18.
    Demostración  Esta versiónutiliza el método de detección mejorado
  • 19.
    Fallos y algoritmos La primera versión del juego no trabajaba porque el algoritmo estaba erróneo.  Nuestro entendimiento de cómo solventar el problema estaba erróneo  Este es el peor tipo de terror en programación.  Con frecuencia un programa trabajará bien hasta que se obtengan valores para los cuales no se diseñó:  La edad de 1 millón en un programa de pensiones  La presión de -50 en un cálculo de descuento
  • 20.
    Resumen  La primeraidea que obtenemos para implementado un juego puede no ser la que sea funcional.  La descripción de la solución al problema que es llamada algoritmo  Algunas entradas al programa serán por niveles (alto o bajo) y otros serán eventos (cambio del estado).  Para que un juego XNA detecte cambios en el estado, debe contener datos del mundo del juego para retener el estado previo del juego
  • 21.
    Verdadero o falso Un algoritmo debe ser escrito en C#  Para detectar el nivel de un signo, un programa debe retener el valor del predio signo  Un programa XNA puede solamente detectar límites de un solo botón del gamepad  El método Update en los juegos XNA es llamado 60 veces en un segundo
  • 22.
    Verdadero o falso Un algoritmo debe ser escrito en C#  Para detectar el nivel de un signo, un programa debe retener el valor del predio signo  Un programa XNA puede solamente detectar límites de un solo botón del gamepad  El método Update en los juegos XNA es llamado 60 veces en un segundo
  • 23.
    Verdadero o falso Un algoritmo debe ser escrito en C#  Para detectar el nivel de un signo, un programa debe retener el valor del predio signo  Un programa XNA puede solamente detectar límites de un solo botón del gamepad  El método Update en los juegos XNA es llamado 60 veces en un segundo
  • 24.
    Verdadero o falso Un algoritmo debe ser escrito en C#  Para detectar el nivel de un signo, un programa debe retener el valor del predio signo  Un programa XNA puede solamente detectar límites de un solo botón del gamepad  El método Update en los juegos XNA es llamado 60 veces en un segundo
  • 25.
    Verdadero o falso Un algoritmo debe ser escrito en C#  Para detectar el nivel de un signo, un programa debe retener el valor del predio signo  Un programa XNA puede solamente detectar límites de un solo botón del gamepad  El método Update en los juegos XNA es llamado 60 veces en un segundo
  • 27.
    Agenda de trabajo Construir un juego que cuente el número de veces que se presiona un botón en particular.  Extender el juego para permitir que varios jugadores compitan al mismo tiempo.  Crear un juego que automáticamente en reaccione cuando un jugador se integra.  Averiguar cómo utilizar la compilación condicionar para hacer programas más fáciles de probar
  • 28.
    Extendiendo a cuatrojugadores  La presente versión del botón solamente trabajar con un jugador.  El siguiente paso es extender este soporte para cuatro jugadores en un solo juego.  Cada jugador debe presionar un botón.  Es posible adicionarlo más si así se desea.
  • 29.
    Variables contador parael Gamepad 1  Cada una de estas variables almacenada un Valor de contado para uno de los botones del gamepad1.  El identificador de la variable ha sido seleccionador para ser claro, que botón va a trabajar esa variable  Se crearán variables como nombres similares para otros gamepad int acount1; int bcount1; int xcount1; int ycount1;
  • 30.
    Va configurando lasposiciones en donde se mostraran  Cada una de las variables contadores debe ser mostrado en la pantalla.  El mundo del juego también contienen una posición a mostrar para cada valor  Estos son arregladas en la misma posición que tienen dentro de un gamepad int acount1; int bcount1; int xcount1; int ycount1;
  • 31.
    Comportamiento del método Update El comportamiento del mercado es solamente activar sí el gamepad es conectado pad1 = GamePad.GetState(PlayerIndex.One); if (pad1.IsConnected) { if (oldpad1.Buttons.A == ButtonState.Released && pad1.Buttons.A == ButtonState.Pressed) { acount1++; } // repeat for the other gamepad buttons }
  • 32.
    Comportamiento del métododraw  Los contadores son mostrados sí el Gamepad es conectado  El valor de Pad1 es parte de las variables del ,mundo del juego if (pad1.IsConnected) { spriteBatch.DrawString(font, acount1.ToString(), apos1, Color.Green); spriteBatch.DrawString(font, bcount1.ToString(), bpos1, Color.Red); spriteBatch.DrawString(font, xcount1.ToString(), xpos1, Color.Blue); spriteBatch.DrawString(font, ycount1.ToString(), ypos1, Color.Yellow); }
  • 33.
    Demostración  En estaversión del juego soportar hemos hasta cuatro Gamepad  Solamente muestra valores para los Gamepad que han sido conectados
  • 34.
    Diseño del programa Esta versión del programa trabajo bien.  Puede soportar hasta dieciséis jugadores.  Sin embargo, el diseño no es tan bueno, ya que las mismas sentencia se repiten entrada en Gamepad  Cualquier falla en el programa debe ser corregido cuatro veces.  Luego vamos a ver, diseñar un programa con código que pueda ser rehusado
  • 35.
    Diseño de prueba La versión final del juego trabajará con hasta cuatro Gamepad  Sin embargo, cuando hacemos la prueba probablemente no tengamos disponible los cuatro Gamepad  Es necesario encontrar alguna manera de probar el programa sin la necesidad de todo el hardware  Este diseño de pruebas, es muy importante cuando creamos proyectos de gran escala
  • 36.
    Prueba con unsolo Gamepad  Una manera de probar con un solo Gamepad es copiar el Valor del primer Gamepad dentro de la variable que es utilizada por el segundo // test code – copy the value of pad1 into pad2 pad2 = pad1; if (pad2.IsConnected) { // code for gamepad 2 }
  • 37.
    Utilizando una compilación condicional Necesitamos adicionarlo sentencias para permitir al juego ser probado con un solo Gamepad  Las sentencias copian los datos del Gamepad uno dentro de las variables Gamepad de los otros que se utilizan.  Esto nos permite prorrogar la versión de cuatro jugadores del juego con un solo Gamepad.  Sin embargo, necesitamos recordar que queremos quitar las sentencias de pruebas antes de enviar el juego finalizado
  • 38.
    Uso de ladirectiva condicional #if  Esto luce como una decisión de un programa cuando este apartado, pero no es lo que está pasando.  El código fuente puede contener directivas de pre procesador  Un directiva de la pre procesador se inicia con el carácter #  La directiva #if controla que código es compilador a #if test // test code - copy the value of pad1 into pad4 pad4 = pad1; #endif
  • 39.
    El proceso decompilación  El trabajo de compilar es tomar el código C# y convertirlo a instrucciones de bajo nivel la que se utilizan en la plataforma seleccionada.  El pre procesador es el frente del compilador y procesa el código fuente antes de que este alcance al compilador ... #if test // test code pad4 = pad1; #endif ... Pre-processor Compiler Low Level Instructions
  • 40.
    La directiva decompilación condicional  Las directivas de pre procesador comienzan con el carácter #.  Si el símbolo test la ha sido definido, el pre procesador pasara la asignación de sentencia dentro del compilador y aparecerá la en la salida que el compilador genera.  Síel símbolo test no está definido en la sentencia no pasará al compilador #if test // test code - copy the value of pad1 into pad4 pad4 = pad1; #endif
  • 41.
    Definiendo un símbolo Los símbolos son definidos al inicio del programa.  #define es el comando de pre procesador para definir un símbolo.  El símbolo puede ser utilizado para controlar una compilación condicional.  Es posible definir tanto símbolos como se desee en dentro de un programa #define test
  • 42.
  • 43.
    Uso de lacompilación condicional  Cuando un programa es creado, es muy buena idea decidir cómo va a ser probado.  Muchos de los juegos utilizan compilación condicional para permitir que pequeños códigos sean movidos a través de el código.  Los juegos además utiliza una compilación condicional para hacer más fácil la producción de versiones demo de un juego
  • 44.
    Resumen  Es posibleescalar un programa replicando el mismo código para adicionar comportamientos.  Sin embargo, desde un buen punto de diseño extradición no es la mejor manera para escribir programas.  Cuando creamos un programa es necesario poner atención a cómo éste será aprobado.  Es posible utilizar la compilación condicional para adicionar pruebas de código que pueden ser fácilmente intercambiables cuando un programa es construido
  • 45.
    Verdadero o falso La propiedad IsConnected de una variable Gamepadstate permite a los juegos determinar si aún Gamepad está conectado a la consola  Para que un juego se ejecute debe tener conectado al menos un Gamepad  La compilación condicional es administrado por el compilador llamado pre procesador  Los comandos del pre procesador comienzan como el carácter #
  • 46.
    Verdadero o falso La propiedad IsConnected de una variable Gamepadstate permite a los juegos determinar si aún Gamepad está conectado a la consola  Para que un juego se ejecute debe tener conectado al menos un Gamepad  La compilación condicional es administrado por el compilador llamado pre procesador  Los comandos del pre procesador comienzan como el carácter #
  • 47.
    Verdadero o falso La propiedad IsConnected de una variable Gamepadstate permite a los juegos determinar si aún Gamepad está conectado a la consola  Para que un juego se ejecute debe tener conectado al menos un Gamepad  La compilación condicional es administrado por el compilador llamado pre procesador  Los comandos del pre procesador comienzan como el carácter #
  • 48.
    Verdadero o falso La propiedad IsConnected de una variable Gamepadstate permite a los juegos determinar si aún Gamepad está conectado a la consola  Para que un juego se ejecute debe tener conectado al menos un Gamepad  La compilación condicional es administrado por el compilador llamado pre procesador  Los comandos del pre procesador comienzan como el carácter #
  • 49.
    Verdadero o falso La propiedad IsConnected de una variable Gamepadstate permite a los juegos determinar si aún Gamepad está conectado a la consola  Para que un juego se ejecute debe tener conectado al menos un Gamepad  La compilación condicional es administrado por el compilador llamado pre procesador  Los comandos del pre procesador comienzan como el carácter #