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
 
Presentacion03
Presentacion03Presentacion03
Presentacion03
Titiushko Jazz
 
Clase03
Clase03Clase03
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
 
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 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

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
Katia Reyes
 
590248542-Pruebas-de-auditoria-informatica.pdf
590248542-Pruebas-de-auditoria-informatica.pdf590248542-Pruebas-de-auditoria-informatica.pdf
590248542-Pruebas-de-auditoria-informatica.pdf
ivanbrito1105
 
Generaciones de Computadoras .
Generaciones de Computadoras                 .Generaciones de Computadoras                 .
Generaciones de Computadoras .
gregory760891
 
bomba-koomey -Todo sobre sus istema y conexiones
bomba-koomey -Todo sobre sus istema y conexionesbomba-koomey -Todo sobre sus istema y conexiones
bomba-koomey -Todo sobre sus istema y conexiones
JessAdrinGonzlezCade
 
Catalogo-Voxtech- accesorios radios RF.pdf
Catalogo-Voxtech- accesorios radios RF.pdfCatalogo-Voxtech- accesorios radios RF.pdf
Catalogo-Voxtech- accesorios radios RF.pdf
walter729637
 
Informe_mc_bombas_Warman_001-WEIR vulco.pdf
Informe_mc_bombas_Warman_001-WEIR vulco.pdfInforme_mc_bombas_Warman_001-WEIR vulco.pdf
Informe_mc_bombas_Warman_001-WEIR vulco.pdf
Rubén Cortes Zavala
 
PROTOCOLO DE NANOPOROS Kit de códigos de barras 16S (SQK-RAB204)
PROTOCOLO DE NANOPOROS Kit de códigos de barras 16S (SQK-RAB204)PROTOCOLO DE NANOPOROS Kit de códigos de barras 16S (SQK-RAB204)
PROTOCOLO DE NANOPOROS Kit de códigos de barras 16S (SQK-RAB204)
ADELAIDA90
 
DN Consultores | Una mirada al mercado de fibra en Perú
DN Consultores | Una mirada al mercado de fibra en PerúDN Consultores | Una mirada al mercado de fibra en Perú
DN Consultores | Una mirada al mercado de fibra en Perú
estudios22
 
SEGUNDA GENERACIÓN xxxxxxxxxxxxxxxx.docx
SEGUNDA GENERACIÓN xxxxxxxxxxxxxxxx.docxSEGUNDA GENERACIÓN xxxxxxxxxxxxxxxx.docx
SEGUNDA GENERACIÓN xxxxxxxxxxxxxxxx.docx
Eddy Nathaly Jaimes Villamizar
 
11. Legislación Aplicada a la Informática.pdf
11. Legislación Aplicada a la Informática.pdf11. Legislación Aplicada a la Informática.pdf
11. Legislación Aplicada a la Informática.pdf
PanchoChangue
 
Diapositiva sobre Tecnologia de la Información y Telecomunicaciones.pptx
Diapositiva sobre Tecnologia de la Información y Telecomunicaciones.pptxDiapositiva sobre Tecnologia de la Información y Telecomunicaciones.pptx
Diapositiva sobre Tecnologia de la Información y Telecomunicaciones.pptx
GnesisOrtegaDeLen
 
"El uso de las TIC en la vida cotidiana". SantanaMartinez_Alejandra
"El uso de las TIC en la vida cotidiana". SantanaMartinez_Alejandra"El uso de las TIC en la vida cotidiana". SantanaMartinez_Alejandra
"El uso de las TIC en la vida cotidiana". SantanaMartinez_Alejandra
241578066
 
_Manejo de Riesgos en el Laboratorio.pdf
_Manejo de Riesgos en el Laboratorio.pdf_Manejo de Riesgos en el Laboratorio.pdf
_Manejo de Riesgos en el Laboratorio.pdf
correodetareas
 
Evolución, características, aplicación, ventajas y desventajas de las TIC
Evolución, características, aplicación, ventajas y desventajas de las TICEvolución, características, aplicación, ventajas y desventajas de las TIC
Evolución, características, aplicación, ventajas y desventajas de las TIC
Henry W. Zavala
 
Conceptos y definiciones de Antenas y propagación
Conceptos y definiciones de Antenas y propagaciónConceptos y definiciones de Antenas y propagación
Conceptos y definiciones de Antenas y propagación
edgarcalle8
 
400816850-Mantenimiento-de-Equipos-de-Espesamiento-pdf.pdf
400816850-Mantenimiento-de-Equipos-de-Espesamiento-pdf.pdf400816850-Mantenimiento-de-Equipos-de-Espesamiento-pdf.pdf
400816850-Mantenimiento-de-Equipos-de-Espesamiento-pdf.pdf
Rubén Cortes Zavala
 
Índice del libro "Metaverso y mundos virtuales: Tecnologías, Retos y Oportuni...
Índice del libro "Metaverso y mundos virtuales: Tecnologías, Retos y Oportuni...Índice del libro "Metaverso y mundos virtuales: Tecnologías, Retos y Oportuni...
Índice del libro "Metaverso y mundos virtuales: Tecnologías, Retos y Oportuni...
Telefónica
 
