SlideShare una empresa de Scribd logo
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

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
 

Similar a Xna game studio presentación 06

Clase03
Clase03Clase03
Presentacion03
Presentacion03Presentacion03
Presentacion03
Titiushko Jazz
 
Clase03
Clase03Clase03
Presentacion03
Presentacion03Presentacion03
Presentacion03
Titiushko Jazz
 
Acmar trucos de visual basic(2)
Acmar   trucos de visual basic(2)Acmar   trucos de visual basic(2)
Acmar trucos de visual basic(2)
Ivan Ramirez Iglesias
 
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
rasave
 
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 videojuegos
GUEIM
 
Numeros aleatorios
Numeros aleatoriosNumeros aleatorios
Numeros aleatorios
Marcelino Torres
 
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
Victor 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-sistema
pablomoralesse13
 
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
pablomoralesse13
 
Presentacion proyecto
Presentacion proyectoPresentacion proyecto
Presentacion proyecto
Roberto Perales
 
Presentacion proyecto
Presentacion proyectoPresentacion proyecto
Presentacion proyecto
Roberto Perales
 
Presentacion420
Presentacion420Presentacion420
Presentacion420
Titiushko Jazz
 
Presentacion420
Presentacion420Presentacion420
Presentacion420
Titiushko Jazz
 
Ejercicio 6
Ejercicio 6Ejercicio 6
Ejercicio 6
miguelcastromejia
 
Mysql
MysqlMysql
Mysql
Anye Krap
 
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)

Clase03
Clase03Clase03
Clase03
 
Presentacion03
Presentacion03Presentacion03
Presentacion03
 
Clase03
Clase03Clase03
Clase03
 
Presentacion03
Presentacion03Presentacion03
Presentacion03
 
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 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 #2
Diplomado edumatica   sesión #2Diplomado edumatica   sesión #2
Diplomado edumatica sesión #2
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
 
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 #2
Taller de programación   clase #2Taller de programación   clase #2
Taller de programación clase #2
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
 

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

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
 
TIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololoTIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololo
KukiiSanchez
 
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
 
Programming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdfProgramming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdf
Manuel Diaz
 
INFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIAINFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIA
renzocruz180310
 
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
 
Modo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdfModo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdf
ranierglez
 
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
 
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
 
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDADEXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
AngelCristhianMB
 
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
 
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
 
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
 
Inteligencia Artificial
Inteligencia ArtificialInteligencia Artificial
Inteligencia Artificial
YashiraPaye
 
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
 
Refrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y ForzadoRefrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y Forzado
NicandroMartinez2
 
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
 
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdfPresentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
giampierdiaz5
 

Último (20)

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
 
TIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololoTIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololo
 
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)
 
Programming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdfProgramming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdf
 
INFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIAINFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIA
 
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
 
Modo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdfModo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdf
 
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
 
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
 
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDADEXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
 
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
 
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
 
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
 
Inteligencia Artificial
Inteligencia ArtificialInteligencia Artificial
Inteligencia Artificial
 
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
 
Refrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y ForzadoRefrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y Forzado
 
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
 
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdfPresentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
 

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