SlideShare una empresa de Scribd logo
Ejemplo Completo #2:
Black Jack
Juan Carlos Zuluaga
Introducción
 Este es un juego clásico de cartas. En esta implementación, lo haremos para 2
jugadores. Cada jugador inicia con 2 cartas, y el objetivo es que la suma de
los puntos de las cartas sea 21. Si el jugador se pasa de 21, pierde. Gana el
que tenga 21 punto o el que más se aproxime.
 Las cartas del 2 a 10, valen el número de la carta, es decir, el 2 vale 2, e 3
vale 3, y así sucesivamente
 La J, Q y K, valen 10 puntos
 El As vale 1 u 11 puntos dependiendo de lo que más le convenga al jugador
 Cree un proyecto XNA. Yo lo llame: Black Jack
 Cree la carpeta Images y agregue las imágenes que utilizaremos en este proyecto,
que son: un fondo verde, un logo de Black Jack y las 52 cartas que están PN,
donde P es la pinta (P: Corazones, D: Diamantes, P: Picas, T: Tréboles) y N el
número, que va del 2 al 10, más: J, Q, K y A.
 Cree la carpeta Fonts y cree un nuevo archivo de letras llamado Font. Cambie
estas etiquetas:
<FontName>Impact</FontName>
<Size>24</Size>
 Agreguemos la enumeración GameState que utilizamos en el ejemplo anterior. No
olvide cambiar el nombre del NameSpace
 Agregue una nueva clase llamada Pinta, la cual será una enumeración con las
pintas de la baraja
enum Pinta
{
Corazón,
Diamante,
Pica,
Trébol
}
 Agregue una nueva clase llamada Carta, la cual empaquetará todos los atributos
de una carta
using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace Black_Jack
{
class Carta
{
public Texture2D Textura { get; set; }
public Pinta Pinta { get; set; }
public string Letra { get; set; }
public int Valor1 { get; set; }
public int Valor2 { get; set; }
}
}
 Primero pintemos como se verá nuestro juego cuando lo ejecutemos.
 Agreguemos estos atributos a la clase Game1
Texture2D fondo;
Texture2D logo;
SpriteFont font;
GameState gameState;
int width;
int height;
 En el constructor de la case Game1, adicione las siguientes líneas:
// change windows size
width = 900;
height = 600;
graphics.PreferredBackBufferWidth = width;
graphics.PreferredBackBufferHeight = height;
 En el Initizalice:
gameState = GameState.Uninitiated;
 En el Load
fondo = Content.Load<Texture2D>("Images/FondoVerde");
logo = Content.Load<Texture2D>("Images/BlackJack");
font = Content.Load<SpriteFont>("Fonts/Font");
 En el Draw
spriteBatch.Begin();
spriteBatch.Draw(fondo, new Vector2(0, 0), Color.White);
spriteBatch.Draw(logo, new Vector2((width - logo.Width) / 2, 20), Color.White);
if (gameState == GameState.Uninitiated)
{
spriteBatch.DrawString(font, "Presioner ENTER para empezar...", new Vector2(250, 250),
Color.White);
}
spriteBatch.End();
 Probemos lo que llevamos hasta el momento:
 Ahora empecemos con la lógica del juego. Vamos a cargar toda la baraja en memoria y
cuando el usuario presione ENTER, vamos a darle a cada jugador 2 cartas y las vamos a
mostrar
 Vamos a adicionar estos nuevos atributos a la clase Game1
KeyboardState tecladoPrevio;
Random rd = new Random();
List<Carta> baraja;
List<Carta> jugador1;
List<Carta> jugador2;
 En el Initialize:
baraja = new List<Carta>();
jugador1 = new List<Carta>();
jugador2 = new List<Carta>();
 Ahora empecemos con la lógica del juego. Vamos a cargar toda la baraja en memoria y
cuando el usuario presione ENTER, vamos a darle a cada jugador 2 cartas y las vamos a
mostrar
 Vamos a adicionar estos nuevos atributos a la clase Game1
KeyboardState tecladoPrevio;
Random rd = new Random();
List<Carta> baraja;
List<Carta> jugador1;
List<Carta> jugador2;
 Adicionemos el método LoadBaraja. El cual carga todo el mazo de cartas en memoria (este
método puede ser reutilizable por otros juegos de cartas)
private void LoadBaraja()
{
Pinta pinta = Pinta.Corazón;
string pintaLetra = "C";
for (int i = 0; i < 4; i++)
{
for (int j = 1; j <= 13; j++)
{
string letra;
int valor1;
int valor2;
if (j == 1)
{
letra = "A";
valor1 = 1;
valor2 = 11;
}
else if (j == 11)
{
letra = "J";
valor1 = 10;
valor2 = 10;
}
else if (j == 12)
{
letra = "Q";
valor1 = 10;
valor2 = 10;
}
else if (j == 13)
{
letra = "K";
valor1 = 10;
valor2 = 10;
}
else
{
letra = j.ToString();
valor1 = j;
valor2 = j;
}
Texture2D textura = Content.Load<Texture2D>("Images/" + pintaLetra + letra);
Carta carta = new Carta();
carta.Letra = letra;
carta.Pinta = pinta;
carta.Textura = textura;
carta.Valor1 = valor1;
carta.Valor2 = valor2;
baraja.Add(carta);
}
pinta++;
if (pinta == Pinta.Diamante) pintaLetra = "D";
if (pinta == Pinta.Pica) pintaLetra = "P";
if (pinta == Pinta.Trébol) pintaLetra = "T";
}
}
 Adicionemos el método AsignarCarta. El cual le asigna una carta NO repetida al jugador
