lunes, 30 de enero de 2012

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

Ya el último día mostraba un error con Expression Blend que no me permitía modificar la parte Silverlight con el editor, pues bien, intentando arreglar esto, parece ser que toque algo que me ha “roto” Visual Studio, y me es imposible compilar cualquier proyecto que contenga páginas con la extensión .xaml, o lo que es lo mismo, Silverlight. Esto ha sido una autentica “putada” ya que hoy lunes tenia una entrega.

Por suerte tengo otro PC con todo lo necesario para desarrollar instalado, y gracias al TFS no me ha sido muy difícil cambiar de máquina, lo único es todo el tiempo perdido para hacer que esta funcione correctamente, ahora me encuentro en proceso de reinstalar todos los SDK desde cero, a ver si puedo solucionar esto.

Debido a la entrega que tenia y a estos problemas técnicos, no he podido avanzar mucho en el desarrollo, pero bueno, si que he hecho el algoritmo para el control de los enemigos.

Lo que he hecho básicamente es hacer que aparezcan de una manera pseudo aleatorios a, esto es, que hay aleatoriedad, pero dentro de unos parámetros que yo le indico.

Lo primero que hago es crear “oleadas” de enemigos que aparecen cada dos o  tres segundos (es aleatorio). Aleatoriamente le digo cuantos enemigos van a aparecer en cada oleada (1,2 ó 3) y luego los “lanzo” desde la derecha o la izquierda, una vez desde cada lado. Cuando un enemigo cae por el agujero del suelo, automáticamente aparece otro enemigo en modo cabreado (camina mucho más rápido). Es un comportamiento muy parecido al juego Super Create Box, que como ya dije el en primer post, es la inspiración de este juego.

Ahora he llegado a un punto en el que voy a tener que poner en stand-by el tema, a la espera de que me llegue mi terminal Windows Phone (en principio me llega este viernes), ya que lo que queda es probar que todo funcione correctamente en un dispositivo de verdad y arreglar los posibles fallos o desajustes en jugabilidad.

Así pues, espero poder continuar el fin de semana que viene con el día 11.

Nos leemos!

viernes, 27 de enero de 2012

Udacity, la universidad gratuita

Leo en Genbeta Dev una interesante iniciativa: Sebastian Thrun, un profesor de Inteligencia Artificial de Stanford, va a dejar de dar clases para fundar Udacity, una especie de “universidad” on-line a la que puede acceder cualquiera.

El primer curso que dan, consiste en crear un motor de búsqueda.

Según ponen en su web, en febrero lanzarán mas contenidos. Yo ya me he apuntado, parece interesante, ya iré comentando aquí que me va pareciendo. El 20 de febrero empiezan las “clases”.

image

Y una aclaración, por supuesto, esto no tiene validez académica, es simplemente por aprender.

Ir a Udaciy.

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!

viernes, 20 de enero de 2012

Cierran MegaUpload

Hoy Internet es un poco menos libre que ayer.

Los señores con traje y corbata que toman decisiones, parece que están cada vez mas alejados de lo que la inmensa mayoría de las personas creen y quieren, y cada vez mas alineados con las mega corporaciones.

Estas mega empresas, seguramente limitadas por su gran tamaño están siendo terriblemente lentas en adaptarse a los cambios y a los nuevos tiempos, y en vez de adaptar su negocio a la ya no tan nueva era digital, gastan millones de recursos en demandar a quien si lo hace, desgraciadamente a veces ganan.

Esta mas que demostrado que una buena distribución digital funciona y hace ganar mucho dinero a quien se aprovecha de ello, ahí tenemos a Steam, que año a año dobla sus ingresos, tenemos Itunes, del que no hace falta hablar, Amazon y un largo etcétera.

Si en vez de empeñarse en vendernos las series, películas, música y videojuegos a precios absurdos creasen buenos sistemas de distribución digital a unos precios no abusivos, muchísima gente ni se molestaría en buscar productos piratas, muchas veces de ínfima calidad. Pero no, es más fácil (o no) crear leyes restrictivas como SOPA, PIPA o la mas cercana a nosotros SINDE, o crear impuestos abusivos como los que cobra la SGAE.

Un contacto que tengo en Facebook, Pedro ha escrito lo siguiente:

MU ha ganado 100 millones a costa de poner contenido protegido y las majors han perdido 500 millones por ello... Si las Majors crearan un portal con todo su contenido gratis por el precio de una cuenta de MU... ¿No habrían convertido 500 millones de pérdidas en 100 de ganancias?

Esto da mucho que pensar….

miércoles, 18 de enero de 2012

Comprimir ficheros en .Net [Capsulas de código]

Hoy voy a iniciar una nueva sección en el blog. Pequeños trozos de código con una funcionalidad muy concreta, pero que pueden ser muy útiles. Para empezar un método para comprimir ficheros con .Net:

(Puedes descargar el código aquí)

image

Yo para llamar al método y hacer pruebas uso test unitarios, pero puedes llamarlo desde cualquier parte de tu código;

image

Y el resultado:


image


Bien, espero que os sirva, nos leemos!

domingo, 15 de enero de 2012

SQL Server, error al importar base de datos.

Al ir a restaurar una base de datos me he topado con el siguiente mensaje de error:

1

Puedo asegurar que soy el único que en estos momentos esta trasteando con esta base de datos, ya que es de desarrollo. Así pues lo único que queda es que una conexión se haya quedado por ahí colgada.

Para solucionar esto hay que cambiar el acceso a la base de dato de múltiples usuarios a acceso único, de este modo se cierran todas las conexiones existentes para dejar solo la tuya.

Clica con el botón derecho sobre la base de datos y ves a propiedades:

image

Y en la sección de Opciones tienes la opción de Restringir acceso.

2

Sobre todo, después de restaurar no te olvides de volver ha dar múltiple acceso, si no, nadie mas podrá acceder!

Saludos!

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