Lo que dejó la Game Jam 2015

Todos los años, desde hace 5 años, se realiza en Córdoba la Game Jam, evento que forma parte de la Global Game Jam, donde cientos de ciudades y miles de personas se juntan durante 48 horas a realizar video juegos.

Como en casi todos los años, mi objetivo es poder realizar algo extraño, sea por el tipo de juego o sea por el concepto del mismo.

Así apareció Adventurer el año pasado. Una aventura de texto, donde tienes que escribir para realizar acciones. O RouteLoop, hace tres años atrás.

Este año, con el equipo que formamos, optamos por ir con una mecánica clásica, pero con una temática un poco más… bueno… jocosa.

Por lo que creamos Soap Friendship. Un juego que por su nombre y la portada se describe por si solo.

Este juego, como viene siendo en este tiempo, fue creado con HTML5 y JavaScript, pero lo más importante, con jsGFwk.

Por supuesto, hubo algunos parches que se hicieron a la carrera, pero eso fue en desmedro de este pequeño framework.

Si quieres jugar Soap Friendship, puedes por aquí.


Presentación pre Game Jam

jsGFWKLogoMañana estaré dando una charla sobre jsGFwk en la previa de la Córdoba Game Jam.

Y solo por un tiempo limitado, estará disponible en el siguiente link:

http://gamejam.azurewebsites.net/gamejampresentation/#/


Extendiendo objetos en JavaScript

Muchos lenguajes cuentan con la posibilidad de extender la funcionalidad de objetos nativos o creados por programadores.

Por ejemplo, en C#, podemos “inyectar” funcionalidad mediante los Extendend Methods (http://msdn.microsoft.com/en-us//library/bb383977.aspx) a objetos pre existentes. Pero es necesario remarcar que esta característica (En el caso de C#), es solo una forma de alivianarle el trabajo al desarrollador mientras escribe código, ya que por detrás, el código se ejecuta de la misma forma que lo haría si llamásemos a una función dentro de una clase estática.

Veamos un ejemplo:

class Program
{
    static void Main(string[] args)
    {
        string text = “”;
        Console.WriteLine(text.ToSomething());
        Console.WriteLine(Ext.ToSomething2(text));
        Console.ReadLine();
    }
}

public static class Ext
{
    public static string ToSomething(this string data)
    {
        return data + “Hola”;
    }

    public static string ToSomething2(string data)
    {
        return data + “Hola”;
    }
}

En este caso, si vemos el código en la clase Program, todo apuntaría a que tenemos una mejora con el método extendido, ya que no necesitaríamos conocer la función en cuestión, misma que es provista desde el tipo de dato y, por otro lado, la función “ToSomething” queda incorporada al tipo.

Pero, si miramos un poco más adentro, esto es, el código IL, veremos que en realidad, no pasa nada de nada. Todo sigue funcionando como si hubiésemos llamado a una función común.

IL_0000:  nop
IL_0001:  ldstr      “”
IL_0006:  stloc.0
IL_0007:  ldloc.0
IL_0008:  call       string Extendend.Ext::ToSomething(string)
IL_000d:  call       void [mscorlib]System.Console::WriteLine(string)
IL_0012:  nop
IL_0013:  ldloc.0
IL_0014:  call       string Extendend.Ext::ToSomething2(string)
IL_0019:  call       void [mscorlib]System.Console::WriteLine(string)
IL_001e:  nop
IL_001f:  call       string [mscorlib]System.Console::ReadLine()
IL_0024:  pop
IL_0025:  ret

O sea, no hemos enriquecido el objeto, solo hemos agregado soporte visual.

En JavaScript, por el contrario, es posible inyectar funcionalidad a los objetos y que estas sean parte del objeto, tanto para uno particular como para todas las “instancias” del mismo tipo.

Esto podemos conseguirlo con el uso de “prototype”. Pero veamos un ejemplo:

var arr = [];
//Llenamos el array


//Buscar un elemento
for (var i = 0; i < arr.length; i++) {
   if (arr[i] === …) {
     founds.push(arr[i]);
   }
}

En el ejemplo, lo que intentamos hacer es obtener un elemento de un array basados en un criterio particular. La lógica resulta simple, y podría ser encapsulada en una función y así usarse tantas veces como se requiera.

Por supuesto, podríamos hacer esto, o extender el objeto Array para que contenga esta funcionalidad.

if (Array.prototype.where === undefined) {
    Array.prototype.where = function (selector) {
        var result = [];
        for (var i = 0; i < this.length; i++) {
            if (selector(this[i])) {
                result.push(this[i]);
            }
        }
        return result;
    }
}

La principal diferencia, comparada con una función y con el ejemplo de C# es que, en este caso, efectivamente el objeto Array posee, ahora, una función llamada “where”, y cualquier instancia de Array contendrá la misma, no repitiendo el código si no, incorporándolo al objeto.

En resumen, en JavaScript, es posible modificar los objetos y tipos más allá de un cambio visual de cara al desarrollador. Esto nos otorga mayor flexibilidad para desarrollar ya que no es necesario tener un conjunto de funciones para tareas sobre objetos específicos, si no que podemos enriquecer estos objetos de forma directa.


Evento en Córdoba–Desarrollo de video juegos

Curso Introductorio C2, Unity, JavaScript y jsGFwk - Game Jam Córdoba 2015

Sabemos que estás contando las horas para participar de la Game Jam Córdoba, pero ¿realmente estás listo? Si no es así no te preocupes porque el Viernes 9 vas a poder asistir al Curso introductorio de tecnologías para la Game Jam.

TEMARIO
De 17hs a 19hs:
– Construct 2: Fernando Córdoba
– Unity: Gaspar Almada

De 19hs a 21hs:
– JavaScript: Patricio Marrone
– jsGFwk: Matías Iacono

Cuándo: Viernes 9 de enero
Dónde: Colegio Universitario IES 21 – Rondeau 165.
A qué hora: 17hs a 21hs.

¡Inscribite acá ya! Cupos limitados –> http://bit.ly/pregjcba2015

Equipo Global Game Jam Córdoba 2014
http://www.gamejamcordoba.com
info@gamejamcordoba.com

Facebook.com/gamejamcbatwitter.com/GameJamCBA


Objetos eficientes en JavaScript

JavaScript-logoHace mucho que no posteo, así que para modificar un poco la racha, vamos con un post rápido sobre JavaScript.

Leer el resto de esta entrada »