(este método puede ser reutilizable por otros juegos de cartas)
private void AsignaCarta(List<Carta> jugador)
{
int index = rd.Next(0, baraja.Count - 1);
jugador.Add(baraja[index]);
baraja.RemoveAt(index);
}
 Adicionemos estas líneas al método Update
carta.Pinta = pinta;
carta.Textura = textura;
carta.Valor1 = valor1;
carta.Valor2 = valor2;
baraja.Add(carta);
}
pinta++;
if (pinta == Pinta.Diamante) pintaLetra = "D";
if (pinta == Pinta.Pica) pintaLetra = "P";
if (pinta == Pinta.Trébol) pintaLetra = "T";
}
}
 Adicionemos el método AsignarCarta. El cual le asigna una carta NO repetida al jugador
(este método puede ser reutilizable por otros juegos de cartas)
private void AsignaCarta(List<Carta> jugador)
{
int index = rd.Next(0, baraja.Count - 1);
jugador.Add(baraja[index]);
baraja.RemoveAt(index);
}
 Adicionemos estas líneas al método Update
KeyboardState tecladoActual = Keyboard.GetState();
if ((gameState == GameState.Uninitiated || gameState == GameState.Finish) &&
tecladoActual.IsKeyDown(Keys.Enter))
{
gameState = GameState.Running;
jugador1.Clear();
jugador2.Clear();
LoadBaraja();
AsignaCarta(jugador1);
AsignaCarta(jugador2);
AsignaCarta(jugador1);
AsignaCarta(jugador2);
}
tecladoPrevio = tecladoActual;
 Agregue el método MostrarCartas:
if (gameState == GameState.Running)
{
spriteBatch.DrawString(font, "I) Carta jugador izquierda, D) Carta jugador derecha, P)
Plantar",
new Vector2(50, 250), Color.White);
MostrarCartas(jugador1, 100, 350);
MostrarCartas(jugador2, 500, 350);
}
 Agregue estas líneas al Draw, antes del spriteBatch.End();
if (gameState == GameState.Running)
{
spriteBatch.DrawString(font, "I) Carta jugador izquierda, D) Carta jugador derecha, P) Plantar",
new Vector2(50, 250), Color.White);
MostrarCartas(jugador1, 100, 350);
MostrarCartas(jugador2, 500, 350);
}
 Probemos lo que llevamos hasta el momento:
 Ahora agreguemos la lógica del juego y el manejo de puntajes
 Adicione estos atributos a la clase Game1:
int puntaje1Jugador1;
int puntaje2Jugador1;
int puntaje1Jugador2;
int puntaje2Jugador2;
int ganador;
 En el Initialize:
puntaje1Jugador1 = 0;
puntaje2Jugador1 = 0;
puntaje1Jugador2 = 0;
puntaje2Jugador2 = 0;
ganador = 0;
 Adicione el método revisar puntajes:
private void RevisarPuntajes()
{
puntaje1Jugador1 = 0;
puntaje2Jugador1 = 0;
puntaje1Jugador2 = 0;
puntaje2Jugador2 = 0;
foreach (Carta carta in jugador1)
{
puntaje1Jugador1 += carta.Valor1;
puntaje2Jugador1 += carta.Valor2;
}
foreach (Carta carta in jugador2)
{
puntaje1Jugador2 += carta.Valor1;
puntaje2Jugador2 += carta.Valor2;
}
}
 Cambien el método Update por el siguiente:
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// TODO: Add your update logic here
KeyboardState tecladoActual = Keyboard.GetState();
if ((gameState == GameState.Uninitiated || gameState == GameState.Finish) &&
tecladoActual.IsKeyDown(Keys.Enter))
{
gameState = GameState.Running;
jugador1.Clear();
jugador2.Clear();
LoadBaraja();
AsignaCarta(jugador1);
AsignaCarta(jugador2);
AsignaCarta(jugador1);
AsignaCarta(jugador2);
RevisarPuntajes();
}
if (gameState == GameState.Running &&
tecladoActual.IsKeyDown(Keys.I) &&
!tecladoPrevio.IsKeyDown(Keys.I) &&
(puntaje1Jugador1 < 21 || puntaje2Jugador1 < 21))
{
AsignaCarta(jugador1);
RevisarPuntajes();
}
if (gameState == GameState.Running &&
tecladoActual.IsKeyDown(Keys.D) &&
!tecladoPrevio.IsKeyDown(Keys.D) &&
(puntaje1Jugador2 < 22 || puntaje2Jugador2 < 22))
{
AsignaCarta(jugador2);
RevisarPuntajes();
}
if (gameState == GameState.Running)
{
if (puntaje1Jugador1 == 21 || puntaje2Jugador1 == 21)
{
ganador = 1;
gameState = GameState.Finish;
return;
}
if (puntaje1Jugador2 == 21 || puntaje2Jugador1 == 22)
{
ganador = 2;
gameState = GameState.Finish;
return;
}
}
if (gameState == GameState.Running && tecladoActual.IsKeyDown(Keys.P))
{
gameState = GameState.Finish;
}
tecladoPrevio = tecladoActual;
base.Update(gameTime);
}
 Cambien el método Draw por el siguiente:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: Add your drawing code here
