Cargar y animar un Sprite en XNA.

Deja un comentario

El objetivo de este pequeño tutorial es  cargar y animar un Sprite en XNA, este Sprite deberá recorrer los cuatro extremos de la ventana del video juego.

Primero Creamos un proyecto en c# en visual studio 2008 y seleccionamos la plantilla Windows Game y lo nombramos Tuto_CargarAnimarSprite:

 

seleccionamos el explorador de soluciones y damos clic derecho sobre Content y agregamos una subcarpeta llamada Imágenes, esta carpeta contendrá todas nuestras imágenes para la aplicación.

 

Clic derecho sobre la carpeta que acabamos de crear y seleccionamos la opción agregar, elegimos Elemento existente,  buscamos las imágenes a utilizar en mi caso yo utilizare el logo de Windows player .

 

Una vez realizado esto, en la clase Game1 creamos las siguientes variables:

public class Game1 : Microsoft.Xna.Framework.Game

    {

        GraphicsDeviceManager graphics;

        SpriteBatch spriteBatch; //permite dibujar textura creado por XNA

        //Imagen a dibujar de wmplayer

        Texture2D wmPlayer;

        Vector2 wmPlayerPos = Vector2.Zero; //posicion de la imagen por defecto (0,0)

Existe un método llamado LoadContent(), este método permite cargar todo nuestro contenido para el juego.  Escribimos el siguiente código dentro del método LoadContent:

protected override void LoadContent()

        {

            // Crea un nuevo SpriteBatch, que puede ser usado para dibujar texturas.

            spriteBatch = new SpriteBatch(GraphicsDevice);

            // TODO: usa this.Content para cargar el contenido del juego here

            wmPlayer = this.Content.Load<Texture2D>(@”Imagenes/wmplayer”);

        }

el nombre de nuestra imagen no debe llevar la extension .png

para poder dibujar nuestra imagen tambien esxiste un metodo llamado Draw(), nos permite dibujar cualquier contenido que utilizemos o que cargamos en el metodo LoadContent. Escribimos el siguiente codigo:

protected override void Draw(GameTime gameTime)

        {

            GraphicsDevice.Clear(Color.CornflowerBlue);

            // TODO: Add your drawing code here

            spriteBatch.Begin();

            spriteBatch.Draw(wmPlayer,wmPlayerPos,Color.White);

            spriteBatch.End();

            base.Draw(gameTime);

        }

 Compilamos con F5 para ejecutar nuestro juego:

 

Ahora animaremos el logo de Windows player, nuevamente en la clase Game1 agregamos las siguientes variables:

Point wmPlayerTamañoMarco = new Point(125, 125);//tamaño del marco

Point wmPlayerMarcoActual = new Point(0, 0);

Point wmPlayerTamañoCapa = new Point(6, 8);

Modificamos los parametros en el metodo spriteBatch.Draw()y el metodo spriteBatch.Begin(), dentro del metodo Draw():

spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.FrontToBack, SaveStateMode.None);

            spriteBatch.Draw(wmPlayer, wmPlayerPos, new Rectangle(wmPlayerMarcoActual.X * wmPlayerTamañoMarco.X,

                wmPlayerMarcoActual.Y * wmPlayerTamañoMarco.Y, wmPlayerTamañoMarco.X, wmPlayerTamañoMarco.Y),

                Color.White, 0, Vector2.Zero, 1, SpriteEffects.None, 0);

Compilamos con F5, solamente mostrara el logo estos cambios no deberán afectar, el juego deberá seguir funcionando. Si se encuentra con algún error verifica que  hayas escrito bien el código.

Localicemos el método update, este permite actualizar todo lo que realizamos en el juego como colisiones, puntajes, etc.  Escribimos el siguiente código para animar el sprite:

protected override void Update(GameTime gameTime)

        {

            // permite finalizar el juego

            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)

                this.Exit();

            // TODO: agrega tu logica para actulizar aqui

            ++wmPlayerMarcoActual.X;

            if (wmPlayerMarcoActual.X >= wmPlayerTamañoCapa.X)

            {

                wmPlayerMarcoActual.X = 0;

                ++wmPlayerMarcoActual.Y;

                if (wmPlayerMarcoActual.Y >= wmPlayerTamañoCapa.Y)

                {

                    wmPlayerMarcoActual.Y = 0;

                }

            }

            base.Update(gameTime);

        }

Compilamos con F5 y deberíamos ver que el sprite parpadea:

 