DE LO HUMANO Y LO COMUNITARIO PROYECTO INTEGRADOR (2).docx
DE LO HUMANO Y LO COMUNITARIO PROYECTO INTEGRADOR (2).docxDE LO HUMANO Y LO COMUNITARIO PROYECTO INTEGRADOR (2).docx
DE LO HUMANO Y LO COMUNITARIO PROYECTO INTEGRADOR (2).docx
lourdesuribe6
 

Último (18)

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
 
590248542-Pruebas-de-auditoria-informatica.pdf
590248542-Pruebas-de-auditoria-informatica.pdf590248542-Pruebas-de-auditoria-informatica.pdf
590248542-Pruebas-de-auditoria-informatica.pdf
 
Generaciones de Computadoras .
Generaciones de Computadoras                 .Generaciones de Computadoras                 .
Generaciones de Computadoras .
 
bomba-koomey -Todo sobre sus istema y conexiones
bomba-koomey -Todo sobre sus istema y conexionesbomba-koomey -Todo sobre sus istema y conexiones
bomba-koomey -Todo sobre sus istema y conexiones
 
Catalogo-Voxtech- accesorios radios RF.pdf
Catalogo-Voxtech- accesorios radios RF.pdfCatalogo-Voxtech- accesorios radios RF.pdf
Catalogo-Voxtech- accesorios radios RF.pdf
 
Informe_mc_bombas_Warman_001-WEIR vulco.pdf
Informe_mc_bombas_Warman_001-WEIR vulco.pdfInforme_mc_bombas_Warman_001-WEIR vulco.pdf
Informe_mc_bombas_Warman_001-WEIR vulco.pdf
 
PROTOCOLO DE NANOPOROS Kit de códigos de barras 16S (SQK-RAB204)
PROTOCOLO DE NANOPOROS Kit de códigos de barras 16S (SQK-RAB204)PROTOCOLO DE NANOPOROS Kit de códigos de barras 16S (SQK-RAB204)
PROTOCOLO DE NANOPOROS Kit de códigos de barras 16S (SQK-RAB204)
 
DN Consultores | Una mirada al mercado de fibra en Perú
DN Consultores | Una mirada al mercado de fibra en PerúDN Consultores | Una mirada al mercado de fibra en Perú
DN Consultores | Una mirada al mercado de fibra en Perú
 
SEGUNDA GENERACIÓN xxxxxxxxxxxxxxxx.docx
SEGUNDA GENERACIÓN xxxxxxxxxxxxxxxx.docxSEGUNDA GENERACIÓN xxxxxxxxxxxxxxxx.docx
SEGUNDA GENERACIÓN xxxxxxxxxxxxxxxx.docx
 
11. Legislación Aplicada a la Informática.pdf
11. Legislación Aplicada a la Informática.pdf11. Legislación Aplicada a la Informática.pdf
11. Legislación Aplicada a la Informática.pdf
 
Diapositiva sobre Tecnologia de la Información y Telecomunicaciones.pptx
Diapositiva sobre Tecnologia de la Información y Telecomunicaciones.pptxDiapositiva sobre Tecnologia de la Información y Telecomunicaciones.pptx
Diapositiva sobre Tecnologia de la Información y Telecomunicaciones.pptx
 
"El uso de las TIC en la vida cotidiana". SantanaMartinez_Alejandra
"El uso de las TIC en la vida cotidiana". SantanaMartinez_Alejandra"El uso de las TIC en la vida cotidiana". SantanaMartinez_Alejandra
"El uso de las TIC en la vida cotidiana". SantanaMartinez_Alejandra
 
_Manejo de Riesgos en el Laboratorio.pdf
_Manejo de Riesgos en el Laboratorio.pdf_Manejo de Riesgos en el Laboratorio.pdf
_Manejo de Riesgos en el Laboratorio.pdf
 
Evolución, características, aplicación, ventajas y desventajas de las TIC
Evolución, características, aplicación, ventajas y desventajas de las TICEvolución, características, aplicación, ventajas y desventajas de las TIC
Evolución, características, aplicación, ventajas y desventajas de las TIC
 
Conceptos y definiciones de Antenas y propagación
Conceptos y definiciones de Antenas y propagaciónConceptos y definiciones de Antenas y propagación
Conceptos y definiciones de Antenas y propagación
 
400816850-Mantenimiento-de-Equipos-de-Espesamiento-pdf.pdf
400816850-Mantenimiento-de-Equipos-de-Espesamiento-pdf.pdf400816850-Mantenimiento-de-Equipos-de-Espesamiento-pdf.pdf
400816850-Mantenimiento-de-Equipos-de-Espesamiento-pdf.pdf
 
Índice del libro "Metaverso y mundos virtuales: Tecnologías, Retos y Oportuni...
Índice del libro "Metaverso y mundos virtuales: Tecnologías, Retos y Oportuni...Índice del libro "Metaverso y mundos virtuales: Tecnologías, Retos y Oportuni...
Índice del libro "Metaverso y mundos virtuales: Tecnologías, Retos y Oportuni...
 
DE LO HUMANO Y LO COMUNITARIO PROYECTO INTEGRADOR (2).docx
DE LO HUMANO Y LO COMUNITARIO PROYECTO INTEGRADOR (2).docxDE LO HUMANO Y LO COMUNITARIO PROYECTO INTEGRADOR (2).docx
DE LO HUMANO Y LO COMUNITARIO PROYECTO INTEGRADOR (2).docx
 

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