SlideShare una empresa de Scribd logo
1 de 51
Bladimir Díaz Campos
Programación 3D
 Ahora tenemos un programa que puede ser la
base de nuestro propio juego.
 Sin embargo, la estructura del programa ha
evolucionado adicionándoles nuevas
características y arreglando algunos problemas.
 Es importante que el programa esté bien
estructurado
◦ Esto lo hace fácil de entender
◦ Fácil de adicionar nuevas características
 En este clásico vamos a averiguar como ordenar
nuestro programa para hacerlo más claro y
entendible
 En este momento, el código tiene un poquito
de desorden.
 No existe una estructura en la forma que los
métodos se organizan dentro del código.
 Aunque esto no es un problema para el
compilador, pues solamente le concierne si o
no el código es legal, pero puede hacer que el
programa sea difícil de entender.
 Es mejor si los programadores hacemos
esfuerzos regulares para asegurarnos que el
código fuente se vea bien.
 En este momento, hemos visto los métodos
como una manera de rehusar código de
programa.
 Es preferible a repetir bloques de sentencias,
el programa puede algún método para hacer
el trabajo.
 Esto hace programa más pequeño y fácil de
mantener
◦ Se puede apreciar un fallo sólo lugar.
 Sin embargo, es posible utilizar métodos para
mejorar la estructura del programa
 Este método update llama otros métodos
para actualizar cada elemento en turno.
protected override void Update(GameTime gameTime)
{
updateCheese();
if (lives <= 0)
{
return;
}
updateBread();
updateTomatoes();
}
 Re areglar el código, no mejore su desempeño.
 De hecho, la llamada de métodos hace un poco
más lento que el trabajo
 Sin embargo, esto puede tener un enorme
impacto en la manera en como el código se ve
después
 Se deben intentar asegurar que todo el tiempo el
código esté organizado de la mejor manera
posible
 El término técnico para este esfuerzo se llama “
Refactorizar”
 VS que ayuda a re
factorizar el
programa
 Uno de esos
métodos a crear
partirá de un bloque
de sentencias
1. Crear un método
updateTomatoes.
◦ Vamos a remover
todo el código que
actualiza el sprite
tomato, y vamos a
crear un método para
hacerlo.
 Previamente hemos visto que podemos
cambiar el nombre de una clase el juego y el
archivo donde estaba almacenada.
 Podemos utilizar VS para cambiar los
identificadores de variables y métodos del
programa.
 Para identificar mejor lo que el item
actualmente hace.
 Esto hace el código más fácil de entender
 Este método fue creado para establecer el
tamaño y la posición de los sprites en el
juego.
 Sin embargo, esto es utilizado para hacer
otras cosas, por ejemplo el puntaje y las
vidas, por lo que tiene más de un rol en la
configuración del juego.
 Sería más sensato llamar a este método
setupGame, porque es lo que hace
 VS renombra del método y actualiza todos los
lugares en donde ha sido llamado
 Re nombrando
setupSprite
◦ Esto hace que se
renombre el método y
todas las llamadas de
este método.
◦ Es más fácil que buscar
y remplazar
 Como cualquier otro
programa, VS tiene la
capacidad de deshacer
los cambios que han
sido hechos.
 Es posible seleccionar
esta opción del menú
de edición, o
presionando CtrlZ o
ALTBackspace
 El comando Layout
desde el menú de
edición, es bueno
para distribuir el
código y hacer todo
alineado referente a
los llaves.
 El comando solo
trabaja cuando el
programa será
compilado
 El pre-procesador, puede ser interrogado para
colapsar secciones de codigo dentro de regiones
que lo hacen mas fácil de entender.
 Se crea una región encerrando el código
requerido entre la directivas #region y
#endregion.
 El editor hará desaparecer el texto en la región.
 Se pueden colocar regiones dentro del programa
para hacerlos mas estructurados.
 Nada de esto afecta el funcionamiento del cósigo
en si.
 Regiones y contornos
 Se han adicionado comentarios al código
desde que iniciamos el programa.
 Ahora se harán comentarios aun más útiles.
 El editor del VS, es capaz de hacer
comentarios que permitan proveer ayuda
interactiva.
 La ayuda aparece cuando se necesita.
 Estos comentarios han sido formateados para
