Mostrando entradas con la etiqueta XNA. Mostrar todas las entradas
Mostrando entradas con la etiqueta XNA. Mostrar todas las entradas

viernes, 30 de noviembre de 2012

Tile Break, mi nuevo juego para Windows Phone 7

El otro día vi una noticia (no recuerdo en que página) donde la gente de Rusty Moyher hacían un KickStarter solicitando apoyo para su nuevo juego. En el video de presentación, iban apareciendo fragmentos de sus anteriores juegos. Uno de ellos me llamo mucho la atención, debido a su concepto y a su simplicidad: Bloop.

Fui a mirar si estaba para Windows Phone y por supuesto no estaba, pero tampoco para Android.

Así que ni corto ni perezoso, aprovechando que ese fin de semana (hace dos) estaba encerrado en casa recuperándome de una bronquitis brutal, me puse ha hacer mi propia versión para Windows Phone.

He tardado dos fines de semana y ya esta listo y enviado para su publicación en el Market.

Como he dicho, mi juego es una versión de este, y aún siendo muy parecido, le he puesto un añadido para darle un toque de “puterio”, ya que alguno de los Tiles (cuadros) suman o restan puntos, así que además de preocuparnos de conseguir el máximo numero de puntos para nosotros, tenemos que estar al loro para restar puntos de nuestros adversarios.

  • Consigue mas puntos que nadie para ganar!
  • Ideal para elegir quien ha de hacer algo: el perdedor limpia, el que pierda bebe… usa tu imaginación!
  • Cada Tile tiene su propio sonido, crea una melodía mientras juegas!
  • Ideal para fiestas!

viernes, 16 de noviembre de 2012

Reflexiones sobre Cocos2dx y el futuro de XNA

Hace bastante tiempo que trasteo con XNA, desde el día 1 en el que apareció, me enganche a el. El principal motivo era el C#, es el lenguaje que uso en mi día a día en el trabajo, y me encuentro muy cómodo con el, así que para mi era perfecto. Me permitía crear mis propios juegos con un lenguaje conocido y además el Framework estaba realmente bien, así que en poco tiempo me hice con él.

Con Windows Phone 7 la cosa mejoró mucho ya que lo usaron como lenguaje oficial para crear juegos, pero la cosa ha durado muy poco, ya que no esta soportado en Windows Phone 8 (tampoco en Windows 8 metro).

Por lo tanto, si no esta soportado por los nuevos sistemas operativos, tanto móviles, como de escritorio y tablets, ¿que futuro tiene XNA?

Pues me temo, que ninguno. No hay ningún anuncio por parte de Microsoft sobre el tema, pero el sentido común me dice que no habrán más actualizaciones del framework y que poco a poco caerá en desuso. Si no soporta Windows 8 metro, quiere decir que si hago algo para W8, no podre aprovechar el Market, para WP8 no se puede usar y para WP7 no vale la pena hacer nada, ya que tiene los días contados. Así que nada de nada.

La única opción que veo, es que de repente MS de la campanada y haga algo relacionado con Mono, y de esta forma de continuidad a XNA, pero los días van pasando, los nuevos sistemas operativos son lanzado y no se dice nada al respecto.

¿Y que alternativa nos queda?. Pues para Windows tenemos MonoGame.

Pero teniendo en cuenta que la forma oficial para crear juegos, tanto Windows 8 metro como Windows Phone 8, es C++, podemos optar por la opción que nos ofrece Cocos2dx. Es un framework de desarrollo de juegos 2D multiplataforma que además es totalmente gratis. MonoGame también nos permite crear para Android o IOs, pero hay que tener una licencia de Mono for Android o Mono for IOs, que cuestan una pasta.

Así pues, en los próximos fines de semana me voy a ir mirando el tema y voy a intentar crear un juego muy sencillo para Android. Iré publicando mis experiencias.

viernes, 31 de agosto de 2012

XNA Bullet Engine

Cuando era aún muy chiquitín, en una época en la que habían recreativas en los bares, y las partidas costaban 25 pesetas, jugué a un juego que me dejo realmente alucinado, el Aero Fighters 2.

Mas tarde me pico el gusano de la programación y la cosa esta de hacer mis propios juegos, y por supuesto desde entonces siempre he tenido la ilusión de hacer algún día un juego de este estilo.