spriteBatch.Begin();
spriteBatch.Draw(fondo, new Vector2(0, 0), Color.White);
spriteBatch.Draw(logo, new Vector2((width - logo.Width) / 2, 20), Color.White);
if (gameState == GameState.Uninitiated)
{
spriteBatch.DrawString(font, "Presioner ENTER para empezar...", new Vector2(250, 250), Color.White);
}
if (gameState == GameState.Running)
{
spriteBatch.DrawString(font, "I) Carta jugador izquierda, D) Carta jugador derecha, P) Plantar",
new Vector2(50, 250), Color.White);
MostrarCartas(jugador1, 100, 350);
MostrarCartas(jugador2, 500, 350);
}
if (gameState == GameState.Finish)
{
spriteBatch.DrawString(font, "Game Over...", new Vector2(350, 250), Color.White);
spriteBatch.DrawString(font, "Presioner ENTER para empezar...", new Vector2(250, 300), Color.White);
MostrarCartas(jugador1, 100, 350);
MostrarCartas(jugador2, 500, 350);
if (puntaje1Jugador1 == 21 || puntaje2Jugador1 == 21)
{
spriteBatch.DrawString(font, "Ganador Jugador 1!", new Vector2(320, 510), Color.White);
}
else if (puntaje1Jugador2 == 21 || puntaje2Jugador2 == 21)
{
spriteBatch.DrawString(font, "Ganador Jugador 2!", new Vector2(320, 510), Color.White);
}
else if ((puntaje1Jugador1 > 21 || puntaje2Jugador1 > 21) && (puntaje1Jugador2 > 21 || puntaje2Jugador2 > 21))
{
spriteBatch.DrawString(font, "La Casa Gana!", new Vector2(320, 510), Color.White);
}
else if ((puntaje1Jugador1 > 21 || puntaje2Jugador1 > 21) && (puntaje1Jugador2 < 21 || puntaje2Jugador2 < 21))
{
spriteBatch.DrawString(font, "Ganador Jugador 2!", new Vector2(320, 510), Color.White);
}
else if ((puntaje1Jugador2 > 21 || puntaje2Jugador2 > 21) && (puntaje1Jugador1 < 21 || puntaje2Jugador1 < 21))
{
spriteBatch.DrawString(font, "Ganador Jugador 1!", new Vector2(320, 510), Color.White);
}
else if ((puntaje1Jugador1 > puntaje1Jugador2) || (puntaje2Jugador1 > puntaje2Jugador2))
{
spriteBatch.DrawString(font, "Ganador Jugador 1!", new Vector2(320, 510), Color.White);
}
else if ((puntaje1Jugador1 < puntaje1Jugador2) || (puntaje2Jugador1 < puntaje2Jugador2))
{
spriteBatch.DrawString(font, "Ganador Jugador 2!", new Vector2(320, 510), Color.White);
}
else
{
spriteBatch.DrawString(font, "Empate!", new Vector2(320, 510), Color.White);
}
}
spriteBatch.End();
base.Draw(gameTime);
}
 Probemos nuestro juego terminado!!!
Taller #7
 Haga un juego de cartas!!!

Más contenido relacionado

La actualidad más candente

Java AWT Tres en Raya
Java AWT Tres en RayaJava AWT Tres en Raya
Java AWT Tres en Raya
jubacalo
 
Tutorial Game Maker segunda parte
Tutorial Game Maker segunda parteTutorial Game Maker segunda parte
Tutorial Game Maker segunda parte
www.areatecnologia.com
 
Creando juegos con game maker 8
Creando juegos con game maker 8Creando juegos con game maker 8
Creando juegos con game maker 8
Henrydarklite
 
Tutorial game maker
Tutorial game makerTutorial game maker
Tutorial game maker
Joserichi
 
Creacion de tablas geograficas en postgres
Creacion de tablas geograficas en postgresCreacion de tablas geograficas en postgres
Creacion de tablas geograficas en postgres
Jorge Velazquez
 
Aventura
AventuraAventura
Presentación3d
Presentación3dPresentación3d
Presentación3d
mephistodark
 
Manual de App
Manual de App Manual de App
Manual de App
valeria-lg
 
Comandos r
Comandos rComandos r
Pst solides3d
Pst solides3dPst solides3d
Pst solides3d
Robert Ipanaqué Chero
 
