SlideShare una empresa de Scribd logo
1 de 14
Ejemplo Completo #1:
DIM vs. NAL
Juan Carlos Zuluaga
Introducción
 Este será el primero de una serie de juegos que nos servirán de base para
construir nuestros propios juegos.
 El juego consiste en que aparecen los escudos de los equipos de Futbol de
Medellín y Nacional (los puedes cambiar por los equipos de tu preferencia) y
aparecen una serie de balones, al azar en cualquier posición de la pantalla. El
escudo que primero tome el balón, anota un punto. El que primero tome 10
balones, gana el juego.
 Cabe anotar que los dos escudos no se pueden tocar, un escudo bloquea el
otro.
 Cree un proyecto XNA. Yo lo llame: DIM vs. NAL
 Cree la carpeta Images y agregue las imágenes que utilizaremos en este proyecto:
Balon2.png, CanchaFutbol.jpg, DIM.png y NAL.png
 Cree la carpeta Sound y agregue los sonidos que utilizaremos en este proyecto:
GolDIM.wav, GolNAL.wav, y Music.mp3
 Cree la carpeta Fonts y cree un nuevo archivo de letras llamado Font. Cambie
estas etiquetas:
<Size>30</Size>
<Style>Bold</Style>
 Ya hemos preparado todo para empezar, primero dibujemos como se verá nuestro
juego. Para esto agreguemos los siguientes atributos a la clase Game1:
Texture2D DIM;
Texture2D NAL;
Texture2D Balon;
Texture2D CanchaFutbol;
Rectangle cuadradoDIM;
Rectangle cuadradoNAL;
Rectangle cuadradoBalon;
int width;
int height;
 En el constructor de la clase Game1, cambiemos el tamaño de la ventana con
estas líneas:
// change windows size
width = 960;
height = 600;
graphics.PreferredBackBufferWidth = width;
graphics.PreferredBackBufferHeight = height;
 En el Load, carguemos los objetos con las siguientes líneas:
// Load images
DIM = Content.Load<Texture2D>("Images/DIM");
NAL = Content.Load<Texture2D>("Images/NAL");
Balon = Content.Load<Texture2D>("Images/Balon2");
CanchaFutbol = Content.Load<Texture2D>("Images/CanchaFutbol");
// Set the objects
cuadradoDIM = new Rectangle(100, (height - DIM.Height) / 2, 99, 119);
cuadradoNAL = new Rectangle(width - NAL.Width - 100, (height - NAL.Height) / 2, 99, 142);
cuadradoBalon = new Rectangle((width - Balon.Width) / 2, (height - Balon.Height) / 2, 68, 68);
 En el Draw, colocar las siguientes líneas:
spriteBatch.Begin();
spriteBatch.Draw(CanchaFutbol, new Vector2(0, 0), Color.White);
spriteBatch.Draw(DIM, cuadradoDIM, Color.White);
spriteBatch.Draw(NAL, cuadradoNAL, Color.White);
spriteBatch.Draw(Balon, cuadradoBalon, Color.White);
spriteBatch.End();
 Ya podemos probar lo que llevamos
 Ahora pongamos movimiento a los escudos de los equipos
 Agreguemos estos 2 nuevos atributos:
int velocityDIM;
int velocityNAL;
 En el Initialize los inicializamos:
// Determine the size move
velocityDIM = 2;
velocityNAL = 2;
 Y en el Update, colocamos la siguiente lógica:
var teclado = Keyboard.GetState();
// Move DIM
if (teclado.IsKeyDown(Keys.A)) cuadradoDIM.X -= velocityDIM;
if (teclado.IsKeyDown(Keys.D)) cuadradoDIM.X += velocityDIM;
if (teclado.IsKeyDown(Keys.W)) cuadradoDIM.Y -= velocityDIM;
if (teclado.IsKeyDown(Keys.S)) cuadradoDIM.Y += velocityDIM;
cuadradoDIM.X = (int)MathHelper.Clamp(cuadradoDIM.X, 0, width - cuadradoDIM.Width);
cuadradoDIM.Y = (int)MathHelper.Clamp(cuadradoDIM.Y, 0, height - cuadradoDIM.Height);
// Move NAL
if (teclado.IsKeyDown(Keys.Up)) cuadradoNAL.Y -= velocityNAL;
if (teclado.IsKeyDown(Keys.Down)) cuadradoNAL.Y += velocityNAL;
if (teclado.IsKeyDown(Keys.Left)) cuadradoNAL.X -= velocityNAL;
if (teclado.IsKeyDown(Keys.Right)) cuadradoNAL.X += velocityNAL;
cuadradoNAL.X = (int)MathHelper.Clamp(cuadradoNAL.X, 0, width - cuadradoNAL.Width);
cuadradoNAL.Y = (int)MathHelper.Clamp(cuadradoNAL.Y, 0, height - cuadradoNAL.Height);
 Ya podemos probar el movimiento de los escudos de los equipos
 Ahora vamos a agregar un estado de juego y la lógica para capturar los balones, evitar las
colisiones de los escudos, llevar un puntaje y los sonidos del juego
 Agreguemos una nueva clase llamada: GameState, esta va a ser una enumeración con los
diferentes estados que va a tener el juego. Esta clase la seguiremos usando para
posteriores juegos. Lleva las siguientes líneas:
enum GameState
{
Uninitiated,
Running,
Finish
}
 Agregue las siguientes propiedades a la clase Game1
SpriteFont font;
GameState gameState;
SoundEffect golDIM;
SoundEffect golNAL;
Song music;
int puntosDIM;
int puntosNAL;
 En el Initialize, colocar las siguientes líneas:
// Initialize the scores
puntosDIM = 0;
puntosNAL = 0;
 En el Load, colocar las siguientes líneas:
// Load font
font = Content.Load<SpriteFont>("Fonts/Font");
// Load sounds
golDIM = Content.Load<SoundEffect>("Sound/GolDIM");
golNAL = Content.Load<SoundEffect>("Sound/GolNAL");
music = Content.Load<Song>("Sound/Music");
 Agregue el método NewBall
private void NewBall()
{
do
{
Random rd = new Random();
int posX = rd.Next(0, width - cuadradoBalon.Width) + 1;
int posY = rd.Next(0, height - cuadradoBalon.Height) + 1;
cuadradoBalon.X = posX;
cuadradoBalon.Y = posY;
if (!cuadradoBalon.Intersects(cuadradoDIM) && !cuadradoBalon.Intersects(cuadradoNAL)) return;
} while (true);
}
 Agregue el método PlayMusic:
private void PlayMusic(Song gameplayMusic)
{
try
{
MediaPlayer.Play(gameplayMusic);
MediaPlayer.IsRepeating = true;
}
catch { }
}
 Cambie 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