que el editor del VS pueda utilizarlos para
proveer ayuda interactiva.
/// <summary>
/// Draws text on the screen
/// </summary>
/// <param name="text">text to write</param>
/// <param name="textColor">color of text</param>
/// <param name="x">left edge of text</param>
/// <param name="y">top of text</param>
void drawText(string text, Color textColor, float x, float y)
{
// draw text method body here
}
 VS puede usar la información en los
comentarios para proveer una ayuda
detallada, cuando escribimos un método.
 Todos lo métodos en C# y la librería XNA son
documentados en esta forma.
 Escribir los comentarios
 Un programa bien diseñado es bien
estructurado internamente y todos los
elementos contenidos en el tienen nombres
que nos indican su propósito.
 El entorno de VS provee una gama de
herramientas que ayudan a los
programadores a crear códigos bien
diseñados
◦ Convertir sentencias en métodos.
◦ Hacer que los nombres reflejen su propósito.
◦ Asegurarse que el código sea fácil de leer e
internamente documentado.
 A los usuarios les agradan solo programas que
están bien estructurados.
 VS puede renombrar solamente métodos
privados.
 El nombre de un identificador en un programa
debe comenzar con i.
 Los programas bien estructurados corren más
rápido
 El código de las regiones en un programa puede
estar anidado.
 Comentarios solo pueden colocarse al inicio del
programa
 A los usuarios les agradan solo programas que
están bien estructurados.
 VS puede renombrar solamente métodos
privados.
 El nombre de un identificador en un programa
debe comenzar con i.
 Los programas bien estructurados corren más
rápido
 El código de las regiones en un programa puede
estar anidado.
 Comentarios solo pueden colocarse al inicio del
programa
 A los usuarios les agradan solo programas que
están bien estructurados.
 VS puede renombrar solamente métodos
privados.
 El nombre de un identificador en un programa
debe comenzar con i.
 Los programas bien estructurados corren más
rápido
 El código de las regiones en un programa puede
estar anidado.
 Comentarios solo pueden colocarse al inicio del
programa
 A los usuarios les agradan solo programas que
están bien estructurados.
 VS puede renombrar solamente métodos
privados.
 El nombre de un identificador en un programa
debe comenzar con i.
 Los programas bien estructurados corren más
rápido
 El código de las regiones en un programa puede
estar anidado.
 Comentarios solo pueden colocarse al inicio del
programa
 A los usuarios les agradan solo programas que
están bien estructurados.
 VS puede renombrar solamente métodos
privados.
 El nombre de un identificador en un programa
debe comenzar con i.
 Los programas bien estructurados corren más
rápido
 El código de las regiones en un programa puede
estar anidado.
 Comentarios solo pueden colocarse al inicio del
programa
 A los usuarios les agradan solo programas que
están bien estructurados.
 VS puede renombrar solamente métodos
privados.
 El nombre de un identificador en un programa
debe comenzar con i.
 Los programas bien estructurados corren más
rápido
 El código de las regiones en un programa puede
estar anidado.
 Comentarios solo pueden colocarse al inicio del
programa
 A los usuarios les agradan solo programas que
están bien estructurados.
 VS puede renombrar solamente métodos
privados.
 El nombre de un identificador en un programa
debe comenzar con i.
 Los programas bien estructurados corren más
rápido
 El código de las regiones en un programa puede
estar anidado.
 Comentarios solo pueden colocarse al inicio del
programa
 EL juego que se esta diseñando esta tomando
forma y luce cada vez más como un juego
completo.
 Sin embargo, hay un pequeño problema: se
puede jugar solamente una vez.
 Cuando se pierden todas las vidas el juego
termina y se debe de comenzar de nuevo el
programa.
 En esta sesión, encontraremos cómo hacer un
juego que utilice el estado de la máquina
para comportarse como un juego debería
 En este momento, el juego está activo tan
pronto se ejecuta.
 Cuando la última vida ha sido perdida, éste
deja de funcionar, pero no hay manera que el
jugador pueda iniciar otra partida.
 Esta no es una buena práctica de diseño.
 El jugador debe de reiniciar el programa cada
vez que quiera jugar otro juego
 Al inicio del juego, y cuando el juego ha
finalizado, debemos tener una pantalla de
título.
 Esto brinda el nombre del juego y una