Agregamos dos nuevas variables a la clase Game1:

int wmPlayerTiempoFrameAnterior = 0;

const int wmPlayerMiliSegundoPorFrame = 50;

Modificamos la animacion que fue agregada en le metodo Update(), quedaria de la siguiente manera:

//animar la imagen wmPlayer

         wmPlayerTiempoFrameAnterior += gameTime.ElapsedGameTime.Milliseconds;

            if (wmPlayerTiempoFrameAnterior > wmPlayerMiliSegundoPorFrame)

            {

                wmPlayerTiempoFrameAnterior -= wmPlayerMiliSegundoPorFrame;

                ++wmPlayerMarcoActual.X;

                if (wmPlayerMarcoActual.X >= wmPlayerTamañoCapa.X)

                {

                    wmPlayerMarcoActual.X = 0;

                    ++wmPlayerMarcoActual.Y;

                    if (wmPlayerMarcoActual.Y >= wmPlayerTamañoCapa.Y)

                    {

                        wmPlayerMarcoActual.Y = 0;

                    }

                }

            }

Para poder mover nuestra imagen agregamos una variable en la clase Game1:

float wmPlayerVelocidad = 4;//velocidad del sprite

Ahora moveremos nuestra imagen por los cuatro bordes del juego y evitando que sobre pase la ventana del juego. El código deberás colocarlo  al final de la animación de la imagen pero antes del método base.Upadate(gameTime):

//moviendo el sprite por los cuatro bordes

        wmPlayerPos.X += wmPlayerVelocidad;

    if (wmPlayerPos.X > Window.ClientBounds.Width – wmPlayerTamañoMarco.X)

       {

            wmPlayerPos.X = Window.ClientBounds.Width – wmPlayerTamañoMarco.X;

            wmPlayerPos.Y += wmPlayerVelocidad;

       }

    if (wmPlayerPos.Y > Window.ClientBounds.Height – wmPlayerTamañoMarco.Y)

       {

           wmPlayerPos.Y = Window.ClientBounds.Height – wmPlayerTamañoMarco.Y;

           wmPlayerVelocidad *= -1;

       }

    if (wmPlayerPos.X < 0)

       {

            wmPlayerPos.X = 0;

            wmPlayerPos.Y += wmPlayerVelocidad;

       }

    if (wmPlayerPos.Y < 0)

       {

             wmPlayerPos.Y = 0;

             wmPlayerVelocidad *= -1;

       }

Compilamos con F5: 

Anuncios

ESTRUCTURA SELECTIVA DOBLE

Deja un comentario

Son estructuras lógicas que permiten controlar la ejecución de varias acciones y se utilizan cuando se tienen dos opciones de acción, por la naturaleza de estas se debe ejecutar una o la otra, pero no ambas a la vez, es decir, son mutuamente excluyentes. Entonces, si una condición C es verdadera, se ejecuta la acción S1 y si es falsa, se ejecuta la acción S2.

                                                                  

A continuación se presentan ejemplos de esta estructura:

Programa 5. Construya un programa, tal que dado como dato la calificación de un alumno de la materia de lógica de programación, escriba “aprobado” si su calificación es mayor o igual a 7 y “reprobado” en caso contrario.

// Codigo java

import java.io.*; 

public class Promedio1 {   

    public static void main(String[] args) {               

                // TODO, add your application code

                try{

                               InputStreamReader isr = new InputStreamReader(System.in);

                               BufferedReader leer = new BufferedReader(isr);                             

                               int calf;                              

                               System.out.print(“introduce tu calificacion: “);

                               calf = Integer.parseInt(leer.readLine());

                               if(calf >= 7){

                                               System.out.println(“Aprobado”);

                               }

                               else{

                                               System.out.println(“Reprobado”);

                               }

                }

                catch(Exception ex){

                               ex.printStackTrace();

                }

    }

}

//Codigo C#

using System; 

namespace Calificacion

{

    class Program

    {

        static void Main(string[] args)

        {

            int calf; 

            Console.Write(“introduce tu calificacion: “);

            calf = int.Parse(Console.ReadLine());

            if (calf >= 7)

            {

                Console.WriteLine(“aprobado”);

            }

            else

            {

                Console.WriteLine(“reprobado”);

            }

        }

    }

}

//Codigo Visual Basic

