SlideShare ist ein Scribd-Unternehmen logo
1 von 49
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 #

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (18)

00 manu~1
00 manu~100 manu~1
00 manu~1
 
Unidad 4
Unidad 4Unidad 4
Unidad 4
 
Datalogger
DataloggerDatalogger
Datalogger
 
Componentes del ordenador
Componentes del ordenadorComponentes del ordenador
Componentes del ordenador
 
Unidad 4
Unidad 4Unidad 4
Unidad 4
 
Manual de ayuda a usuarios novatos
Manual de ayuda a usuarios novatosManual de ayuda a usuarios novatos
Manual de ayuda a usuarios novatos
 
Introduccion a windows 10
Introduccion a windows 10Introduccion a windows 10
Introduccion a windows 10
 
Guía e max_cómo desarrollar funciones con javascript para videojuegos online
Guía e max_cómo desarrollar funciones con javascript para videojuegos onlineGuía e max_cómo desarrollar funciones con javascript para videojuegos online
Guía e max_cómo desarrollar funciones con javascript para videojuegos online
 
Manual Pizarra Digital Interactiva
Manual Pizarra Digital InteractivaManual Pizarra Digital Interactiva
Manual Pizarra Digital Interactiva
 
Unidad 4
Unidad 4Unidad 4
Unidad 4
 
Presentación de diapositivas:Unidad didáctica 2: Un nuevo entorno
Presentación de diapositivas:Unidad didáctica 2: Un nuevo entornoPresentación de diapositivas:Unidad didáctica 2: Un nuevo entorno
Presentación de diapositivas:Unidad didáctica 2: Un nuevo entorno
 
Capitulo 3
Capitulo 3Capitulo 3
Capitulo 3
 
Comfiguracion de dispocitivos
Comfiguracion de dispocitivosComfiguracion de dispocitivos
Comfiguracion de dispocitivos
 
Unidad 4
Unidad 4Unidad 4
Unidad 4
 
Unidad4 121003115123-phpapp01
Unidad4 121003115123-phpapp01Unidad4 121003115123-phpapp01
Unidad4 121003115123-phpapp01
 
Patty
PattyPatty
Patty
 
Windows 2000 manual
Windows 2000 manualWindows 2000 manual
Windows 2000 manual
 
Unidad 4
Unidad 4Unidad 4
Unidad 4
 

Ähnlich wie Presentacion610

Ähnlich wie Presentacion610 (20)

Tutorial Cheat Engine 5.3
Tutorial Cheat Engine 5.3Tutorial Cheat Engine 5.3
Tutorial Cheat Engine 5.3
 
Presentacion810
Presentacion810Presentacion810
Presentacion810
 
Presentacion810
Presentacion810Presentacion810
Presentacion810
 
Presentacion321
Presentacion321Presentacion321
Presentacion321
 
Control remoto infrarrojo
Control remoto infrarrojo Control remoto infrarrojo
Control remoto infrarrojo
 
Controlremot
ControlremotControlremot
Controlremot
 
Presentacion05
Presentacion05Presentacion05
Presentacion05
 
Presentacion05
Presentacion05Presentacion05
Presentacion05
 
Informe tecnico-juego
Informe tecnico-juegoInforme tecnico-juego
Informe tecnico-juego
 
Manual de usuario proyecto programacion i
Manual de usuario proyecto programacion iManual de usuario proyecto programacion i
Manual de usuario proyecto programacion i
 
Windows 7
Windows 7Windows 7
Windows 7
 
Teclado visual basic 6.0
Teclado visual basic 6.0Teclado visual basic 6.0
Teclado visual basic 6.0
 
Calculadora Científica con Java
Calculadora Científica con JavaCalculadora Científica con Java
Calculadora Científica con Java
 
Presentacion322
Presentacion322Presentacion322
Presentacion322
 
Presentacion322
Presentacion322Presentacion322
Presentacion322
 
Array de Control
Array de ControlArray de Control
Array de Control
 