La verdad es que hace ya algún tiempo que ando liado con un proyecto de este tipo, y lo tengo avanzadillo, pero ayer vi una cosa que me encanto, y que podría venirme de perlas para mejorar mi jueguecito.

Estoy hablando de un engine en XNA para la gestión de las balas y sus patrones, que en este tipo de juegos es lo que mas cuenta. Abraham Morales, ha creado para su próximo juego Vorpal 2, este fabuloso editor que permite crear patrones de balas de una forma muy sencilla. Me he puesto en contacto con el para preguntarle si lo va a liberar y lo que me comenta es que aún no es estable como para hacerlo, pero que cuando lance su juego, lo hará, buenas noticias pues, para los desarrolladores indie Sonrisa

viernes, 30 de marzo de 2012

El reto I: Crear un juego en 15 días. Conclusiones

Esta claro que el reto era demasiado ambicioso, y que no lo he cumplido, al menos en lo que respecta al tiempo. Por suerte, si que será lanzado dentro de poco. El día 16 de Abril lo enviaré para su revisión y espero que subida al Market de Windows Phone.

Lo de los 15 días en cambio, ha sido imposible de conseguir. Primero quería que fuesen 15 días reales, luego pasé a 15 días de trabajo, pero ni una cosa ni la otra. Y eso que como comente en el primer post de esta serie, partía de una base bastante sólida, tenia toda la base y muchas de las funcionalidades creadas, de otros intentos y de pruebas de concepto que he ido haciendo desde que apareció la primera versión de XNA. Aún y con esas, siempre había algo que hacer, algo que depurar, algo que pulir.

Claro, no es lo mismo hacer pruebas de concepto o “demos” que nunca acabas a terminar algo y cerrarlo, con una calidad y una jugablilidad mínima. Me he pasado horas ajustando el control, dibujando el botón un poco más aquí o un poco más allá, ajustando la velocidad del protagonista o el número de enemigos que aparecen en pantalla, que no sea demasiado fácil, por que corres el riesgo de que sea aburrido, pero que tampoco sea muy difícil (al menos al principio) para que no lo dejen por imposible. Y realmente no se si lo he conseguido, por que la perspectiva de uno mismo no es la mejor para valorar eso, creo yo. Por suerte, he contado con la ayuda de @sifri para el testeo y me ha dado algunas pistas de posibles errores y cambios en los controles.

Luego esta el tema de que siempre quieres añadir mas cosas, le das vueltas a la cabeza y piensas que añadiendo tal o cual mecánica el juego ganaría mucho, que se podrían poner mas armas, mas niveles, mas de todo. Pero hay que ser fríos y no entrar en ese bucle, por que para uno mismo, el juego nunca esta acabado. Por surte, mi juego será gratis para los usuarios, así que si todo va bien, incluiré esas mecánicas y niveles extra en futuras actualizaciones, y como es gratis, nadie debería exigirme mas de lo que hay, oye, con ese precio, la relación calidad precio siempre será buena.

Ahora mientras espero al 16 para lanzarlo, mas que nada, para poder entrar en el concurso de Nokia, aprovecharemos para retocar los gráficos y darle un aspecto un mas decente.

Ya estoy pensando en el próximo juego, del que ya daré detalles un poco más adelante.

Run

martes, 14 de febrero de 2012

El reto I: Crear un juego en 15 días. Generación de enemigos.

Como ya comente en anteriores post, he parado el proceso de creación del juego por que he llegado a un punto en el que no me es posible continuar sin un terminal con el que probar el juego. El teléfono lo tengo desde hace unos días, pero estoy a la espera de poder desbloquearlo para permitir el debug.

Como la cosa esta tardando bastante mas de lo que esperaba (por culpa mía, básicamente), voy a publicar un poco del código del juego, concretamente el que se encarga de generar a los enemigos.

Mi idea de esta serie de post no era publicar código, si no comentar el proceso, pero como he dicho, como estoy tardando tanto, y me lo pidieron en uno de los comentarios ahí va.

Este método se encarga de enviar oleadas de enemigos de manera mas o menos aleatoria. Os invito a que me comentéis mejoras o cualquier cosa sobre el código.

        //Variables enemigos//