Module Module1 

    Sub Main()

        Dim calf As Integer 

        Console.Write(“introduce tu calificacion: “)

        calf = Integer.Parse(Console.ReadLine()) 

        If calf >= 7 Then

            Console.WriteLine(“Aprobado”)

        Else

            Console.WriteLine(“Reprobado”)

        End If

    End Sub 

End Module

                                                             

 

Programa 6. Construya un programa, tal que dado como dato el sueldo de un trabajador, le aplique un aumento del 15% si su sueldo es inferior a $1,000 y 12% en caso contrario. Imprima el nuevo sueldo del trabajador.

//Código Java

import java.io.*; 

public class Sueldo2 {  

    public static void main(String[] args) {            

                // TODO, add your application code

                try{

                               InputStreamReader isr = new InputStreamReader(System.in);

                               BufferedReader leer = new BufferedReader(isr);                            

                               double sldo;                              

                               System.out.print(“Introduce tu sueldo: “);

                               sldo = Double.parseDouble(leer.readLine());                            

                               if(sldo < 1000){

                                               sldo += sldo * .15;

                               }

                               else{

                                               sldo += sldo * .12;

                               }                        

                               System.out.println(“El nuevo sueldo es: ” + sldo);

                }

                catch(Exception ex){

                               ex.printStackTrace();

                }

    }

}

//Código C#

using System;

namespace Sueldoc

{

    class Program

    {

        static void Main(string[] args)

        {

            double sldo;

            Console.Write(“Introduce tu sueldo: “);

            sldo = double.Parse(Console.ReadLine());

            if (sldo < 1000)

            {

                sldo += sldo * .15;

            }

            else

            {

                sldo += sldo * .12;

            }

            Console.WriteLine(“El nuevo sueldo: ” + sldo);

            Console.ReadLine();

        }

    }

}

//Código Visual Basic

Module Module1

    Sub Main()

        Dim sldo As Double

        Console.Write(“introduce tu sueldo: “)

        sldo = Double.Parse(Console.ReadLine())

        If sldo < 1000 Then

            sldo += sldo * 0.15

        Else

            sldo += sldo * 0.12

        End If

        Console.WriteLine(“El nuevo sueldo es: {0}”, sldo)

    End Sub

End Module

                                                         

Programa 7. En una tienda efectuan un descuento a los clientes dependiendo del monto de la compra. El descuento se efectuan con base el siguiente criterio. Si la compra es menor a $ 2,000.00 se aplica un descuento del 15% y si el monto de la compra es mayor a $ 2,000.00 se aplica un descuento del 20%. Construya un programa que calcule el descuento y el total a pagar de la compra.

//Código java

import java.io.*;

public class Compra {

    public static void main(String[] args) {

                // TODO, add your application code         

                try{

                               InputStreamReader isr = new InputStreamReader(System.in);

                               BufferedReader leer = new BufferedReader(isr);       

                               double cpra, desc;                         

                               System.out.print(“Introduce el valor de la compra: “);

                               cpra = Double.parseDouble(leer.readLine());                    

                               if(cpra < 2000){

                                               desc = cpra * .15;

                               }

                               else{

                                               desc = cpra * .20;

                               }

                               cpra -= desc;

                               System.out.println(“descuento: ” + desc);

                               System.out.println(“Total de Compra: ” + cpra);

                }

                catch(Exception ex){

                               ex.printStackTrace();

                }

    }

}

//Código C#

using System; 

namespace Comprac

{

    class Program

    {

        static void Main(string[] args)

        {

            double cpra, desc;

            Console.Write(“Introduce el valor de la compra: “);

            cpra = double.Parse(Console.ReadLine());

            if (cpra < 2000)

            {

                desc = cpra * .15;

            }

            else

            {

                desc = cpra * .20;

             }

            cpra -= desc;

            Console.WriteLine(“Descuento: {0}”,desc);

            Console.WriteLine(“Total de Compra: {0}”,cpra);

            Console.ReadLine();

        }

    }

}

//Código Visual Basic

Module Module1

    Sub Main()

        Dim cpra, desc As Double

        Console.Write(“introduce el valor de la compra: “)

        cpra = Double.Parse(Console.ReadLine())

        If (cpra < 200) Then

            desc = cpra * 0.15

        Else

            desc = cpra * 0.2

        End If

        cpra -= desc

        Console.WriteLine(“Descuento: {0}”, desc)

        Console.WriteLine(“Total de Compra: {0}”,cpra)

        Console.ReadLine()

    End Sub