Custom keyinfo
Custom keyinfoCustom keyinfo
Custom keyinfo
axel gabriel moron mzo
 
Presentacion del proyecto
Presentacion del proyectoPresentacion del proyecto
Presentacion del proyecto
123santi9
 
Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.
jubacalo
 
Manual de practicas de Open GL
Manual de practicas de Open GLManual de practicas de Open GL
Manual de practicas de Open GL
Alincita Simon
 
Pstricks y tikz
Pstricks y tikzPstricks y tikz
Pstricks y tikz
Robert Ipanaqué Chero
 
Mysql
MysqlMysql
manual de practicas de opengl
manual de practicas de openglmanual de practicas de opengl
manual de practicas de opengl
Alincita Simon
 
Computacion v studio 2010 - 02
Computacion   v studio 2010 - 02Computacion   v studio 2010 - 02
Computacion v studio 2010 - 02
Johnny Zulca Mamani
 

La actualidad más candente (18)

Java AWT Tres en Raya
Java AWT Tres en RayaJava AWT Tres en Raya
Java AWT Tres en Raya
 
Tutorial Game Maker segunda parte
Tutorial Game Maker segunda parteTutorial Game Maker segunda parte
Tutorial Game Maker segunda parte
 
Creando juegos con game maker 8
Creando juegos con game maker 8Creando juegos con game maker 8
Creando juegos con game maker 8
 
Tutorial game maker
Tutorial game makerTutorial game maker
Tutorial game maker
 
Creacion de tablas geograficas en postgres
Creacion de tablas geograficas en postgresCreacion de tablas geograficas en postgres
Creacion de tablas geograficas en postgres
 
Aventura
AventuraAventura
Aventura
 
Presentación3d
Presentación3dPresentación3d
Presentación3d
 
Manual de App
Manual de App Manual de App
Manual de App
 
Comandos r
Comandos rComandos r
Comandos r
 
Pst solides3d
Pst solides3dPst solides3d
Pst solides3d
 
Custom keyinfo
Custom keyinfoCustom keyinfo
Custom keyinfo
 
Presentacion del proyecto
Presentacion del proyectoPresentacion del proyecto
Presentacion del proyecto
 
Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.
 
Manual de practicas de Open GL
Manual de practicas de Open GLManual de practicas de Open GL
Manual de practicas de Open GL
 
Pstricks y tikz
Pstricks y tikzPstricks y tikz
Pstricks y tikz
 
Mysql
MysqlMysql
Mysql
 
manual de practicas de opengl
manual de practicas de openglmanual de practicas de opengl
manual de practicas de opengl
 
Computacion v studio 2010 - 02
Computacion   v studio 2010 - 02Computacion   v studio 2010 - 02
Computacion v studio 2010 - 02
 

Destacado

Diplomado edumatica sesión #2
Diplomado edumatica   sesión #2Diplomado edumatica   sesión #2
Diplomado edumatica sesión #2
Juan Cardona
 
Taller de programación clase #2
Taller de programación   clase #2Taller de programación   clase #2
Taller de programación clase #2
Juan Cardona
 
Herramientas bd
Herramientas bdHerramientas bd
Herramientas bd
José Mendoza
 
Taller de programación clase #3
Taller de programación   clase #3Taller de programación   clase #3
Taller de programación clase #3
Juan Cardona
 
Taller de programación clase #1
Taller de programación   clase #1Taller de programación   clase #1
Taller de programación clase #1
Juan Cardona
 
Conceptos Básicos Análisis de Señales
Conceptos Básicos Análisis de SeñalesConceptos Básicos Análisis de Señales
Conceptos Básicos Análisis de Señales
José Mendoza
 
Int numeros complejos
Int numeros complejosInt numeros complejos
Int numeros complejos
José Mendoza
 
Ciclos Java - NetsBeans - Algoritmia
Ciclos Java - NetsBeans - AlgoritmiaCiclos Java - NetsBeans - Algoritmia
Ciclos Java - NetsBeans - Algoritmia
Daniel Gómez
 
02 examen diagnóstico bd
02 examen diagnóstico bd02 examen diagnóstico bd
02 examen diagnóstico bd
José Mendoza
 
Programación Orientada a Eventos Java
Programación Orientada a Eventos JavaProgramación Orientada a Eventos Java
Programación Orientada a Eventos Java
José Mendoza
 
Tipos y Enfoques de Investigacion
Tipos y Enfoques de InvestigacionTipos y Enfoques de Investigacion
Tipos y Enfoques de Investigacion
José Mendoza
 

Destacado (11)

Diplomado edumatica sesión #2
Diplomado edumatica   sesión #2Diplomado edumatica   sesión #2
Diplomado edumatica sesión #2
 
Taller de programación clase #2
Taller de programación   clase #2Taller de programación   clase #2
Taller de programación clase #2
 
Herramientas bd
Herramientas bdHerramientas bd
Herramientas bd
 