private int _numeroEnemigosEnRafaga;
private int _enemigosActualesEnRafaga;
//Determinal el número máximo y mínimo para las rafagas de enemigos.
private const int MIN_ENEMIGOS = 1;
private const int MAX_ENEMIGOS = 4;
//Tiempo máximo y mínimo de espera entre enemigos.
private const int MAX_TIEMPO_REFAGA = 4;
private const int MIN_TIEMPO_REFAGA = 1;
//determinal por que lado han aparecido los ultimos enemigos.
private int _ultimoLado;
//Tiempo entre enemigos dentro de la rafaga
private float _intervaloEntreEnemigos = 700f;
private float _intervaloSiguienteRafaga;
//Temporizador de tiempo entre enemigo dentro de la rafaga
private float _temporizador;
//Temporizador tiempo entre rafagas.
private float _temporizadorRafagas;
//estado de la rafaga.
private bool _estaEnRafaga;

private void SetEnemigos(GameTime gameTime)
{
_temporizador += gameTime.ElapsedGameTime.Milliseconds;

//Si no esta en rafaga, se genera una nueva rafaga de enemigos.
if(!_estaEnRafaga)
{
//intervalo de tiempo entre enemigos por defecto;
_intervaloEntreEnemigos = 700f;
_enemigosActualesEnRafaga = 0;
//se recuperan cuantos enemigos van a aparecer en la rafaga.
_numeroEnemigosEnRafaga = random.Next(MIN_ENEMIGOS, MAX_ENEMIGOS);
//Se cambia el lado por el que apareceran los enemigos.
_ultimoLado++;
//Intervalo de tiempo para la siguiente rafaga
_intervaloSiguienteRafaga = 1000f * random.Next(MIN_TIEMPO_REFAGA, MAX_TIEMPO_REFAGA);

//Se añade algo de aleatoriedad al tiempo entre enemigos.
int variadorTiempoEntreEnemigos = 100 * random.Next(MIN_TIEMPO_REFAGA, MAX_TIEMPO_REFAGA);
int signoRandom = random.Next(1, 3);
_intervaloEntreEnemigos = signoRandom == 1
? _intervaloEntreEnemigos + variadorTiempoEntreEnemigos
: _intervaloEntreEnemigos - variadorTiempoEntreEnemigos;
}

if(_enemigosActualesEnRafaga < _numeroEnemigosEnRafaga)
{
_estaEnRafaga = true;
//Si no ha pasado el tiempo suficiente entre enemigos no hacemos nada.
if (_intervaloEntreEnemigos > _temporizador)
{
return;
}

//Se lanza al enemigo por el lado correspondiente.
if (_ultimoLado % 2 == 0)
{
Enemy enemigo = enemies.Where(e => e.IsVisible == false).Skip(0).Take(11).FirstOrDefault();
if (enemigo != null) enemigo.IsVisible = true;
}
else
{
Enemy enemigo = enemies.Where(e => e.IsVisible == false).Skip(11).Take(11).FirstOrDefault();
if (enemigo != null) enemigo.IsVisible = true;

}
_enemigosActualesEnRafaga++;
_temporizador = 0f;
}
else
{
//Se acaba la rafaga.
//Comienza el contador para la siguiente rafaga de enemigos.
_temporizadorRafagas += gameTime.ElapsedGameTime.Milliseconds;

if (_intervaloSiguienteRafaga > _temporizadorRafagas)
{
return;
}
_temporizadorRafagas = 0;
_estaEnRafaga = false;
}
}



Y este método es llamado en cada update:

 /// <summary>
/// Animates each enemy and allow them to kill the player.
/// </summary>
private void UpdateEnemies(GameTime gameTime)
{

SetEnemigos(gameTime);

foreach (Enemy enemy in enemies)
{
enemy.Update(gameTime);

// Touching an enemy instantly kills the player
if (enemy.BoundingRectangle.Intersects(Player.BoundingRectangle))
{
OnPlayerKilled(enemy);
}

// Falling off the bottom of the level kills the player.
if (enemy.BoundingRectangle.Top >= Height * Tile.Height)
{
enemy.OnKilled(enemy);
}
}
}

martes, 24 de enero de 2012

El reto I: Crear un juego en 15 días. Días 4 y 5

Como ayer no puede postear lo que había hecho, hoy junto los dos días. Y como se con lo que voy a estar hoy (por que es una continuación de lo de ayer), me puedo adelantar a los acontecimientos del día 5.

Ayer entre unas cosas y otras no me pude poner mucho rato, así que avance poca cosa.

Puntuaciones y bases de datos