End Module 

Matrices(c# y java)

Deja un comentario

Las matrices son colecciones ordenadas de elementos del mismo tipo de datos a los que se tiene acceso utilizando el nombre de la matriz junto con el desplazamiento del elemento deseado desde el inicio de la matriz. Hay algunas diferencias importantes entre C# y Java en lo referente a cómo se declaran y utilizan las matrices.

Matriz unidimensional

Una matriz unidimensional almacena un número fijo de elementos en modo lineal, lo que requiere sólo un valor de índice único para identificar cualquier elemento. En C#, los corchetes de la declaración de matriz deben seguir al tipo de datos y no se pueden colocar después del nombre de variable, como se permite en Java. Así, una matriz de tipo integers se declara mediante la siguiente sintaxis:

c#

int[] arr1;
int arrg1; //error en c#
java

int[] arrg1; //correcto
int arrg1[]; //correcto

Una vez que se declara una matriz, se utiliza la palabra clave new para establecer su tamaño, como en Java. En el ejemplo siguiente se declara la referencia de la matriz:

c# y java

int[] arr;
arr = new int[5];  // crea un espacio para 5 elementos de tipo entero

A continuación, se tiene acceso a los elementos de una matriz unidimensional mediante una sintaxis idéntica a la de Java. Los índices de matriz de C# también se basan en cero. La sintaxis siguiente obtiene acceso al último elemento de la matriz anterior:

c#

System.Console.WriteLine(arr[4]);  // acceso al 5to elemento

java

System.out.println(arr[4]); // acceso al 5to elemento

Inicialización

Los elementos de la matriz de C# se pueden inicializar en el momento de su creación mediante la misma sintaxis que Java:

c# y java

int[] arr2Lines;
arr2Lines = new int[5] {1, 2, 3, 4, 5};

o tambien de esta manera

int[] arr2Lines =   {1, 2, 3, 4, 5};

Matrices escalonadas

Tanto C# como Java admiten la creación de matrices escalonadas o no rectangulares, en las que cada fila contiene un número diferente de columnas. Por ejemplo, la siguiente matriz escalonada tiene cuatro entradas en la primera fila y tres en la segunda:

c# y java

int[][] jaggedArray = new int[2][];
jaggedArray[0] = new int[4];
jaggedArray[1] = new int[3];

Matrices multidimensionales

Con C#, se pueden crear matrices multidimensionales normales que son como una matriz de valores del mismo tipo. Mientras Java y C# admiten matrices escalonadas, C# también admite matrices multidimensionales o matrices de matrices.

Declare una matriz rectangular multidimensional mediante la siguiente sintaxis:

c#

int[,] arr2D = new int[2,3]; //espacio reservado de 2 filas y 3 columnas

java

int[][] arr2d = new int[2][3]

inicialización

Se pueden crear, configurar e inicializar matrices multidimensionales en una instrucción única a través de uno de los métodos siguientes:

C# y java
int[,] arr4 = new int [2,3] { {1,2,3}, {4,5,6} };

Flow_Chart

Deja un comentario

aqui les traigo un pograma interesante para los que inician a programar, este programa nos permite desarrollar diagramas de flujo y ejecutarlos. es muy util para checar si nuestros diagramas de flujo   funcionan, bueno pero mejor veamos un ejemplo:

Captura

 ejecucion  del diagrama de flujo

Captura1

eso es todo espero que les sea de mucha utilidad:

descargar : Flow Chart

Leer datos desde teclado en java

Deja un comentario

para leer datos en java desde teclado necesitamos apoyarnos de dos clases:

a) InputStreamReader

b) BufferedReader

la primera clase lee caracter por caracter y en su metodo constructor se le pasan los siguientes parametros System.in, esta clase deriva del  System.Object, pero nosotros necesitamos leer una cadena de caracteres, ya que seria un problema pedir al usuario que introdusca un caracter a la vez, por eso nos apoyamos de la clase a BufferedReader para que nos lea un cadena completa de caracteres.

tambien requerimos importar un paquete de java:   java.io.*;

y utilizar excepciones try y catch.

acotinuacion se muestra un ejemplo :

import java.io.*;

class Metros{