pequeña parte de arte
 Nuestro juego tiene dos estados
◦ Desplegando el título en pantalla
◦ Jugando el juego.
 Cuando el programa comienza su ejecución
se muestra la pantalla de título.
 Cuando el juego finaliza deberá de mostrar
nuevamente la pantalla de título.
 El juego debe contener una variable miembro
que almacene el estado del juego
 Ya hemos visto anteriormente los tipos
enumerados.
◦ Sabemos que el tipo Keys tiene un valor para cada
posible tecla.
 Ahora se creara nuestro propio tipo
enumerado.
 Por el momento solamente tendrá dos
estados
enum GameState
{
titleScreen,
playingGame
}
 Éste es el nombre del tipo que se ha creado.
 Una vez que se ha declarado este tipo
procedemos a crear variables de dicho tipo.
 Este nombre prefijará cualquier valor que
usemos en el programa
enum GameState
{
titleScreen,
playingGame
}
 Esta es la lista de posibles valores que el tipo
GameState puede tener.
 Todos los valores son actualmente más
creados dentro del número, y es como las
computadoras realmente trabajan
enum GameState
{
titleScreen,
playingGame
}
 Una vez que tenemos el nuevo tipo,
declaramos las variables de este tipo.
 La variable state es declarada y establecemos
el valor de GameState.titleScreen.
 Este será la variable de estado que controla el
estado del juego.
 Esto controlará el comportamiento de los
métodos Draw y Update
GameState state = GameState.titleScreen;
 El juego de dibujar a diferentes cosas
dependiendo del estado y del cual se
encuentre
switch (state)
{
case GameState.titleScreen:
drawTitle();
break;
case GameState.playingGame:
drawBackground();
drawCheese();
drawBread();
drawTomatoes();
drawScore();
break;
}
 La variable state además controlará el
comportamiento del juego dentro del método
update
switch (state)
{
case GameState.titleScreen:
// updateTitle changes state to playingGame when A pressed
updateTitle();
break;
case GameState.playingGame:
// updateCheese changes state to titleScreen when game ends
updateCheese();
updateBread();
updateTomatoes();
break;
}
 El diseño del estado de
la máquina es
mostrado por el
diagrama de estado.
 Este muestra el evento
como un valor de
estado y el evento que
causa el cambio.
 El punto en color
negro es el punto de
entrada
Title screen
Playing game
[No lives left]
[A button pressed]
 El método updateTitle el llamado cuando el
juego está en el estado
GameState.titleScreen.
 Si el boton A es detectado, se llama a
startGame, cual configura el juego y cambia
el estado a GameState.playingGame
private void updateTitle()
{
if (gamePad1.Buttons.A == ButtonState.Pressed)
{
startGame();
}
}
 Este método es llamado para iniciar la
ejecución del juego.
 Esto le dice a todos los elementos del juego
que se coloquen en su posición inicial.
 Y luego cambia el estado para iniciar el juego
void startGame()
{
score = 0;
lives = 3;
startCheese();
startBread();
startTomatoes();
state = GameState.playingGame;
}
 Este código dentro de updateCheese llama al
gameover si él que eso golpea la parte baja
de la pantalla no hay más vidas.
if (cheese.Y + cheese.SpriteRectangle.Height >= maxDisplayY)
{
cheese.YSpeed = Math.Abs(cheese.YSpeed) * -1;
if (lives > 0)
{
lives--;
}
if (lives == 0)
{
gameOver();
}
}
 Se ha adicionado un registro de el puntaje
más alto.
 Este es actualizado al final del juego.
 Este método luego establece el estado del
juego de regreso a GaemState.titleScreen
void gameOver()
{
if (score > highScore)
{
highScore = score;
}
state = GameState.titleScreen;
}
 Este método dibuja el puntaje más alto en la
pantalla utilizando el método drawText
creado anteriormente.
 El llamado cuando el juego está en el estado
titleScreen
void drawHighScore()
{
drawText(
"Highscore : " + highScore + " Press A to play",
Color.Blue,
minDisplayX, minDisplayY);
}
 Un programa implementado una maquina de
estado utilizando una variable que almacena el
estado que se estaba ocupando.
 El programa puede luego responder a eventos de
una manera apropiada a su estado actual.
 Un tipo de enumeración es muy apropiado para