Una de las características que va a tener el juego es que van a haber tablas de puntuaciones globales, por lo que todos competirán con todos para tener la mejor puntuación posible. La idea es crear varios rankings para fomentar la competición: Mejores puntuaciones globales, mejores de la semana y mejores del día.

Esto va a constar de dos partes, por un lado tengo una base de datos local donde almacenare los datos del jugador (un perfil por terminal). En esta base de datos almacenare un identificador único que me servirá para diferenciarlo del resto de jugadores y la puntuación más alta que consiga, que es la que cuenta. Cuando supere esta puntuación se actualizará en el terminal.

Por otro lado crearé un WebService que “ataque” a una base de datos SQL donde almacenaré las puntuaciones de todos los jugadores. Éste WebService tendrá dos métodos principales, uno para recuperar las puntuaciones y otro para guardarlas. Ya veré donde alojo estos servicios.

Para crear las bases de datos en local, que es una nueva característica de la versión mango, primero he leido un magnifico tutorial en el blog de Josue Yeray, un hacha en el desarrollo para WP7. Aquí explica lo básico para trabajar con bases de datos locales, yo básicamente he seguido el tutorial con alguna pequeña modificación, ya que es justo lo que necesitaba.

He creado el contexto de datos:

public class AppDbContext : DataContext
{
public AppDbContext(string connectionString)
: base(connectionString)
{

}

public Table<Datos> DatosJugador
{
get { return this.GetTable<Datos>(); }
}
}



Luego, simplemente, la primera vez que se entra en el juego crea la base de datos y los datos del jugador:

 using (var context = new AppDbContext("Data Source='isostore:/XXXXX.sdf'"))
{
if (!context.DatabaseExists())
{
context.CreateDatabase();

var datos = new Datos {IdentificadorJugador = Guid.NewGuid(), Puntuacion = 0};
context.DatosJugador.InsertOnSubmit(datos);
context.SubmitChanges();
}
else
{
RecuperarDatosUsuario();
}
}



Por último, para recuperar los datos necesarios, uso sentencias LINQ:

private void RecuperarDatosUsuario()
{
using (AppDbContext context = new AppDbContext("Data Source='isostore:/XXXXXX.sdf'"))
{
var datosUsuario = (from d in context.DatosJugador
select d).FirstOrDefault();

txtUsuario.Text = datosUsuario.IdentificadorJugador.ToString();
}
}



Hoy crearé la base de datos SQL y el WebService.


Nos leemos!

domingo, 22 de enero de 2012

El reto I: Crear un juego en 15 días. Día 3

Hoy es domingo y no quería hacer mucha cosa, por que tocaba descansar, pero al final me he puesto un rato a la hora de la siesta y me he liado.

Hoy he implementado la música y sonidos del juego, y he empezado con el algoritmo para controlar a los enemigos, que aún tengo que pulirlo, pero que ya funciona bastante bien.

Música y sonidos

Cómo comente el día 1, lo único que no estoy creando yo mismo es la música y sonidos, se lo he pedido a Fran, al que casualmente conocí por temas gráficos pero que resulta que se le da muy bien esto de las musiquillas.

Me puse en contacto con el comentándole el proyecto y en seguida le gusto y se ofreció a ayudarme.

Así pues le pedí una melodía, de aproximadamente minuto y medio, dos minutos y que tuviese un toque 8 bits, para que no desentonase con el aspecto Game Boy, además que fuese un poco cañera para darle ritmo al juego.

Casualmente el ya estaba trabajado en una melodía de ese estilo, así que la adapto a lo que necesitaba y me la mando ese mismo día. Después de un par de modificaciones ya la teníamos lista. Todo en el mismo día, vaya crack!

Además le pedí efectos de sonido para el salto, la muerte, coger un item y subida de nivel. Los efectos me gustaron todos a la primera así que sin ninguna modificación ya lo teníamos.

Enemigos

También he estado implementado en algoritmo para los enemigos. Estoy haciéndolo para que según el nivel de dificultad aparezcan más o menos.

Para crearlos lo que he hecho ha sido crear un array de enemigos donde los “guardo” para usarlos cuando los necesito, de esta forma no tengo que estar haciendo “new” continuamente y le ahorro trabajo al Garbage Collector.

Mañana empezaré con el tema de las puntuaciones.

¡Nos leemos!

sábado, 21 de enero de 2012

El reto I: Crear un juego en 15 días. Día 2

El segundo día de mi reto lo he dedicado a montar todo el chiringuito.