Taller de programación clase #3
Taller de programación   clase #3Taller de programación   clase #3
Taller de programación clase #3
 
Taller de programación clase #1
Taller de programación   clase #1Taller de programación   clase #1
Taller de programación clase #1
 
Conceptos Básicos Análisis de Señales
Conceptos Básicos Análisis de SeñalesConceptos Básicos Análisis de Señales
Conceptos Básicos Análisis de Señales
 
Int numeros complejos
Int numeros complejosInt numeros complejos
Int numeros complejos
 
Ciclos Java - NetsBeans - Algoritmia
Ciclos Java - NetsBeans - AlgoritmiaCiclos Java - NetsBeans - Algoritmia
Ciclos Java - NetsBeans - Algoritmia
 
02 examen diagnóstico bd
02 examen diagnóstico bd02 examen diagnóstico bd
02 examen diagnóstico bd
 
Programación Orientada a Eventos Java
Programación Orientada a Eventos JavaProgramación Orientada a Eventos Java
Programación Orientada a Eventos Java
 
Tipos y Enfoques de Investigacion
Tipos y Enfoques de InvestigacionTipos y Enfoques de Investigacion
Tipos y Enfoques de Investigacion
 

Similar a Xna game studio presentación 07

Numeros aleatorios
Numeros aleatoriosNumeros aleatorios
Numeros aleatorios
Marcelino Torres
 
Juego Bingo - JAVA
Juego Bingo - JAVAJuego Bingo - JAVA
Juego Bingo - JAVA
edgar muñoz
 
Codigo ejercicios
Codigo ejerciciosCodigo ejercicios
Codigo ejercicios
luis_umg2011
 
Recuperacion programas
Recuperacion programasRecuperacion programas
Recuperacion programas
Leonardo Dorantes
 
Prototipo de un juego de poker "Programado en lenguaje C"
Prototipo de un juego de poker "Programado en lenguaje C"Prototipo de un juego de poker "Programado en lenguaje C"
Prototipo de un juego de poker "Programado en lenguaje C"
Maynor Mendoza
 
Tkinter para python (curso de interfaces gráficas)
Tkinter para python (curso de interfaces gráficas)Tkinter para python (curso de interfaces gráficas)
Tkinter para python (curso de interfaces gráficas)
martinezhd1
 
Java
JavaJava
Java
jbersosa
 

Similar a Xna game studio presentación 07 (7)

Numeros aleatorios
Numeros aleatoriosNumeros aleatorios
Numeros aleatorios
 
Juego Bingo - JAVA
Juego Bingo - JAVAJuego Bingo - JAVA
Juego Bingo - JAVA
 
Codigo ejercicios
Codigo ejerciciosCodigo ejercicios
Codigo ejercicios
 
Recuperacion programas
Recuperacion programasRecuperacion programas
Recuperacion programas
 
Prototipo de un juego de poker "Programado en lenguaje C"
Prototipo de un juego de poker "Programado en lenguaje C"Prototipo de un juego de poker "Programado en lenguaje C"
Prototipo de un juego de poker "Programado en lenguaje C"
 
Tkinter para python (curso de interfaces gráficas)
Tkinter para python (curso de interfaces gráficas)Tkinter para python (curso de interfaces gráficas)
Tkinter para python (curso de interfaces gráficas)
 
Java
JavaJava
Java
 

Más de Juan Cardona

Xna game studio presentación 02
Xna game studio   presentación 02Xna game studio   presentación 02
Xna game studio presentación 02
Juan Cardona
 
Xna game studio presentación 01
Xna game studio   presentación 01Xna game studio   presentación 01
Xna game studio presentación 01
Juan Cardona
 
Xna game studio presentación 03
Xna game studio   presentación 03Xna game studio   presentación 03
Xna game studio presentación 03
Juan Cardona
 
Diplomado edumatica sesión #1
Diplomado edumatica   sesión #1Diplomado edumatica   sesión #1
Diplomado edumatica sesión #1
Juan Cardona
 
Taller de programación clase #5
Taller de programación   clase #5Taller de programación   clase #5
Taller de programación clase #5
Juan Cardona
 
Taller de programación clase #4
Taller de programación   clase #4Taller de programación   clase #4
Taller de programación clase #4
Juan Cardona
 

Más de Juan Cardona (6)

Xna game studio presentación 02
Xna game studio   presentación 02Xna game studio   presentación 02
Xna game studio presentación 02
 
Xna game studio presentación 01
Xna game studio   presentación 01Xna game studio   presentación 01
Xna game studio presentación 01
 
Xna game studio presentación 03
Xna game studio   presentación 03Xna game studio   presentación 03
Xna game studio presentación 03
 
Diplomado edumatica sesión #1
Diplomado edumatica   sesión #1Diplomado edumatica   sesión #1
Diplomado edumatica sesión #1
 
Taller de programación clase #5
Taller de programación   clase #5Taller de programación   clase #5
Taller de programación clase #5
 
Taller de programación clase #4
Taller de programación   clase #4Taller de programación   clase #4
Taller de programación clase #4
 