almacenar el estado de una máquina de estado.
 Algunas veces un evento puede causar el cambio
de estado.
 Se pueden dibujar los estados y los eventos en
un diagrama de estado
 La máquina de estado puede solamente tener
dos estados.
 Una máquina de estado siempre cuando un
evento en particular ocurra.
 Una variable de un tipo enumerado es
administrada por valores.
 Un diagrama de estados muestra los métodos
en el programa
 La máquina de estado puede solamente tener
dos estados.
 Una máquina de estado siempre cuando un
evento en particular ocurra.
 Una variable de un tipo enumerado es
administrada por valores.
 Un diagrama de estados muestra los métodos
en el programa
 La máquina de estado puede solamente tener
dos estados.
 Una máquina de estado siempre cuando un
evento en particular ocurra.
 Una variable de un tipo enumerado es
administrada por valores.
 Un diagrama de estados muestra los métodos
en el programa
 La máquina de estado puede solamente tener
dos estados.
 Una máquina de estado siempre cuando un
evento en particular ocurra.
 Una variable de un tipo enumerado es
administrada por valores.
 Un diagrama de estados muestra los métodos
en el programa
 La máquina de estado puede solamente tener
dos estados.
 Una máquina de estado siempre cuando un
evento en particular ocurra.
 Una variable de un tipo enumerado es
administrada por valores.
 Un diagrama de estados muestra los métodos
en el programa

Más contenido relacionado

Destacado

Tarea pronosticos eily
Tarea pronosticos eilyTarea pronosticos eily
Tarea pronosticos eilyTitiushko 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 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 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
 
Actividad Firewall Cisco ASA 5510
Actividad Firewall Cisco ASA 5510Actividad Firewall Cisco ASA 5510
Actividad Firewall Cisco ASA 5510Yeider Fernandez
 
Firewall cisco
Firewall ciscoFirewall cisco
Firewall ciscogus_marca
 
Practica con firewall asa
Practica con firewall asaPractica con firewall asa
Practica con firewall asawebsyo
 
20101014 seguridad perimetral
20101014 seguridad perimetral20101014 seguridad perimetral
20101014 seguridad perimetral3calabera
 
Proyecto teórico práctico
Proyecto teórico prácticoProyecto teórico práctico
Proyecto teórico prácticoTitiushko Jazz
 
Seguridad en cisco firewall by ro ckberto
Seguridad en cisco   firewall by ro ckbertoSeguridad en cisco   firewall by ro ckberto
Seguridad en cisco firewall by ro ckbertoRoberto Flores
 

Destacado (20)

Clase 16
Clase 16Clase 16
Clase 16
 
Tarea pronosticos eily
Tarea pronosticos eilyTarea pronosticos eily
Tarea pronosticos eily
 
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 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
 
Presentacion1630
Presentacion1630Presentacion1630
Presentacion1630
 
Presentacion1001
Presentacion1001Presentacion1001
Presentacion1001
 
Presentacion1220
Presentacion1220Presentacion1220
Presentacion1220
 
Clase 13
Clase 13Clase 13
Clase 13
 
Unidad ii esp parte 2
Unidad ii esp parte 2Unidad ii esp parte 2
Unidad ii esp parte 2
 
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)
 
Actividad Firewall Cisco ASA 5510
Actividad Firewall Cisco ASA 5510Actividad Firewall Cisco ASA 5510
Actividad Firewall Cisco ASA 5510
 
Firewall cisco
Firewall ciscoFirewall cisco
Firewall cisco
 
Practica con firewall asa
Practica con firewall asaPractica con firewall asa
Practica con firewall asa
 
Sociedades limitadas
Sociedades limitadasSociedades limitadas
Sociedades limitadas
 
20101014 seguridad perimetral
20101014 seguridad perimetral20101014 seguridad perimetral
20101014 seguridad perimetral
 
Proyecto teórico práctico
Proyecto teórico prácticoProyecto teórico práctico
Proyecto teórico práctico
 
Cisco CCNA Security
Cisco CCNA Security Cisco CCNA Security
Cisco CCNA Security
 
Unidad i esp parte 2
Unidad i esp parte 2Unidad i esp parte 2
Unidad i esp parte 2
 
Ejemplo ddl dml
Ejemplo ddl dmlEjemplo ddl dml
Ejemplo ddl dml
 
