SlideShare uma empresa Scribd logo
1 de 20
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!!!

Mais conteúdo relacionado

Mais procurados (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
 

Destaque

Diplomado edumatica sesión #2
Diplomado edumatica   sesión #2Diplomado edumatica   sesión #2
Diplomado edumatica sesión #2Juan Cardona
 
Taller de programación clase #2
Taller de programación   clase #2Taller de programación   clase #2
Taller de programación clase #2Juan Cardona
 
Taller de programación clase #3
Taller de programación   clase #3Taller de programación   clase #3
Taller de programación clase #3Juan Cardona
 
Taller de programación clase #1
Taller de programación   clase #1Taller de programación   clase #1
Taller de programación clase #1Juan 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ñalesJosé Mendoza
 
Int numeros complejos
Int numeros complejosInt numeros complejos
Int numeros complejosJosé Mendoza
 
Ciclos Java - NetsBeans - Algoritmia
Ciclos Java - NetsBeans - AlgoritmiaCiclos Java - NetsBeans - Algoritmia
Ciclos Java - NetsBeans - AlgoritmiaDaniel Gómez
 
02 examen diagnóstico bd
02 examen diagnóstico bd02 examen diagnóstico bd
02 examen diagnóstico bdJosé Mendoza
 
Programación Orientada a Eventos Java
Programación Orientada a Eventos JavaProgramación Orientada a Eventos Java
Programación Orientada a Eventos JavaJosé Mendoza
 
Tipos y Enfoques de Investigacion
Tipos y Enfoques de InvestigacionTipos y Enfoques de Investigacion
Tipos y Enfoques de InvestigacionJosé Mendoza
 

Destaque (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
 

Semelhante a Xna game studio presentación 07

Juego Bingo - JAVA
Juego Bingo - JAVAJuego Bingo - JAVA
Juego Bingo - JAVAedgar muñoz
 
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
 

Semelhante a Xna game studio presentación 07 (6)

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"
 
Java
JavaJava
Java
 

Mais 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 02Juan Cardona
 
Xna game studio presentación 01
Xna game studio   presentación 01Xna game studio   presentación 01
Xna game studio presentación 01Juan Cardona
 
Xna game studio presentación 03
Xna game studio   presentación 03Xna game studio   presentación 03
Xna game studio presentación 03Juan Cardona
 
Diplomado edumatica sesión #1
Diplomado edumatica   sesión #1Diplomado edumatica   sesión #1
Diplomado edumatica sesión #1Juan Cardona
 
Taller de programación clase #5
Taller de programación   clase #5Taller de programación   clase #5
Taller de programación clase #5Juan Cardona
 
Taller de programación clase #4
Taller de programación   clase #4Taller de programación   clase #4
Taller de programación clase #4Juan Cardona
 

Mais 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

Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024NicolleAndrade7
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónAntonia Yamilet Perez Palomares
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosYOMIRAVILLARREAL1
 
Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaEdwinGarca59
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...dramosbrise1403
 
innovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 bloginnovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 blogManuel Diaz
 
avancestecnologicossigloveintiunoprofetengohambreayuda
avancestecnologicossigloveintiunoprofetengohambreayudaavancestecnologicossigloveintiunoprofetengohambreayuda
avancestecnologicossigloveintiunoprofetengohambreayudadocente
 
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALGuadalinfoHuscarGuad
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).jcaballerosamayoa
 
Desarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaDesarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaRicardoEstrada90
 
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.pptx221112876
 
Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.241534381
 
editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docxssusere34b451
 
herramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaherramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaJadeVilcscordova
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .itzyrivera61103
 
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiCVelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC6dwwcgtpfx
 
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxTipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxJOELGARCIA849853
 
Electricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxElectricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxCsarNlsonMrquezContr
 
Imágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónImágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónUniversidad de Sonora
 
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfRedes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfJosAndrRosarioVzquez
 

Último (20)

Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de Datos
 
Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación Latinoamerica
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
 
innovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 bloginnovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 blog
 
avancestecnologicossigloveintiunoprofetengohambreayuda
avancestecnologicossigloveintiunoprofetengohambreayudaavancestecnologicossigloveintiunoprofetengohambreayuda
avancestecnologicossigloveintiunoprofetengohambreayuda
 
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).
 
Desarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaDesarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - Estrada
 
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
 
Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.
 
editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docx
 
herramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaherramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el tema
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .
 
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiCVelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
 
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxTipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
 
Electricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxElectricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docx
 
Imágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónImágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la información
 
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfRedes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
 

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!!!