var teclado = Keyboard.GetState();
if (gameState == GameState.Running)
{
// Backup previous values
int antXDIM = cuadradoDIM.X;
int antYDIM = cuadradoDIM.Y;
int antXNAL = cuadradoNAL.X;
int antYNAL = cuadradoNAL.Y;
// Move DIM
if (teclado.IsKeyDown(Keys.A)) cuadradoDIM.X -= velocityDIM;
if (teclado.IsKeyDown(Keys.D)) cuadradoDIM.X += velocityDIM;
if (teclado.IsKeyDown(Keys.W)) cuadradoDIM.Y -= velocityDIM;
if (teclado.IsKeyDown(Keys.S)) cuadradoDIM.Y += velocityDIM;
cuadradoDIM.X = (int)MathHelper.Clamp(cuadradoDIM.X, 0, width - cuadradoDIM.Width);
cuadradoDIM.Y = (int)MathHelper.Clamp(cuadradoDIM.Y, 0, height - cuadradoDIM.Height);
// Move NAL
if (teclado.IsKeyDown(Keys.Up)) cuadradoNAL.Y -= velocityNAL;
if (teclado.IsKeyDown(Keys.Down)) cuadradoNAL.Y += velocityNAL;
if (teclado.IsKeyDown(Keys.Left)) cuadradoNAL.X -= velocityNAL;
if (teclado.IsKeyDown(Keys.Right)) cuadradoNAL.X += velocityNAL;
cuadradoNAL.X = (int)MathHelper.Clamp(cuadradoNAL.X, 0, width - cuadradoNAL.Width);
cuadradoNAL.Y = (int)MathHelper.Clamp(cuadradoNAL.Y, 0, height - cuadradoNAL.Height);
// Checks if the players crash!
if (cuadradoDIM.Intersects(cuadradoNAL))
{
cuadradoDIM.X = antXDIM;
cuadradoDIM.Y = antYDIM;
cuadradoNAL.X = antXNAL;
cuadradoNAL.Y = antYNAL;
}
// Check if DIM catch the ball
if (cuadradoDIM.Intersects(cuadradoBalon))
{
golDIM.Play();
puntosDIM++;
NewBall();
}
// Check if NAL catch the ball
if (cuadradoNAL.Intersects(cuadradoBalon))
{
golNAL.Play();
puntosNAL++;
NewBall();
}
if (puntosDIM >= 10 || puntosNAL >= 10)
{
MediaPlayer.Stop();
gameState = GameState.Finish;
}
}
else
{
if (teclado.IsKeyDown(Keys.Enter))
{
if (gameState == GameState.Uninitiated)
{
gameState = GameState.Running;
PlayMusic(music);
}
else
{
cuadradoDIM.X = 100;
cuadradoDIM.Y = (height - DIM.Height) / 2;
cuadradoNAL.X = width - NAL.Width - 100;
cuadradoNAL.Y = (height - NAL.Height) / 2;
cuadradoBalon.X = (width - Balon.Width) / 2;
cuadradoBalon.Y = (height - Balon.Height) / 2;
puntosDIM = 0;
puntosNAL = 0;
gameState = GameState.Uninitiated;
}
}
}
base.Update(gameTime);
}
 Cambie el método Update por el siguiente:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: Add your drawing code here
spriteBatch.Begin();
spriteBatch.Draw(CanchaFutbol, new Vector2(0, 0), Color.White);
spriteBatch.Draw(DIM, cuadradoDIM, Color.White);
spriteBatch.Draw(NAL, cuadradoNAL, Color.White);
spriteBatch.Draw(Balon, cuadradoBalon, Color.White);
if (gameState == GameState.Uninitiated)
{
spriteBatch.DrawString(font, "PRESS ENTER TO START...", new Vector2(300, 350), Color.White);
}
else if (gameState == GameState.Running)
{
// Draw scores
spriteBatch.DrawString(font, "DIM " + puntosDIM, new Vector2(70, 10), Color.White);
spriteBatch.DrawString(font, "NAL " + puntosNAL, new Vector2(width - 200, 10), Color.White);
}
else
{
if (puntosDIM > puntosNAL)
{
spriteBatch.DrawString(font, "EL PODEROSO WINS!!!", new Vector2(300, 300), Color.White);
spriteBatch.DrawString(font, "PRESS ENTER TO START AGAIN...", new Vector2(250, 400), Color.White);
}
else
{
spriteBatch.DrawString(font, "EL VERDE WINS!!!", new Vector2(300, 350), Color.White);
spriteBatch.DrawString(font, "PRESS ENTER TO START AGAIN...", new Vector2(250, 400), Color.White);
}
}
spriteBatch.End();
base.Draw(gameTime);
}
 Ya puedes probar el juego terminado!!!
Taller #6
 Modificar el juego anterior para que aparezcan 4 obstáculos de forma
aleatoria (donde no haya, ni balón ni escudos). Estos obstáculos no permiten
que los escudos pasen por encima de ellos, haciendo el juego un poco más
interesante

Más contenido relacionado

La actualidad más candente

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
 

Similar a Xna game studio presentación 06