Seguridad en cisco firewall by ro ckberto
Seguridad en cisco   firewall by ro ckbertoSeguridad en cisco   firewall by ro ckberto
Seguridad en cisco firewall by ro ckberto
 

Similar a Presentacion1310 (20)

Atix08
Atix08Atix08
Atix08
 
Presemtacion1110
Presemtacion1110Presemtacion1110
Presemtacion1110
 
Presemtacion1110
Presemtacion1110Presemtacion1110
Presemtacion1110
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Informe vb compiler
Informe vb compilerInforme vb compiler
Informe vb compiler
 
Programa 6
Programa 6Programa 6
Programa 6
 
Programa 6 de Eclipse
Programa 6 de EclipsePrograma 6 de Eclipse
Programa 6 de Eclipse
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Practica integradora1 instalar y configurar aplicaciones y servicios_eqpo_no....
Practica integradora1 instalar y configurar aplicaciones y servicios_eqpo_no....Practica integradora1 instalar y configurar aplicaciones y servicios_eqpo_no....
Practica integradora1 instalar y configurar aplicaciones y servicios_eqpo_no....
 
Manual de instalacion de Mongo db
Manual de instalacion de Mongo dbManual de instalacion de Mongo db
Manual de instalacion de Mongo db
 
Visual Basic Edwin Perez
Visual Basic Edwin PerezVisual Basic Edwin Perez
Visual Basic Edwin Perez
 
Practicas bloque 1
Practicas bloque 1Practicas bloque 1
Practicas bloque 1
 
Introduccion actionscript
Introduccion actionscriptIntroduccion actionscript
Introduccion actionscript
 
Introduccion de-aplicaciones-visuales
Introduccion de-aplicaciones-visualesIntroduccion de-aplicaciones-visuales
Introduccion de-aplicaciones-visuales
 
Atix02
Atix02Atix02
Atix02
 
Visual Basic
Visual BasicVisual Basic
Visual Basic
 
Visual
VisualVisual
Visual
 
Practicas 1
Practicas 1Practicas 1
Practicas 1
 

Más de Titiushko Jazz (17)

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 1
Unidad ii esp parte 1Unidad ii esp parte 1
Unidad ii esp parte 1
 
Unidad i esp parte 1
Unidad i esp parte 1Unidad i esp parte 1
Unidad i esp parte 1
 
Rhu
RhuRhu
Rhu
 
Qué es un proyecto
Qué es un proyectoQué es un proyecto
Qué es un proyecto
 
Presentacion1210
Presentacion1210Presentacion1210
Presentacion1210
 
Presentacion610
Presentacion610Presentacion610
Presentacion610
 
Presentacion520
Presentacion520Presentacion520
Presentacion520
 
Presentacion510
Presentacion510Presentacion510
Presentacion510
 
Presentacion420
Presentacion420Presentacion420
Presentacion420
 
Presentacion410
Presentacion410Presentacion410
Presentacion410
 
Presentacion322
Presentacion322Presentacion322
Presentacion322
 
Presentacion05
Presentacion05Presentacion05
Presentacion05
 
Presentacion02
Presentacion02Presentacion02
Presentacion02
 
Presentacion321
Presentacion321Presentacion321
Presentacion321
 
Presentacion04
Presentacion04Presentacion04
Presentacion04
 
Presentacion03
Presentacion03Presentacion03
Presentacion03
 