Último

Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
mantenimientocarbra6
 
El uso de las TIC por Cecilia Pozos S..pptx
El uso de las TIC  por Cecilia Pozos S..pptxEl uso de las TIC  por Cecilia Pozos S..pptx
El uso de las TIC por Cecilia Pozos S..pptx
cecypozos703
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
larapalaciosmonzon28
 
mantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptxmantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptx
MiguelAtencio10
 
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANOREVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
gisellearanguren1
 
El uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptxEl uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptx
jgvanessa23
 
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
MiguelAtencio10
 
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
AMADO SALVADOR
 
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
codesiret
 
computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
YaniEscobar2
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
AbrahamCastillo42
 
Flows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos FeaturesFlows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos Features
Paola De la Torre
 
625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf
yuberpalma
 
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdfPLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
70244530
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
cbtechchihuahua
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
larapalaciosmonzon28
 
La Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docxLa Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docx
luiscohailatenazoa0
 
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIAMONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
leia ereni
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
doctorsoluciones34
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
larapalaciosmonzon28
 

Último (20)

Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
 
El uso de las TIC por Cecilia Pozos S..pptx
El uso de las TIC  por Cecilia Pozos S..pptxEl uso de las TIC  por Cecilia Pozos S..pptx
El uso de las TIC por Cecilia Pozos S..pptx
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
 
mantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptxmantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptx
 
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANOREVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
 
El uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptxEl uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptx
 
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
 
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
 
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
 
computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
 
Flows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos FeaturesFlows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos Features
 
625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf
 
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdfPLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
 
La Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docxLa Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docx
 
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIAMONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
 

