Posted on 16-07-2008
Filed Under (Personal, Varios) by Programlocura

Buenas!

Hoy posteo pidiendo colaboración de todos. Cuando inicié con este Blog hace 2 meses aproximadamente no pensé en querer ganar un premio ni nada, no lo he promovido mucho tampoco… Pero bueno, a pesar de eso me anoté en este concurso que esta muy bueno, cito textualmente:

Después del rotundo éxito del Festival de Premios Exponet 2007, Prensalibre.com vuelve con la segunda entrega del evento que ha causado revuelo internacional, posicionando a Guatemala como punta de lanza en la transición hacia el Web 2.0 en español.

El concepto Exponet es precisamente el promover, educar y reconocer las mejores prácticas de desarrollo web en Guatemala y el resto de Latinoamérica. Esto se logra a través de una serie de eventos a lo largo del año (Exposiciones, conferencias en universidades y grupos empresariales, artículos online, noticias y el certamen anual de premiación) con dos eventos ancla que cada vez ganan más y más seguidores

En poco tiempo, más precisamente el 21 de Julio a las 00:00 hs, comienza la votación, que es de popularidad (cosa que perderé seguramente) pero hay otro concurso de contenido que espero por lo menos alguna mención en el … 3981923741937413 posición :P.

Reglas de la votación

  • La votación únicamente cuenta para el premio especial de popularidad, no cuenta para la evaluacion de las categorías en competencia..
  • Solo pueden votar usuarios registrados en www.premiosexponet.com.gt
  • Un usuario solo puede votar 14 veces, una vez en cada categoría.
  • Un usuario solo puede votar una única vez por un sitio web.

No queda más que pedirles que den una mano al blog con esto, por lo menos para aparecer…

Muchisimas gracias!

(0) Comments    Read More   
Posted on 13-07-2008
Filed Under (Curiosidades, Personal) by Programlocura

Hace relativamente poco conozco el Blog de Tinchio pero es un blog que me gusta. Ahora me vengo a enterar (hace mucho que no lo leia) que estan organizando su primer concurso (Si, y con premios de más de 100 U$D !!! :D).

La participación es muy fácil, se puede hacer de dos maneras, una es creando un isotipo para el blog, y la otra es hacer un post como este anunciando el concurso y dejando un comentario en su blog.

Fecha limite: 15 de Julio de 2008
Pueden ver las bases del concurso en este enlace!

Mucha suerte! :D

(1) Comment    Read More   
Posted on 12-07-2008
Filed Under (ActionScript, Desarrollo, Game Development) by Programlocura

Siguiendo con la nueva costumbre de publicar tutoriales de ActionScript (Una forma de ayuda memoria para mi y para el que le sirva) voy a dar unas pautas para hacer un Drag & Drop (Arrastrar y soltar) básico y lo mejoraremos para hacer algo parecido a un "puzzle".

Comencemos... :)


1. Objetivo


Antes que nada estableceremos el objetivo del tutorial. En los juegos en flash se utiliza mucho la técnica "Drag & Drop" (Arrastrar y soltar) para generar interactividad con el usuario, al final del tutorial podremos crear un objeto fácilmente arrastrable y además podremos colocarlo como pieza en una especie de puzzle, etc.


2. Lo más básico


Aquí podemos ver el primer resultado muy básico:

Esta pelicula requiere Flash Player 9


De esta manera vemos como simplemente clickeando sobre el objeto lo comenzamos a arrastrar y dejando de hacer click lo soltamos.
Como lo hacemos... ? Simplemente de esta manera:
En el Moviclip del personaje, bola, etc que quieras arrastrar:

Actionscript:
  1. on (press) {
  2.     this.startDrag();
  3. }
  4.  
  5. on (release) {
  6.     this.stopDrag();
  7. }

Sencillo ¿No? De esa manera tenemos un simple sistema para arrastrar un objeto, pero que si debemos arrastrar varios objetos y no queremos que se vea uno por debajo de otro? O sea, ¿Que el que estamos arrastrando sea el más alto?. Lo vemos a continuación:


3. Sobrepasando objetos

Actionscript:
  1. on (press) {
  2.         // El mismo código anterior pero con esta linea agregada.
  3.     this.swapDepths(_root.getNextHighestDepth());
  4.     this.startDrag();
  5. }

No hace falta demasiada explicación para esto. Lo que hace es seleccionar la mayor profundidad que haya en los movieclips en el root y pone a este ultimo (El que arrastramos) en el nivel más alto para que no se tenga problema para con pasar por debajo de los objetos.


4. La Teoría: Como hacer el puzzle


No tengo que dar la definición de puzzle supongo ya todos conocemos el juego de "armar" una imagen que esta rota en varios trozos y debemos encajarlos según sus cortes.
En este ejemplo usaremos una bola y su sombra. Deberemos encajar la bola en su sombra correctamente y ganaremos (facil no ? ;) )

Esta pelicula requiere Flash Player 9

- Como ?

Actionscript:
  1. on (press) {
  2.     this.swapDepths(_root.getNextHighestDepth());
  3.     this.startDrag();
  4. }
  5.  
  6. on (release) {
  7.     stopDrag();
  8.     if (eval(this._droptarget) == _parent.objetivo) {
  9.         this._x = _parent.objetivo._x;
  10.         this._y = _parent.objetivo._y;
  11.         _root.texto.text = "Correcto!";
  12.         this.enabled = false;
  13.     }
  14. }

Si bien el codigo aumentó no es nada del otro mundo, agregamos un poco más de lineas y lo más significativo está en esta linea:

Actionscript:
  1. if (eval(this._droptarget) == _parent.objetivo) {

Aqui preguntamos mediante eval (Para quitar la barra al path que devuelve el metodo _droptarget) si la posición donde se soltó el movieclip es igual a la del objetivo, si lo son se ejecuta un texto, sinó no lo hace.

Luego volveré con tutoriales más orientados a Gaming.

(10) Comments    Read More   
Posted on 06-07-2008
Filed Under (ActionScript, Desarrollo) by Programlocura

Hace tiempo que no posteaba tutoriales, asi que vamos a ver como crear Motion Tweens con Action Script 2.0.

Actionscript:
  1. // Función que Produce el Movimiento
  2. // ----------------------------------
  3. function floatMC(mc) {
  4. import mx.transitions.Tween;
  5. var posy = mc._y;
  6. var rel_posy = posy - 25;
  7.  
  8. var func = mx.transitions.easing.Back.easeInOut;
  9. var speed = 1;
  10.  
  11. var myTween:Tween = new Tween(mc, "_y", func, posy, rel_posy, speed, true);
  12.  
  13. myTween.onMotionFinished = function() {
  14. myTween.yoyo();
  15. }
  16.  
  17. }

No se preocupen, ya lo explico :P.
Yo lo creé en forma de función porque lo necesitaba usar para varios movieclips (Aunque podria haber hecho una función que moviese todos juntos, pero al final lo hice de esta forma) y creí que era la mejor opción.

Vamos por partes:
1. Lo que primero debemos hacer es importar la clase MotionTween. Con una simple llamada "import" está listo.

Actionscript:
  1. import mx.transitions.Tween;

2. Aquí simplemente declaro 2 variables (posy, rel_posy) una de ellas contiene la coordenada en _y del movieclip pasado por parámetro, y la otra contiene la posición relativa (Sumada a la posición actual) a la que deberá transportarse.

Actionscript:
  1. var posy = mc._y;
  2. var rel_posy = posy - 25;

3. Creamos otras 2 variables (func, speed) en las cuales almacenaremos la propiedad que determina el tipo de movimiento (mx.transitions.easing.[VARIOS].[VARIOS]) y uno que determina la velocidad del movimiento (speed).

Actionscript:
  1. var func = mx.transitions.easing.Back.easeInOut;
  2. var speed = 1;

Atención! Los posibles valores que puede tener la variable "func" son los siguientes:

  • Back – Extiende la animación sobre uno o ambos extremos del "Tween"
  • Bounce – Crea un efecto de rebote en la transición en uno o ambos extremos.
  • Elastic – Crea una mezcla entre el BOUNCE y el BACK.
  • Regular – Movimiento más lento sobre los extremos de la transición (uno o ambos).
  • Strong – Similar al regular más pronunciado cuando se combina con otros métodos de easing.
  • None – Movimiento lineal entre ambos extremos.

Uso: var func = mx.transitions.easing.[Reemplazar Aqui].easeInOut;
Ej.: var func = mx.transitions.easing.Regular.easeInOut;

4. Aquí declaramos la ultima variable a utilizar, llamada myTween (un objeto de la clase Tween) que tendrá como parámetros las cosas que determinamos anteriormente.

Actionscript:
  1. // Tween(movieclip, "parametro_movimiento", Tipo_Movimiento, Posicion_inicial, posicion_final, velocidad, usar_segundos_o_frames)
  2. // El ultimo parametro: "usar_segundos_o_frames" se determina con true o false, si se pone a true utiliza los segundos.
  3. var myTween:Tween = new Tween(mc, "_y", func, posy, rel_posy, speed, true);

5. Luego, haciendo referencia al objeto (myTween) utilizamos el metodo "onMotionFinished" de la manera que vemos abajo, y habiéndole indicado que se ejecute al finalizar el movimiento principal, ejecutamos el metodo "yoyo();" que nos permite hacer un loop del movimiento (ejecuta inversamente el movimiento inicial).

Actionscript:
  1. myTween.onMotionFinished = function() {
  2. myTween.yoyo();
  3. }

Ejemplo:

Esta pelicula requiere Flash Player 9

(0) Comments    Read More   
Posted on 29-06-2008
Filed Under (Desarrollo, VB.NET) by Programlocura

Hace un tiempo en el curso empezamos con este proyecto y lo estamos agrandando cada dia.
Voy a tratar de ir mostrando de a partes y dando consejos para construir un juego de este tipo en CONSOLA y dejando bien abierto para proximas cosas que tengan ganas de ponerle.

1. Uso de Constantes

Visual Basic:
  1. Const FILAS As Integer = 10
  2. Const COLUMNAS As Integer = 10
  3. Const CANT_BARCOS As Integer = 4

Siempre! Siempre! Se usan constantes para este tipo de cosas, es complicado acostumbrarse a programar "generico" pero tiene que hacerse, que pasa si cambia el tamaño del tablero? Que pasa si queremos aumentar el numero de barcos en el juego? Tendriamos que cambiar todos los numeros en el codigo, seria un desastre.
El uso de constantes evita todo tipo de problemas y el uso de las palabras hace más clara la lectura del codigo.

2. El Procedimiento "Main()" limpio.

Visual Basic:
  1. Sub Main()
  2.         Dim opcion As Integer
  3.         Dim Pantalla As New ClearConsole
  4.  
  5.         Titulo()
  6.         Console.WriteLine("1. Player 1 Vs Player 2")
  7.         Console.WriteLine("2. Player 1 Vs CPU")
  8.         Do
  9.             opcion = Console.ReadLine()
  10.  
  11.             If (opcion> 2) Then
  12.                 Console.WriteLine("La opcion no esta disponible")
  13.             End If
  14.         Loop While (opcion> 2)
  15.  
  16.         Select Case opcion
  17.             Case 1
  18.                 Pantalla.Clear()
  19.                 Player1vs2()
  20.             Case 2
  21.                 Pantalla.Clear()
  22.                 Player1vsCPU()
  23.         End Select
  24.     End Sub

El Main debe contener el menor numero de instrucciones posibles, cuanto más limpio mejor, no tiene porque pero si es muy recomendable.

3. Procedimientos genericos util para cualquier cantidad de jugadores

Visual Basic:
  1. Sub Player1vs2()
  2.         ' Player 1 VS Player 2
  3.         Dim Jugador As Short = 1
  4.         Dim Tablero_uno(FILAS, COLUMNAS), Tablero_dos(FILAS, COLUMNAS) As Short
  5.         Dim Tablero_uno_aux(FILAS, COLUMNAS), Tablero_dos_aux(FILAS, COLUMNAS) As Short
  6.         Dim num_barcos_uno, num_barcos_dos, intento As Integer
  7.         Dim x, y, xx, yy, i, j As Integer
  8.         Dim Pantalla As New ClearConsole
  9.  
  10.         cargaBarcos(Jugador, Tablero_uno)
  11.         Jugador = 2
  12.         cargaBarcos(Jugador, Tablero_dos)
  13.  
  14.         ' Comenzamos a Jugar
  15.         intento = 1
  16.         Jugador = 1
  17.  
  18.         num_barcos_uno = CANT_BARCOS
  19.         num_barcos_dos = CANT_BARCOS
  20.  
  21.             Do
  22.                 Pantalla.Clear()
  23.                 Titulo()
  24.                 Console.WriteLine("Empieza el juego")
  25.                 Console.WriteLine("Jugador {0} - Intente hundir un barco:", Jugador)
  26.                 Console.WriteLine("Barco {0} - FILA:", intento)
  27.                 Do
  28.                     Do
  29.                         xx = Console.ReadLine()
  30.                         If (xx> FILAS) Then
  31.                             Console.WriteLine("El numero es Mayor al numero de FILAS")
  32.                         End If
  33.                     Loop While (xx> FILAS)
  34.                     Console.WriteLine("Barco {0} - COLUMNA:", intento)
  35.                     Do
  36.                         yy = Console.ReadLine()
  37.                         If (yy> COLUMNAS) Then
  38.                             Console.WriteLine("El numero es Mayor al numero de COLUMNAS")
  39.                         End If
  40.                     Loop While (yy> COLUMNAS)
  41.  
  42.                     If ((Jugador = 1 And Tablero_uno_aux(xx, yy) = 1) Or (Jugador = 2 And Tablero_dos_aux(xx, y) = 1)) Then
  43.                         Console.WriteLine("La Posicion {0},{1} Esta ocupada", xx, yy)
  44.                     End If
  45.                 Loop While ((Jugador = 1 And Tablero_uno_aux(xx, yy) = 1) Or (Jugador = 2 And Tablero_dos_aux(xx, y) = 1))
  46.  
  47.                 If (Jugador = 1) Then
  48.                     If Tablero_dos(xx, yy) = 1 Then
  49.                         Console.WriteLine("Has Hundido el Barco ({0},{1}) !", xx, yy)
  50.                         Tablero_dos_aux(xx, yy) = 2
  51.                         num_barcos_dos -= 1
  52.                         Jugador = 2
  53.                     Else
  54.                         Console.WriteLine("Agua en la posicion ({0},{1})", xx, yy)
  55.                         Tablero_dos_aux(xx, yy) = 1
  56.                         Jugador = 2
  57.                     End If
  58.                 Else
  59.                     If Tablero_uno(xx, yy) = 1 Then
  60.                         Console.WriteLine("Has Hundido el Barco ({0},{1}) !", xx, yy)
  61.                         Tablero_uno_aux(xx, yy) = 2
  62.                         num_barcos_uno -= 1
  63.                         Jugador = 1
  64.                     Else
  65.                         Console.WriteLine("Agua en la posicion ({0},{1})", xx, yy)
  66.                         Tablero_uno_aux(xx, yy) = 1
  67.                         Jugador = 1
  68.                     End If
  69.                 End If
  70.                 Console.ReadLine()
  71.         Loop While (num_barcos_uno <> 0 Or num_barcos_dos <> 0)
  72.     End Sub

Los procedimientos deben ser genericos SIEMPRE! no podemos estar copiando y pegando codigo cada vez que necesitemos insertar un jugador nuevo por ejemplo.

Dejemoslo por acá... Esperen la 2° Parte :D.

(2) Comments    Read More