Ejercicios resueltos en el Laboratorio de estructuras struct registros 3 CIP200
Ejercicios resueltos en el Laboratorio de estructuras struct registros 3 CIP200Ejercicios resueltos en el Laboratorio de estructuras struct registros 3 CIP200
Ejercicios resueltos en el Laboratorio de estructuras struct registros 3 CIP200rasave
 
Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...
Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...
Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...rasave
 
Taller programación videojuegos
Taller programación videojuegosTaller programación videojuegos
Taller programación videojuegosGUEIM
 
6. revisión y modificación del juego -“space blaster”- Construct 5 - VideoGame
6.  revisión y modificación del juego -“space blaster”- Construct 5 - VideoGame6.  revisión y modificación del juego -“space blaster”- Construct 5 - VideoGame
6. revisión y modificación del juego -“space blaster”- Construct 5 - VideoGameVictor Aravena
 
Practica de-comandos-básicos-de-la-consola-del-símbolo-de-sistema
Practica de-comandos-básicos-de-la-consola-del-símbolo-de-sistemaPractica de-comandos-básicos-de-la-consola-del-símbolo-de-sistema
Practica de-comandos-básicos-de-la-consola-del-símbolo-de-sistemapablomoralesse13
 
Practica de-comandos-básicos-de-la-consola-del-símbolo-de-sistema
Practica de-comandos-básicos-de-la-consola-del-símbolo-de-sistemaPractica de-comandos-básicos-de-la-consola-del-símbolo-de-sistema
Practica de-comandos-básicos-de-la-consola-del-símbolo-de-sistemapablomoralesse13
 
Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)Fernando Salamero
 

Similar a Xna game studio presentación 06 (19)

Presentacion03
Presentacion03Presentacion03
Presentacion03
 
Clase03
Clase03Clase03
Clase03
 
Presentacion03
Presentacion03Presentacion03
Presentacion03
 
Clase03
Clase03Clase03
Clase03
 
Acmar trucos de visual basic(2)
Acmar   trucos de visual basic(2)Acmar   trucos de visual basic(2)
Acmar trucos de visual basic(2)
 
Ejercicios resueltos en el Laboratorio de estructuras struct registros 3 CIP200
Ejercicios resueltos en el Laboratorio de estructuras struct registros 3 CIP200Ejercicios resueltos en el Laboratorio de estructuras struct registros 3 CIP200
Ejercicios resueltos en el Laboratorio de estructuras struct registros 3 CIP200
 
Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...
Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...
Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...
 
Taller programación videojuegos
Taller programación videojuegosTaller programación videojuegos
Taller programación videojuegos
 
Numeros aleatorios
Numeros aleatoriosNumeros aleatorios
Numeros aleatorios
 
6. revisión y modificación del juego -“space blaster”- Construct 5 - VideoGame
6.  revisión y modificación del juego -“space blaster”- Construct 5 - VideoGame6.  revisión y modificación del juego -“space blaster”- Construct 5 - VideoGame
6. revisión y modificación del juego -“space blaster”- Construct 5 - VideoGame
 
Practica de-comandos-básicos-de-la-consola-del-símbolo-de-sistema
Practica de-comandos-básicos-de-la-consola-del-símbolo-de-sistemaPractica de-comandos-básicos-de-la-consola-del-símbolo-de-sistema
Practica de-comandos-básicos-de-la-consola-del-símbolo-de-sistema
 
Practica de-comandos-básicos-de-la-consola-del-símbolo-de-sistema
Practica de-comandos-básicos-de-la-consola-del-símbolo-de-sistemaPractica de-comandos-básicos-de-la-consola-del-símbolo-de-sistema
Practica de-comandos-básicos-de-la-consola-del-símbolo-de-sistema
 
Presentacion proyecto
Presentacion proyectoPresentacion proyecto
Presentacion proyecto
 
Presentacion proyecto
Presentacion proyectoPresentacion proyecto
Presentacion proyecto
 
Presentacion420
Presentacion420Presentacion420
Presentacion420
 
Presentacion420
Presentacion420Presentacion420
Presentacion420
 
Ejercicio 6
Ejercicio 6Ejercicio 6
Ejercicio 6
 