La herramienta que he usado para la programación del juego es Visual Studio 2010, algo lógico tratándose de un proyecto para WP7.

He usado un nuevo tipo de proyecto “Windows Phone Silverlight and XNA Application”, la ventaja de esta plantilla es que nos permite tener parte del proyecto en Silverlight y parte del proyecto con XNA.

image

Esto me permite centrarme mas en la parte del juego, y los menús crearlos con Silverlight, que es mucho más rápido.

El hándicap de este proyecto es que la parte XNA cambia ligeramente la forma de trabajar y he tenido que adaptar algunas partes del código que ya tenia, pero no me ha llevado tanto tiempo y creo que las ventajas son mas que los inconvenientes.

Una vez he tenido el proyecto creado, me he dedicado a incluir todas las clases que ya tenia de otros proyectos y pruebas.

He reutilizado mucho código del “Plataformer Starter Kid” que venia como plantilla en XNA 3.1 (por lo menos desde que actualice versión ya no me aparece).

He tenido que retocar algo de código para adaptarlo a mis necesidades, pero he de reconocer que me han ahorrado mucho trabajo. El motor de carga de niveles, las físicas y colisiones, el salto, son algunos ejemplos.

He creado también la imagen de fondo que voy a usar en el juego, por supuesto siguiendo la estética Game Boy (que cada vez me gusta más y creo que voy a usarla en mas juegos)

Fondo

He buscado por Google unas cuantas imágenes de juegos de Game Boy para inspirarme y he usado esas nubes que he visto en un juego de Wario.

La imagen original de la que he cogido las nubes: (como he comentado varias veces, para el tema grafico tengo que tirar de “ayuditas”)

 0wario_land_super_mario_land_3

Espero que el tema de las puntuaciones y tiempo se vea bien, es un poco pequeño, pero no quiero perder mas espacio de juego.

Por último, hoy he creado el algoritmo que colocara las cerezas por la pantalla. Como ya comente en el día 1, aparecerá una cereza en pantalla y cuando la cojamos, aparecerá otra aleatoriamente.

Para hacer esto, lo que he hecho es que a la hora de construir el nivel coloco una cereza encima de cada plataforma y las oculto todas. Luego, recupero un numero aleatorio y muestro la cereza que coincide en esa posición dentro del array que las contiene. Cuando cojo una, la oculto y muestro otra aleatoriamente.

Y este es el aspecto que tiene de momento:

image

El reto I: Crear un juego en 15 días. Día 1

Creo nueva sección en el blog, el reto.

Me iré poniendo retos a mi mismo y mi idea es ir escribiendo el día a día de la creación, con las decisiones que tomo y con las dificultades con las que me voy encontrando (que seguramente harán que no cumpla muchos de los retos Sonrisa), además de como lo voy haciendo.

El primer reto que me pongo es crear un juego para Windows Phone 7 totalmente funcional en 15 días.

Este reto podría llegar a ser posible (si lo consigo) por que no parto de cero, de otros muchos intentos de juego y muchas pruebas de concepto y demás, tengo muchos “retales” de código que me van a servir, por ejemplo tengo el motor de carga de nivel, el motor de animaciones, el algoritmo para el salto, etc..

El reto consiste en lo siguiente:

  • He de tener el juego listo en 15 días a partir de hoy, o lo que es lo mismo, el sábado 4 de Febrero tiene que estar listo.
  • El juego ha de ser totalmente funcional y jugable, si bien, solo tendrá un nivel y armas limitadas. Una vez acabado iré actualizando con más niveles y armas.
  • Voy a hacerlo todo yo, menos el sonido. Eso es, gráficos y diseño y programación. Para el sonido me ayuda (vamos lo crea el) el amigo Fran.
  • Una vez acabado, pondré el juego en el Marketplace, gratis.
  • Hay que tener en cuenta que todo esto lo hago en ratos libres.

Día 1. Diseño y gráficos

El primer día lo he dedicado al diseño del juego y ha crear algunos de los gráficos.

Lo primero que he tenido que hacer es decidir el tipo de juego, para poder conseguir el reto, el juego tiene que ser sencillo, con una jugabilidad sin muchas florituras, pero que a la vez enganche y sea adictivo.

Me he decidido a crear un juego de supervivencia, el juego va a consistir en mantenerse vivo el mayor tiempo posible, a mas tiempo vivo, mas puntuación. Además hay otros factores dentro del juego que harán aumentar la puntuación.