         public static void main(String [] args){

                  InputStreamReader isr = new InputStreamReader(System.in);
                  BufferedReader br = new BufferedReader(isr);

                   try{
                           
                            float metrof, piesf, pulgadaf;
                          
                           System.out.print(“Introduce los metros : “);
                           metrof = Float.parseFloat(br.readLine());
                          
                           pulgadaf = metrof * 39.27f;
                           piesf = pulgadaf/12;
                           System.out.println(“Metros a pulgadas: ” + pulgadaf);
                           System.out.println(“Metros a pies: ” + piesf); 
                   }
                    catch(Exception e){
                              System.out.println(e);
                    }
         }
}

soloamente ejecutamos el codigo en el compilador de ms-dos.

ejemplos de sentencia for

Deja un comentario

en este nuevo post se presenta algunos ejemplos sobre la sentencia for, espero que les sea de mucha utilidad.

Dado el siguiente código optimizar usando el ciclo for

System.out.println(“ 3 * 1 = 3”);

System.out.println(“ 3 * 2 = 6”);

System.out.println(“ 3 * 3 = 9”);

System.out.println(“ 3 * 4 = 12”);

System.out.println(“ 3 * 5 = 15”);

System.out.println(“ 3 * 6 = 18”);

System.out.println(“ 3 * 7 = 21”);

System.out.println(“ 3 * 8 = 24”);

System.out.println(“ 3 * 9 = 27”);

System.out.println(“ 3 * 10 = 30”);

Optimizacion del código:

class TestMultiplicar{

public static void main(String args []){

int tabla = 3;

for(int i=1; i<11; i++){

System.out.println(tabla +” * ” + i + ” = ” + i * tabla);

}

}

}

ejecucion:

tabla de multiplicar

Crear la siguiente tabla de multiplicar en forma triangular:

class TestTriangulo{

public static void main(String[] args){

for(int i=0; i <=9; i++){

for(int j=0; j<=i; j++){

System.out.print(j*i + ” “);

}

System.out.println();

}

}

}

ejecucion:

Triangulo

Crear una clase denominada matemáticas que defina las siguientes funciones:

a)      Calcule y devuelva el valor absoluto de un número entero.

b)     Calcule y devuelva la potencia de un número.

c)      Calcule y devuelva él factorial de un número.

d)     Determinar si un número entero es primo.

Código:

class TestMatematicas{
public static void main(String args []){

//creando una istancia de la clase Matematicas
Matematicas math = new Matematicas();

int numn = -5;
int num = 3;

// utilizando el metodo abs();
if(numn < 0){
System.out.println(“valor absluto de ” + numn + ”  es ” + math.abs(numn));
}else
System.out.println(“valor absluto de ” + numn + ”  es ” + numn);

//utilizando el metodo pow();
System.out.println(“la potencia de ” + numn + ” al “+num+” “+ math.pow(numn,num));

//utilizando el metodo factorial();
if(num > 0)
System.out.println(“el factorial de ” + num + ” es ” + math.factorial(num));

//Utilizando el metodo esPrimo();
if(math.esPrimo(num) == true){
System.out.println(“el numero ” + num +” es primo”);
}else
System.out.println(“el numero ” + num +” no es   primo “);
}
}

class Matematicas{

public int abs(int num){
return num * (-1);
}

public int pow(int num, int base){

int pot=1;
for(int i=1; i<=base; i++){
pot *=num;
}
return pot;
}

public int factorial(int num){
int fact = 1;
for(int i=2; i<=num; i++){
fact *= i;
}
return fact;
}

public boolean esPrimo(int num){
for(int i=2; i!=num; i++){
if(num % i == 0){
return false;
}
}
return true;
}
}

Ejecución:

matematicas

FileInfo Metodo AppendText()

Deja un comentario

El método AppendText nos permite agregar texto al final. Veamos un ejemplo utilizando las siguientes clases FileInfo, StreamWriter, StreamReader.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace Practicando

{

class Program

{

static void Main(string[] args)

{

string path = @”c:\Archivo.txt”;

FileInfo fi = new FileInfo(path);

 

if (!fi.Exists)

{

StreamWriter sr = new StreamWriter(path);

 sr.WriteLine(“escribiendo texto…”);

}

 

//Agregando texto

 using (StreamWriter sw = fi.AppendText())

{

sw.WriteLine(“Mas texto…”);

sw.WriteLine(“otraves mas texto…”);

}

 

//Leyendo el archivo

using (StreamReader sr = new StreamReader(path))

{

string lector = ” “;

while ((lector = sr.ReadLine()) != null)

{

Console.WriteLine(lector);

}

}

}

}

}

metodo AppendText

Older Entries