Presentacion1310

  • 2.  Ahora tenemos un programa que puede ser la base de nuestro propio juego.  Sin embargo, la estructura del programa ha evolucionado adicionándoles nuevas características y arreglando algunos problemas.  Es importante que el programa esté bien estructurado ◦ Esto lo hace fácil de entender ◦ Fácil de adicionar nuevas características  En este clásico vamos a averiguar como ordenar nuestro programa para hacerlo más claro y entendible
  • 3.  En este momento, el código tiene un poquito de desorden.  No existe una estructura en la forma que los métodos se organizan dentro del código.  Aunque esto no es un problema para el compilador, pues solamente le concierne si o no el código es legal, pero puede hacer que el programa sea difícil de entender.  Es mejor si los programadores hacemos esfuerzos regulares para asegurarnos que el código fuente se vea bien.
  • 4.  En este momento, hemos visto los métodos como una manera de rehusar código de programa.  Es preferible a repetir bloques de sentencias, el programa puede algún método para hacer el trabajo.  Esto hace programa más pequeño y fácil de mantener ◦ Se puede apreciar un fallo sólo lugar.  Sin embargo, es posible utilizar métodos para mejorar la estructura del programa
  • 5.  Este método update llama otros métodos para actualizar cada elemento en turno. protected override void Update(GameTime gameTime) { updateCheese(); if (lives <= 0) { return; } updateBread(); updateTomatoes(); }
  • 6.  Re areglar el código, no mejore su desempeño.  De hecho, la llamada de métodos hace un poco más lento que el trabajo  Sin embargo, esto puede tener un enorme impacto en la manera en como el código se ve después  Se deben intentar asegurar que todo el tiempo el código esté organizado de la mejor manera posible  El término técnico para este esfuerzo se llama “ Refactorizar”
  • 7.  VS que ayuda a re factorizar el programa  Uno de esos métodos a crear partirá de un bloque de sentencias
  • 8. 1. Crear un método updateTomatoes. ◦ Vamos a remover todo el código que actualiza el sprite tomato, y vamos a crear un método para hacerlo.
  • 9.  Previamente hemos visto que podemos cambiar el nombre de una clase el juego y el archivo donde estaba almacenada.  Podemos utilizar VS para cambiar los identificadores de variables y métodos del programa.  Para identificar mejor lo que el item actualmente hace.  Esto hace el código más fácil de entender
  • 10.  Este método fue creado para establecer el tamaño y la posición de los sprites en el juego.  Sin embargo, esto es utilizado para hacer otras cosas, por ejemplo el puntaje y las vidas, por lo que tiene más de un rol en la configuración del juego.  Sería más sensato llamar a este método setupGame, porque es lo que hace  VS renombra del método y actualiza todos los lugares en donde ha sido llamado
  • 11.  Re nombrando setupSprite ◦ Esto hace que se renombre el método y todas las llamadas de este método. ◦ Es más fácil que buscar y remplazar
  • 12.  Como cualquier otro programa, VS tiene la capacidad de deshacer los cambios que han sido hechos.  Es posible seleccionar esta opción del menú de edición, o presionando CtrlZ o ALTBackspace
  • 13.  El comando Layout desde el menú de edición, es bueno para distribuir el código y hacer todo alineado referente a los llaves.  El comando solo trabaja cuando el programa será compilado
  • 14.  El pre-procesador, puede ser interrogado para colapsar secciones de codigo dentro de regiones que lo hacen mas fácil de entender.  Se crea una región encerrando el código requerido entre la directivas #region y #endregion.  El editor hará desaparecer el texto en la región.  Se pueden colocar regiones dentro del programa para hacerlos mas estructurados.  Nada de esto afecta el funcionamiento del cósigo en si.
  • 15.  Regiones y contornos
  • 16.  Se han adicionado comentarios al código desde que iniciamos el programa.  Ahora se harán comentarios aun más útiles.  El editor del VS, es capaz de hacer comentarios que permitan proveer ayuda interactiva.  La ayuda aparece cuando se necesita.
  • 17.  Estos comentarios han sido formateados para que el editor del VS pueda utilizarlos para proveer ayuda interactiva. /// <summary> /// Draws text on the screen /// </summary> /// <param name="text">text to write</param> /// <param name="textColor">color of text</param> /// <param name="x">left edge of text</param> /// <param name="y">top of text</param> void drawText(string text, Color textColor, float x, float y) { // draw text method body here }
  • 18.  VS puede usar la información en los comentarios para proveer una ayuda detallada, cuando escribimos un método.  Todos lo métodos en C# y la librería XNA son documentados en esta forma.
  • 19.  Escribir los comentarios
  • 20.  Un programa bien diseñado es bien estructurado internamente y todos los elementos contenidos en el tienen nombres que nos indican su propósito.  El entorno de VS provee una gama de herramientas que ayudan a los programadores a crear códigos bien diseñados ◦ Convertir sentencias en métodos. ◦ Hacer que los nombres reflejen su propósito. ◦ Asegurarse que el código sea fácil de leer e internamente documentado.
  • 21.  A los usuarios les agradan solo programas que están bien estructurados.  VS puede renombrar solamente métodos privados.  El nombre de un identificador en un programa debe comenzar con i.  Los programas bien estructurados corren más rápido  El código de las regiones en un programa puede estar anidado.  Comentarios solo pueden colocarse al inicio del programa
  • 22.  A los usuarios les agradan solo programas que están bien estructurados.  VS puede renombrar solamente métodos privados.  El nombre de un identificador en un programa debe comenzar con i.  Los programas bien estructurados corren más rápido  El código de las regiones en un programa puede estar anidado.  Comentarios solo pueden colocarse al inicio del programa
  • 23.  A los usuarios les agradan solo programas que están bien estructurados.  VS puede renombrar solamente métodos privados.  El nombre de un identificador en un programa debe comenzar con i.  Los programas bien estructurados corren más rápido  El código de las regiones en un programa puede estar anidado.  Comentarios solo pueden colocarse al inicio del programa
  • 24.  A los usuarios les agradan solo programas que están bien estructurados.  VS puede renombrar solamente métodos privados.  El nombre de un identificador en un programa debe comenzar con i.  Los programas bien estructurados corren más rápido  El código de las regiones en un programa puede estar anidado.  Comentarios solo pueden colocarse al inicio del programa
  • 25.  A los usuarios les agradan solo programas que están bien estructurados.  VS puede renombrar solamente métodos privados.  El nombre de un identificador en un programa debe comenzar con i.  Los programas bien estructurados corren más rápido  El código de las regiones en un programa puede estar anidado.  Comentarios solo pueden colocarse al inicio del programa
  • 26.  A los usuarios les agradan solo programas que están bien estructurados.  VS puede renombrar solamente métodos privados.  El nombre de un identificador en un programa debe comenzar con i.  Los programas bien estructurados corren más rápido  El código de las regiones en un programa puede estar anidado.  Comentarios solo pueden colocarse al inicio del programa
  • 27.  A los usuarios les agradan solo programas que están bien estructurados.  VS puede renombrar solamente métodos privados.  El nombre de un identificador en un programa debe comenzar con i.  Los programas bien estructurados corren más rápido  El código de las regiones en un programa puede estar anidado.  Comentarios solo pueden colocarse al inicio del programa
  • 28.
  • 29.  EL juego que se esta diseñando esta tomando forma y luce cada vez más como un juego completo.  Sin embargo, hay un pequeño problema: se puede jugar solamente una vez.  Cuando se pierden todas las vidas el juego termina y se debe de comenzar de nuevo el programa.  En esta sesión, encontraremos cómo hacer un juego que utilice el estado de la máquina para comportarse como un juego debería
  • 30.  En este momento, el juego está activo tan pronto se ejecuta.  Cuando la última vida ha sido perdida, éste deja de funcionar, pero no hay manera que el jugador pueda iniciar otra partida.  Esta no es una buena práctica de diseño.  El jugador debe de reiniciar el programa cada vez que quiera jugar otro juego
  • 31.  Al inicio del juego, y cuando el juego ha finalizado, debemos tener una pantalla de título.  Esto brinda el nombre del juego y una pequeña parte de arte
  • 32.  Nuestro juego tiene dos estados ◦ Desplegando el título en pantalla ◦ Jugando el juego.  Cuando el programa comienza su ejecución se muestra la pantalla de título.  Cuando el juego finaliza deberá de mostrar nuevamente la pantalla de título.  El juego debe contener una variable miembro que almacene el estado del juego
  • 33.  Ya hemos visto anteriormente los tipos enumerados. ◦ Sabemos que el tipo Keys tiene un valor para cada posible tecla.  Ahora se creara nuestro propio tipo enumerado.  Por el momento solamente tendrá dos estados enum GameState { titleScreen, playingGame }
  • 34.  Éste es el nombre del tipo que se ha creado.  Una vez que se ha declarado este tipo procedemos a crear variables de dicho tipo.  Este nombre prefijará cualquier valor que usemos en el programa enum GameState { titleScreen, playingGame }
  • 35.  Esta es la lista de posibles valores que el tipo GameState puede tener.  Todos los valores son actualmente más creados dentro del número, y es como las computadoras realmente trabajan enum GameState { titleScreen, playingGame }
  • 36.  Una vez que tenemos el nuevo tipo, declaramos las variables de este tipo.  La variable state es declarada y establecemos el valor de GameState.titleScreen.  Este será la variable de estado que controla el estado del juego.  Esto controlará el comportamiento de los métodos Draw y Update GameState state = GameState.titleScreen;
  • 37.  El juego de dibujar a diferentes cosas dependiendo del estado y del cual se encuentre switch (state) { case GameState.titleScreen: drawTitle(); break; case GameState.playingGame: drawBackground(); drawCheese(); drawBread(); drawTomatoes(); drawScore(); break; }
  • 38.  La variable state además controlará el comportamiento del juego dentro del método update switch (state) { case GameState.titleScreen: // updateTitle changes state to playingGame when A pressed updateTitle(); break; case GameState.playingGame: // updateCheese changes state to titleScreen when game ends updateCheese(); updateBread(); updateTomatoes(); break; }
  • 39.  El diseño del estado de la máquina es mostrado por el diagrama de estado.  Este muestra el evento como un valor de estado y el evento que causa el cambio.  El punto en color negro es el punto de entrada Title screen Playing game [No lives left] [A button pressed]
  • 40.  El método updateTitle el llamado cuando el juego está en el estado GameState.titleScreen.  Si el boton A es detectado, se llama a startGame, cual configura el juego y cambia el estado a GameState.playingGame private void updateTitle() { if (gamePad1.Buttons.A == ButtonState.Pressed) { startGame(); } }
  • 41.  Este método es llamado para iniciar la ejecución del juego.  Esto le dice a todos los elementos del juego que se coloquen en su posición inicial.  Y luego cambia el estado para iniciar el juego void startGame() { score = 0; lives = 3; startCheese(); startBread(); startTomatoes(); state = GameState.playingGame; }
  • 42.  Este código dentro de updateCheese llama al gameover si él que eso golpea la parte baja de la pantalla no hay más vidas. if (cheese.Y + cheese.SpriteRectangle.Height >= maxDisplayY) { cheese.YSpeed = Math.Abs(cheese.YSpeed) * -1; if (lives > 0) { lives--; } if (lives == 0) { gameOver(); } }
  • 43.  Se ha adicionado un registro de el puntaje más alto.  Este es actualizado al final del juego.  Este método luego establece el estado del juego de regreso a GaemState.titleScreen void gameOver() { if (score > highScore) { highScore = score; } state = GameState.titleScreen; }
  • 44.  Este método dibuja el puntaje más alto en la pantalla utilizando el método drawText creado anteriormente.  El llamado cuando el juego está en el estado titleScreen void drawHighScore() { drawText( "Highscore : " + highScore + " Press A to play", Color.Blue, minDisplayX, minDisplayY); }
  • 45.
  • 46.  Un programa implementado una maquina de estado utilizando una variable que almacena el estado que se estaba ocupando.  El programa puede luego responder a eventos de una manera apropiada a su estado actual.  Un tipo de enumeración es muy apropiado para almacenar el estado de una máquina de estado.  Algunas veces un evento puede causar el cambio de estado.  Se pueden dibujar los estados y los eventos en un diagrama de estado
  • 47.  La máquina de estado puede solamente tener dos estados.  Una máquina de estado siempre cuando un evento en particular ocurra.  Una variable de un tipo enumerado es administrada por valores.  Un diagrama de estados muestra los métodos en el programa
  • 48.  La máquina de estado puede solamente tener dos estados.  Una máquina de estado siempre cuando un evento en particular ocurra.  Una variable de un tipo enumerado es administrada por valores.  Un diagrama de estados muestra los métodos en el programa
  • 49.  La máquina de estado puede solamente tener dos estados.  Una máquina de estado siempre cuando un evento en particular ocurra.  Una variable de un tipo enumerado es administrada por valores.  Un diagrama de estados muestra los métodos en el programa
  • 50.  La máquina de estado puede solamente tener dos estados.  Una máquina de estado siempre cuando un evento en particular ocurra.  Una variable de un tipo enumerado es administrada por valores.  Un diagrama de estados muestra los métodos en el programa
  • 51.  La máquina de estado puede solamente tener dos estados.  Una máquina de estado siempre cuando un evento en particular ocurra.  Una variable de un tipo enumerado es administrada por valores.  Un diagrama de estados muestra los métodos en el programa