Xna game studio presentación 07

  • 1. Ejemplo Completo #2: Black Jack Juan Carlos Zuluaga
  • 2. Introducción  Este es un juego clásico de cartas. En esta implementación, lo haremos para 2 jugadores. Cada jugador inicia con 2 cartas, y el objetivo es que la suma de los puntos de las cartas sea 21. Si el jugador se pasa de 21, pierde. Gana el que tenga 21 punto o el que más se aproxime.  Las cartas del 2 a 10, valen el número de la carta, es decir, el 2 vale 2, e 3 vale 3, y así sucesivamente  La J, Q y K, valen 10 puntos  El As vale 1 u 11 puntos dependiendo de lo que más le convenga al jugador
  • 3.  Cree un proyecto XNA. Yo lo llame: Black Jack  Cree la carpeta Images y agregue las imágenes que utilizaremos en este proyecto, que son: un fondo verde, un logo de Black Jack y las 52 cartas que están PN, donde P es la pinta (P: Corazones, D: Diamantes, P: Picas, T: Tréboles) y N el número, que va del 2 al 10, más: J, Q, K y A.  Cree la carpeta Fonts y cree un nuevo archivo de letras llamado Font. Cambie estas etiquetas: <FontName>Impact</FontName> <Size>24</Size>  Agreguemos la enumeración GameState que utilizamos en el ejemplo anterior. No olvide cambiar el nombre del NameSpace  Agregue una nueva clase llamada Pinta, la cual será una enumeración con las pintas de la baraja enum Pinta { Corazón, Diamante, Pica, Trébol }  Agregue una nueva clase llamada Carta, la cual empaquetará todos los atributos de una carta
  • 4. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Black_Jack { class Carta { public Texture2D Textura { get; set; } public Pinta Pinta { get; set; } public string Letra { get; set; } public int Valor1 { get; set; } public int Valor2 { get; set; } } }  Primero pintemos como se verá nuestro juego cuando lo ejecutemos.  Agreguemos estos atributos a la clase Game1 Texture2D fondo; Texture2D logo; SpriteFont font; GameState gameState; int width; int height;  En el constructor de la case Game1, adicione las siguientes líneas:
  • 5. // change windows size width = 900; height = 600; graphics.PreferredBackBufferWidth = width; graphics.PreferredBackBufferHeight = height;  En el Initizalice: gameState = GameState.Uninitiated;  En el Load fondo = Content.Load<Texture2D>("Images/FondoVerde"); logo = Content.Load<Texture2D>("Images/BlackJack"); font = Content.Load<SpriteFont>("Fonts/Font");  En el Draw spriteBatch.Begin(); spriteBatch.Draw(fondo, new Vector2(0, 0), Color.White); spriteBatch.Draw(logo, new Vector2((width - logo.Width) / 2, 20), Color.White); if (gameState == GameState.Uninitiated) { spriteBatch.DrawString(font, "Presioner ENTER para empezar...", new Vector2(250, 250), Color.White); } spriteBatch.End();
  • 6.  Probemos lo que llevamos hasta el momento:  Ahora empecemos con la lógica del juego. Vamos a cargar toda la baraja en memoria y cuando el usuario presione ENTER, vamos a darle a cada jugador 2 cartas y las vamos a mostrar  Vamos a adicionar estos nuevos atributos a la clase Game1 KeyboardState tecladoPrevio; Random rd = new Random(); List<Carta> baraja; List<Carta> jugador1; List<Carta> jugador2;
  • 7.  En el Initialize: baraja = new List<Carta>(); jugador1 = new List<Carta>(); jugador2 = new List<Carta>();  Ahora empecemos con la lógica del juego. Vamos a cargar toda la baraja en memoria y cuando el usuario presione ENTER, vamos a darle a cada jugador 2 cartas y las vamos a mostrar  Vamos a adicionar estos nuevos atributos a la clase Game1 KeyboardState tecladoPrevio; Random rd = new Random(); List<Carta> baraja; List<Carta> jugador1; List<Carta> jugador2;  Adicionemos el método LoadBaraja. El cual carga todo el mazo de cartas en memoria (este método puede ser reutilizable por otros juegos de cartas) private void LoadBaraja() { Pinta pinta = Pinta.Corazón; string pintaLetra = "C"; for (int i = 0; i < 4; i++) { for (int j = 1; j <= 13; j++) { string letra; int valor1; int valor2; if (j == 1)
  • 8. { letra = "A"; valor1 = 1; valor2 = 11; } else if (j == 11) { letra = "J"; valor1 = 10; valor2 = 10; } else if (j == 12) { letra = "Q"; valor1 = 10; valor2 = 10; } else if (j == 13) { letra = "K"; valor1 = 10; valor2 = 10; } else { letra = j.ToString(); valor1 = j; valor2 = j; } Texture2D textura = Content.Load<Texture2D>("Images/" + pintaLetra + letra); Carta carta = new Carta(); carta.Letra = letra;
  • 9. carta.Pinta = pinta; carta.Textura = textura; carta.Valor1 = valor1; carta.Valor2 = valor2; baraja.Add(carta); } pinta++; if (pinta == Pinta.Diamante) pintaLetra = "D"; if (pinta == Pinta.Pica) pintaLetra = "P"; if (pinta == Pinta.Trébol) pintaLetra = "T"; } }  Adicionemos el método AsignarCarta. El cual le asigna una carta NO repetida al jugador (este método puede ser reutilizable por otros juegos de cartas) private void AsignaCarta(List<Carta> jugador) { int index = rd.Next(0, baraja.Count - 1); jugador.Add(baraja[index]); baraja.RemoveAt(index); }  Adicionemos estas líneas al método Update
  • 10. carta.Pinta = pinta; carta.Textura = textura; carta.Valor1 = valor1; carta.Valor2 = valor2; baraja.Add(carta); } pinta++; if (pinta == Pinta.Diamante) pintaLetra = "D"; if (pinta == Pinta.Pica) pintaLetra = "P"; if (pinta == Pinta.Trébol) pintaLetra = "T"; } }  Adicionemos el método AsignarCarta. El cual le asigna una carta NO repetida al jugador (este método puede ser reutilizable por otros juegos de cartas) private void AsignaCarta(List<Carta> jugador) { int index = rd.Next(0, baraja.Count - 1); jugador.Add(baraja[index]); baraja.RemoveAt(index); }  Adicionemos estas líneas al método Update
  • 11. KeyboardState tecladoActual = Keyboard.GetState(); if ((gameState == GameState.Uninitiated || gameState == GameState.Finish) && tecladoActual.IsKeyDown(Keys.Enter)) { gameState = GameState.Running; jugador1.Clear(); jugador2.Clear(); LoadBaraja(); AsignaCarta(jugador1); AsignaCarta(jugador2); AsignaCarta(jugador1); AsignaCarta(jugador2); } tecladoPrevio = tecladoActual;  Agregue el método MostrarCartas: if (gameState == GameState.Running) { spriteBatch.DrawString(font, "I) Carta jugador izquierda, D) Carta jugador derecha, P) Plantar", new Vector2(50, 250), Color.White); MostrarCartas(jugador1, 100, 350); MostrarCartas(jugador2, 500, 350); }
  • 12.  Agregue estas líneas al Draw, antes del spriteBatch.End(); if (gameState == GameState.Running) { spriteBatch.DrawString(font, "I) Carta jugador izquierda, D) Carta jugador derecha, P) Plantar", new Vector2(50, 250), Color.White); MostrarCartas(jugador1, 100, 350); MostrarCartas(jugador2, 500, 350); }  Probemos lo que llevamos hasta el momento:
  • 13.  Ahora agreguemos la lógica del juego y el manejo de puntajes  Adicione estos atributos a la clase Game1: int puntaje1Jugador1; int puntaje2Jugador1; int puntaje1Jugador2; int puntaje2Jugador2; int ganador;  En el Initialize: puntaje1Jugador1 = 0; puntaje2Jugador1 = 0; puntaje1Jugador2 = 0; puntaje2Jugador2 = 0; ganador = 0;
  • 14.  Adicione el método revisar puntajes: private void RevisarPuntajes() { puntaje1Jugador1 = 0; puntaje2Jugador1 = 0; puntaje1Jugador2 = 0; puntaje2Jugador2 = 0; foreach (Carta carta in jugador1) { puntaje1Jugador1 += carta.Valor1; puntaje2Jugador1 += carta.Valor2; } foreach (Carta carta in jugador2) { puntaje1Jugador2 += carta.Valor1; puntaje2Jugador2 += carta.Valor2; } }  Cambien el método Update por el siguiente:
  • 15. protected override void Update(GameTime gameTime) { // Allows the game to exit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); // TODO: Add your update logic here KeyboardState tecladoActual = Keyboard.GetState(); if ((gameState == GameState.Uninitiated || gameState == GameState.Finish) && tecladoActual.IsKeyDown(Keys.Enter)) { gameState = GameState.Running; jugador1.Clear(); jugador2.Clear(); LoadBaraja(); AsignaCarta(jugador1); AsignaCarta(jugador2); AsignaCarta(jugador1); AsignaCarta(jugador2); RevisarPuntajes(); } if (gameState == GameState.Running && tecladoActual.IsKeyDown(Keys.I) && !tecladoPrevio.IsKeyDown(Keys.I) && (puntaje1Jugador1 < 21 || puntaje2Jugador1 < 21)) { AsignaCarta(jugador1); RevisarPuntajes(); }
  • 16. if (gameState == GameState.Running && tecladoActual.IsKeyDown(Keys.D) && !tecladoPrevio.IsKeyDown(Keys.D) && (puntaje1Jugador2 < 22 || puntaje2Jugador2 < 22)) { AsignaCarta(jugador2); RevisarPuntajes(); } if (gameState == GameState.Running) { if (puntaje1Jugador1 == 21 || puntaje2Jugador1 == 21) { ganador = 1; gameState = GameState.Finish; return; } if (puntaje1Jugador2 == 21 || puntaje2Jugador1 == 22) { ganador = 2; gameState = GameState.Finish; return; } } if (gameState == GameState.Running && tecladoActual.IsKeyDown(Keys.P)) { gameState = GameState.Finish; } tecladoPrevio = tecladoActual; base.Update(gameTime); }
  • 17.  Cambien el método Draw por el siguiente: protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here spriteBatch.Begin(); spriteBatch.Draw(fondo, new Vector2(0, 0), Color.White); spriteBatch.Draw(logo, new Vector2((width - logo.Width) / 2, 20), Color.White); if (gameState == GameState.Uninitiated) { spriteBatch.DrawString(font, "Presioner ENTER para empezar...", new Vector2(250, 250), Color.White); } if (gameState == GameState.Running) { spriteBatch.DrawString(font, "I) Carta jugador izquierda, D) Carta jugador derecha, P) Plantar", new Vector2(50, 250), Color.White); MostrarCartas(jugador1, 100, 350); MostrarCartas(jugador2, 500, 350); } if (gameState == GameState.Finish) { spriteBatch.DrawString(font, "Game Over...", new Vector2(350, 250), Color.White); spriteBatch.DrawString(font, "Presioner ENTER para empezar...", new Vector2(250, 300), Color.White); MostrarCartas(jugador1, 100, 350); MostrarCartas(jugador2, 500, 350);
  • 18. if (puntaje1Jugador1 == 21 || puntaje2Jugador1 == 21) { spriteBatch.DrawString(font, "Ganador Jugador 1!", new Vector2(320, 510), Color.White); } else if (puntaje1Jugador2 == 21 || puntaje2Jugador2 == 21) { spriteBatch.DrawString(font, "Ganador Jugador 2!", new Vector2(320, 510), Color.White); } else if ((puntaje1Jugador1 > 21 || puntaje2Jugador1 > 21) && (puntaje1Jugador2 > 21 || puntaje2Jugador2 > 21)) { spriteBatch.DrawString(font, "La Casa Gana!", new Vector2(320, 510), Color.White); } else if ((puntaje1Jugador1 > 21 || puntaje2Jugador1 > 21) && (puntaje1Jugador2 < 21 || puntaje2Jugador2 < 21)) { spriteBatch.DrawString(font, "Ganador Jugador 2!", new Vector2(320, 510), Color.White); } else if ((puntaje1Jugador2 > 21 || puntaje2Jugador2 > 21) && (puntaje1Jugador1 < 21 || puntaje2Jugador1 < 21)) { spriteBatch.DrawString(font, "Ganador Jugador 1!", new Vector2(320, 510), Color.White); } else if ((puntaje1Jugador1 > puntaje1Jugador2) || (puntaje2Jugador1 > puntaje2Jugador2)) { spriteBatch.DrawString(font, "Ganador Jugador 1!", new Vector2(320, 510), Color.White); } else if ((puntaje1Jugador1 < puntaje1Jugador2) || (puntaje2Jugador1 < puntaje2Jugador2)) { spriteBatch.DrawString(font, "Ganador Jugador 2!", new Vector2(320, 510), Color.White); } else { spriteBatch.DrawString(font, "Empate!", new Vector2(320, 510), Color.White); } } spriteBatch.End(); base.Draw(gameTime); }
  • 19.  Probemos nuestro juego terminado!!!
  • 20. Taller #7  Haga un juego de cartas!!!