Mysql
MysqlMysql
Mysql
 
Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)
 

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 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 #2
Diplomado edumatica   sesión #2Diplomado edumatica   sesión #2
Diplomado edumatica sesión #2Juan 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
 
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 #2
Taller de programación   clase #2Taller de programación   clase #2
Taller de programación clase #2Juan 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
 

Más de Juan Cardona (10)

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 #2
Diplomado edumatica   sesión #2Diplomado edumatica   sesión #2
Diplomado edumatica sesión #2
 
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
 
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 #2
Taller de programación   clase #2Taller de programación   clase #2
Taller de programación clase #2
 
Taller de programación clase #1
Taller de programación   clase #1Taller de programación   clase #1
Taller de programación clase #1
 

Último

El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 

Último (20)

El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 

Xna game studio presentación 06

  • 1. Ejemplo Completo #1: DIM vs. NAL Juan Carlos Zuluaga
  • 2. Introducción  Este será el primero de una serie de juegos que nos servirán de base para construir nuestros propios juegos.  El juego consiste en que aparecen los escudos de los equipos de Futbol de Medellín y Nacional (los puedes cambiar por los equipos de tu preferencia) y aparecen una serie de balones, al azar en cualquier posición de la pantalla. El escudo que primero tome el balón, anota un punto. El que primero tome 10 balones, gana el juego.  Cabe anotar que los dos escudos no se pueden tocar, un escudo bloquea el otro.
  • 3.  Cree un proyecto XNA. Yo lo llame: DIM vs. NAL  Cree la carpeta Images y agregue las imágenes que utilizaremos en este proyecto: Balon2.png, CanchaFutbol.jpg, DIM.png y NAL.png  Cree la carpeta Sound y agregue los sonidos que utilizaremos en este proyecto: GolDIM.wav, GolNAL.wav, y Music.mp3  Cree la carpeta Fonts y cree un nuevo archivo de letras llamado Font. Cambie estas etiquetas: <Size>30</Size> <Style>Bold</Style>  Ya hemos preparado todo para empezar, primero dibujemos como se verá nuestro juego. Para esto agreguemos los siguientes atributos a la clase Game1: Texture2D DIM; Texture2D NAL; Texture2D Balon; Texture2D CanchaFutbol; Rectangle cuadradoDIM; Rectangle cuadradoNAL; Rectangle cuadradoBalon; int width; int height;  En el constructor de la clase Game1, cambiemos el tamaño de la ventana con estas líneas:
  • 4. // change windows size width = 960; height = 600; graphics.PreferredBackBufferWidth = width; graphics.PreferredBackBufferHeight = height;  En el Load, carguemos los objetos con las siguientes líneas: // Load images DIM = Content.Load<Texture2D>("Images/DIM"); NAL = Content.Load<Texture2D>("Images/NAL"); Balon = Content.Load<Texture2D>("Images/Balon2"); CanchaFutbol = Content.Load<Texture2D>("Images/CanchaFutbol"); // Set the objects cuadradoDIM = new Rectangle(100, (height - DIM.Height) / 2, 99, 119); cuadradoNAL = new Rectangle(width - NAL.Width - 100, (height - NAL.Height) / 2, 99, 142); cuadradoBalon = new Rectangle((width - Balon.Width) / 2, (height - Balon.Height) / 2, 68, 68);  En el Draw, colocar las siguientes líneas: spriteBatch.Begin(); spriteBatch.Draw(CanchaFutbol, new Vector2(0, 0), Color.White); spriteBatch.Draw(DIM, cuadradoDIM, Color.White); spriteBatch.Draw(NAL, cuadradoNAL, Color.White); spriteBatch.Draw(Balon, cuadradoBalon, Color.White); spriteBatch.End();  Ya podemos probar lo que llevamos  Ahora pongamos movimiento a los escudos de los equipos
  • 5.  Agreguemos estos 2 nuevos atributos: int velocityDIM; int velocityNAL;  En el Initialize los inicializamos: // Determine the size move velocityDIM = 2; velocityNAL = 2;  Y en el Update, colocamos la siguiente lógica: var teclado = Keyboard.GetState(); // Move DIM if (teclado.IsKeyDown(Keys.A)) cuadradoDIM.X -= velocityDIM; if (teclado.IsKeyDown(Keys.D)) cuadradoDIM.X += velocityDIM; if (teclado.IsKeyDown(Keys.W)) cuadradoDIM.Y -= velocityDIM; if (teclado.IsKeyDown(Keys.S)) cuadradoDIM.Y += velocityDIM; cuadradoDIM.X = (int)MathHelper.Clamp(cuadradoDIM.X, 0, width - cuadradoDIM.Width); cuadradoDIM.Y = (int)MathHelper.Clamp(cuadradoDIM.Y, 0, height - cuadradoDIM.Height); // Move NAL if (teclado.IsKeyDown(Keys.Up)) cuadradoNAL.Y -= velocityNAL; if (teclado.IsKeyDown(Keys.Down)) cuadradoNAL.Y += velocityNAL; if (teclado.IsKeyDown(Keys.Left)) cuadradoNAL.X -= velocityNAL; if (teclado.IsKeyDown(Keys.Right)) cuadradoNAL.X += velocityNAL; cuadradoNAL.X = (int)MathHelper.Clamp(cuadradoNAL.X, 0, width - cuadradoNAL.Width); cuadradoNAL.Y = (int)MathHelper.Clamp(cuadradoNAL.Y, 0, height - cuadradoNAL.Height);
  • 6.  Ya podemos probar el movimiento de los escudos de los equipos  Ahora vamos a agregar un estado de juego y la lógica para capturar los balones, evitar las colisiones de los escudos, llevar un puntaje y los sonidos del juego  Agreguemos una nueva clase llamada: GameState, esta va a ser una enumeración con los diferentes estados que va a tener el juego. Esta clase la seguiremos usando para posteriores juegos. Lleva las siguientes líneas:
  • 7. enum GameState { Uninitiated, Running, Finish }  Agregue las siguientes propiedades a la clase Game1 SpriteFont font; GameState gameState; SoundEffect golDIM; SoundEffect golNAL; Song music; int puntosDIM; int puntosNAL;  En el Initialize, colocar las siguientes líneas: // Initialize the scores puntosDIM = 0; puntosNAL = 0;  En el Load, colocar las siguientes líneas: // Load font font = Content.Load<SpriteFont>("Fonts/Font"); // Load sounds golDIM = Content.Load<SoundEffect>("Sound/GolDIM"); golNAL = Content.Load<SoundEffect>("Sound/GolNAL"); music = Content.Load<Song>("Sound/Music");  Agregue el método NewBall
  • 8. private void NewBall() { do { Random rd = new Random(); int posX = rd.Next(0, width - cuadradoBalon.Width) + 1; int posY = rd.Next(0, height - cuadradoBalon.Height) + 1; cuadradoBalon.X = posX; cuadradoBalon.Y = posY; if (!cuadradoBalon.Intersects(cuadradoDIM) && !cuadradoBalon.Intersects(cuadradoNAL)) return; } while (true); }  Agregue el método PlayMusic: private void PlayMusic(Song gameplayMusic) { try { MediaPlayer.Play(gameplayMusic); MediaPlayer.IsRepeating = true; } catch { } }  Cambie el método Update por el siguiente:
  • 9. 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 var teclado = Keyboard.GetState(); if (gameState == GameState.Running) { // Backup previous values int antXDIM = cuadradoDIM.X; int antYDIM = cuadradoDIM.Y; int antXNAL = cuadradoNAL.X; int antYNAL = cuadradoNAL.Y; // Move DIM if (teclado.IsKeyDown(Keys.A)) cuadradoDIM.X -= velocityDIM; if (teclado.IsKeyDown(Keys.D)) cuadradoDIM.X += velocityDIM; if (teclado.IsKeyDown(Keys.W)) cuadradoDIM.Y -= velocityDIM; if (teclado.IsKeyDown(Keys.S)) cuadradoDIM.Y += velocityDIM; cuadradoDIM.X = (int)MathHelper.Clamp(cuadradoDIM.X, 0, width - cuadradoDIM.Width); cuadradoDIM.Y = (int)MathHelper.Clamp(cuadradoDIM.Y, 0, height - cuadradoDIM.Height); // Move NAL if (teclado.IsKeyDown(Keys.Up)) cuadradoNAL.Y -= velocityNAL; if (teclado.IsKeyDown(Keys.Down)) cuadradoNAL.Y += velocityNAL; if (teclado.IsKeyDown(Keys.Left)) cuadradoNAL.X -= velocityNAL; if (teclado.IsKeyDown(Keys.Right)) cuadradoNAL.X += velocityNAL;
  • 10. cuadradoNAL.X = (int)MathHelper.Clamp(cuadradoNAL.X, 0, width - cuadradoNAL.Width); cuadradoNAL.Y = (int)MathHelper.Clamp(cuadradoNAL.Y, 0, height - cuadradoNAL.Height); // Checks if the players crash! if (cuadradoDIM.Intersects(cuadradoNAL)) { cuadradoDIM.X = antXDIM; cuadradoDIM.Y = antYDIM; cuadradoNAL.X = antXNAL; cuadradoNAL.Y = antYNAL; } // Check if DIM catch the ball if (cuadradoDIM.Intersects(cuadradoBalon)) { golDIM.Play(); puntosDIM++; NewBall(); } // Check if NAL catch the ball if (cuadradoNAL.Intersects(cuadradoBalon)) { golNAL.Play(); puntosNAL++; NewBall(); } if (puntosDIM >= 10 || puntosNAL >= 10) { MediaPlayer.Stop(); gameState = GameState.Finish; }
  • 11. } else { if (teclado.IsKeyDown(Keys.Enter)) { if (gameState == GameState.Uninitiated) { gameState = GameState.Running; PlayMusic(music); } else { cuadradoDIM.X = 100; cuadradoDIM.Y = (height - DIM.Height) / 2; cuadradoNAL.X = width - NAL.Width - 100; cuadradoNAL.Y = (height - NAL.Height) / 2; cuadradoBalon.X = (width - Balon.Width) / 2; cuadradoBalon.Y = (height - Balon.Height) / 2; puntosDIM = 0; puntosNAL = 0; gameState = GameState.Uninitiated; } } } base.Update(gameTime); }  Cambie el método Update por el siguiente:
  • 12. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here spriteBatch.Begin(); spriteBatch.Draw(CanchaFutbol, new Vector2(0, 0), Color.White); spriteBatch.Draw(DIM, cuadradoDIM, Color.White); spriteBatch.Draw(NAL, cuadradoNAL, Color.White); spriteBatch.Draw(Balon, cuadradoBalon, Color.White); if (gameState == GameState.Uninitiated) { spriteBatch.DrawString(font, "PRESS ENTER TO START...", new Vector2(300, 350), Color.White); } else if (gameState == GameState.Running) { // Draw scores spriteBatch.DrawString(font, "DIM " + puntosDIM, new Vector2(70, 10), Color.White); spriteBatch.DrawString(font, "NAL " + puntosNAL, new Vector2(width - 200, 10), Color.White); } else { if (puntosDIM > puntosNAL) { spriteBatch.DrawString(font, "EL PODEROSO WINS!!!", new Vector2(300, 300), Color.White); spriteBatch.DrawString(font, "PRESS ENTER TO START AGAIN...", new Vector2(250, 400), Color.White); } else { spriteBatch.DrawString(font, "EL VERDE WINS!!!", new Vector2(300, 350), Color.White); spriteBatch.DrawString(font, "PRESS ENTER TO START AGAIN...", new Vector2(250, 400), Color.White);
  • 14. Taller #6  Modificar el juego anterior para que aparezcan 4 obstáculos de forma aleatoria (donde no haya, ni balón ni escudos). Estos obstáculos no permiten que los escudos pasen por encima de ellos, haciendo el juego un poco más interesante