Para conseguir un punto de adicción y conseguir el pique, voy a poner una tabla de puntuaciones on-line, para que los jugadores se piquen los unos con los otros por conseguir la mejor puntuación a nivel mundial.

Después de ver unos videos de Super Create Box, para IPhone, he decidido que ese es el tipo de juego perfecto para el reto.

image

Diseño

El juego consiste en sobrevivir el máximo tiempo posible y conseguir la máxima puntuación posible. El reto es superar la puntuación del resto de jugadores.

Cada enemigo que eliminemos nos dará puntos, asimismo por la pantalla aparecerá un ítem (cerezas) que al cogerlo nos sumara puntos, cuando cogemos el ítem, vuelve a aparecer en otro punto de la pantalla.

Para añadir un punto de dificultad y evitar que el jugador se quede en un punto de la pantalla, habrá un tiempo máximo para coger las cerezas. Si no se consigue coger en ese tiempo, el jugador muere.

Cada diez cerezas que recojamos, subirá el nivel de dificultad, cuanto mas nivel, mas agresivos serán los enemigos y mas enemigos aparecerán. También se reducirá el tiempo para recoger el ítem. Asimismo, las puntuaciones conseguidas también serán mas altas cuanto mas alto sea el nivel.

Las puntuaciones se subirán a Internet y serán globales.

Se puede morir de tres maneras: con el contacto con un enemigo, que se acabe el tiempo de recogida de ítem o por caer por el agujero del suelo.

Mi libreta con algo del diseño:

disenyo

Gráficos

He decidido dar un toque grafico que recuerde a los antiguos juegos de Game Boy, esta decisión tiene dos razones, la primera es que yo no soy nada bueno con el tema grafico y así simplifico mucho el tema, pero además le doy un toque retro que me gusta mucho. Lo retro se lleva.

Un pantallazo:

image

Estoy simplificando al máximo el tema grafico, ya que como he comentado antes, no tengo mucha idea.

El protagonista es un simple rectángulo con ojos y una animación muy simple para caminar y otra aún más simple para cuando esta parado.

Para los enemigos he cogido el mismo gráfico que para el protagonista y he invertido los colores.

Para el ítem de la cereza he buscado por internet un grafico de cereza pixelada, lo he retocado un poquito y lo he pasado a blanco y negro.

Los tiles del suelo son rectángulos con una pequeña sombra en los bordes.

Para la pistola he sido un poco mas ruin, he pegado un pantallazo del video del Super Create Box y he retocado la imagen para “pillar” la pistolita. (espero que no me denuncien Guiño)

Para todo esto he usado la herramienta gratuita paint .Net.

Algunos gráficos (corriendo, parado, pistola y cereza):

Run  Idle  Gun  Gem

Eso es todo por hoy, mañana el día 2.

¡Nos leemos!

lunes, 9 de enero de 2012

Propósitos para el nuevo año

Cada año que entra, nos hacemos nuevos propósitos. Unos se cumplen, otros no, pero ahí están, año tras año.

A nivel personal tengo por ahí algunos por cumplir, pero esos no vienen a cuento ahora, los que si que vienen a cuento son los que me he marcado a nivel de blog y técnicos, así que ahí van mis nuevos propósitos para el blog en este 2012:

  • Poner al menos un post técnico a la semana. Este es muy posible que no se cumpla siempre, sobre todo en épocas de entrega o de mucho trabajo, pero al menos lo intentaré.
  • Escribir mas sobre videojuegos, ya que en este blog quiero hablar tanto de programación como de videojuegos.
  • Aunque ahora añadiré otro tema sobre el que hare alguna que otra entrada. Con mi nuevo regalo de navidad, viene mi nueva afición, la fotografía, así que a medida que voy aprendiendo cosas, las iré poniendo en el blog.
  • Ponerme con Silverlight 5 y sus nuevas funcionalidades, y escribir sobre ello.
  • Acabar mi juego para Windows Phone 7 y crear una serie de video tutoriales para crear un juego desde cero. Crear un juego sencillo para estos tutoriales.
  • Crear una App para Windows Phone 7 que no sea un juego. Escribir en el blog el proceso de creación. ¿alguna sugerencia?
  • Instalarme Windows 8 y “trastear” con el.
  • Mas HTML5 y CSS3!

Y eso es todo, que no es poco!

miércoles, 4 de enero de 2012