Array de Control
Array de ControlArray de Control
Array de Control
 
Desarrollo de aplicaciones en visual basic 6.0
Desarrollo de aplicaciones en visual basic 6.0Desarrollo de aplicaciones en visual basic 6.0
Desarrollo de aplicaciones en visual basic 6.0
 
Juego de dados en Visual
Juego de dados en VisualJuego de dados en Visual
Juego de dados en Visual
 
Juego de dados
Juego de dadosJuego de dados
Juego de dados
 

Mehr von Titiushko Jazz

Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)
Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)
Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)Titiushko Jazz
 
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)Titiushko Jazz
 
Unidad vii esp parte 2 introduccion a data warehouse y datamining
Unidad vii esp parte 2 introduccion a data warehouse y dataminingUnidad vii esp parte 2 introduccion a data warehouse y datamining
Unidad vii esp parte 2 introduccion a data warehouse y dataminingTitiushko Jazz
 
Unidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sqlUnidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sqlTitiushko Jazz
 
Tarea pronosticos eily
Tarea pronosticos eilyTarea pronosticos eily
Tarea pronosticos eilyTitiushko Jazz
 
Proyecto teórico práctico
Proyecto teórico prácticoProyecto teórico práctico
Proyecto teórico prácticoTitiushko Jazz
 

Mehr von Titiushko Jazz (20)

Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)
Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)
Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)
 
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)
 
Unidad vii esp parte 2 introduccion a data warehouse y datamining
Unidad vii esp parte 2 introduccion a data warehouse y dataminingUnidad vii esp parte 2 introduccion a data warehouse y datamining
Unidad vii esp parte 2 introduccion a data warehouse y datamining
 
Unidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sqlUnidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sql
 
Unidad ii esp parte 2
Unidad ii esp parte 2Unidad ii esp parte 2
Unidad ii esp parte 2
 
Unidad ii esp parte 1
Unidad ii esp parte 1Unidad ii esp parte 1
Unidad ii esp parte 1
 
Unidad i esp parte 2
Unidad i esp parte 2Unidad i esp parte 2
Unidad i esp parte 2
 
Unidad i esp parte 1
Unidad i esp parte 1Unidad i esp parte 1
Unidad i esp parte 1
 
Tarea pronosticos eily
Tarea pronosticos eilyTarea pronosticos eily
Tarea pronosticos eily
 
Sociedades limitadas
Sociedades limitadasSociedades limitadas
Sociedades limitadas
 
Rhu
RhuRhu
Rhu
 
Qué es un proyecto
Qué es un proyectoQué es un proyecto
Qué es un proyecto
 
Proyecto teórico práctico
Proyecto teórico prácticoProyecto teórico práctico
Proyecto teórico práctico
 
Presentacion1630
Presentacion1630Presentacion1630
Presentacion1630
 
Presentacion1410
Presentacion1410Presentacion1410
Presentacion1410
 
Presentacion1310
Presentacion1310Presentacion1310
Presentacion1310
 
Presentacion1210
Presentacion1210Presentacion1210
Presentacion1210
 
Presentacion1220
Presentacion1220Presentacion1220
Presentacion1220
 
Presentacion1001
Presentacion1001Presentacion1001
Presentacion1001
 
Presentacion610
Presentacion610Presentacion610
Presentacion610
 

Presentacion610

  • 2. 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”
  • 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 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”
  • 5. 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.
  • 6. 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.
  • 7. 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;
  • 8. 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; }
  • 9. 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();
  • 10. 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++; }
  • 11. Demostración  Cual es el 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 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;
  • 16. 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
  • 17. 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
  • 18. Demostración  Esta versión utiliza 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 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
  • 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
  • 26.
  • 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 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.
  • 29. 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;
  • 30. 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;
  • 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é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); }
  • 33. Demostración  En esta versió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 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 }
  • 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 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
  • 39. 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
  • 40. 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
  • 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
  • 43. 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
  • 44. 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
  • 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 #