Creación de juegos desde cero con SFML y C#

Creación de juegos desde cero: C# y SFML

 

Sin duda, una de las facetas que más interés suscita a los estudiantes que empiezan en el mundo de la programación, es la creación de videojuegos. Desgraciadamente (o afortunadamente nunca lo tendré claro del todo :)),  el desarrollo de videojuegos es una de las especialidades más complejas de la programación,  no solamente por la necesidad de conocimientos de computación sino también de matemáticas, física, diseño gráfico, etc.

Durante estos últimos meses ha surgido la necesidad de crear un curso que permitiera a los alumnos con conocimientos medios de programación introducirse en este mundo.  En estos casos, la solución más  habitual suele ser la de recurrir al uso de algún motor como AndEngine o de más alto nivel como Unity. Sin embargo, la idea en este caso era hacer algo diferente:  el objetivo no tendría que ser únicamente la creación de un juego, si no utilizar el desarrollo del mismo como vehículo para el aprendizaje de técnicas y conceptos de programación.

Siendo así, la solución que se ha adoptado ha sido la de crear un juego desde cero apoyándonos sólo en una librería que nos aporte la infraestructura básica de dibujo, transformaciones, carga de recursos, control de entradas de usuario.   Resumiendo, vamos a crear nuestro pequeño motor de juegos 2D; no vamos a hacer cosas y dejar que “algo” solucione los problemas por nosotros: en general vamos a enfrentarnos a los problemas y ver qué soluciones podemos adoptar.  Además, todos estos conceptos pueden ser aplicados posteriormente con el uso de motores, luego la ganancia será doble (aunque el esfuerzo también).

Si lo que buscas es aprender a hacer juegos de manera rápida, posiblemente este no sea tu curso, pero si lo que quieres es profundizar en conceptos de programación utilizando un juego como leitmotive, posiblemente estés en el lugar adecuado.

Las pautas principales sobre las que vamos a trabajar son:

  • Creación de un juego desde cero. En este caso se ha elegido hacer un remake de un juego arcade clásico como es el Galaga. Este juego aporta las suficientes características como para poder aprender bastantes conceptos (y los que no aparezcan nos los iremos inventando  para darle más “sabor” al juego). 
  • Desarrollo principalmente en C# (aunque también se da soporte para Java).  C# ha sido el lenguaje de cabecera de los alumnos durante el curso, por lo cual, con el objetivo de centrarnos en conocer nuevas técnicas y no en aprender otro lenguaje, va a ser el lenguaje de desarrollo. Esto de por sí limita bastante la elección de la librería con la que trabajaremos. Por lo que al final la opción elegida ha sido trabajar con SFML, una librería bastante potente para la creación de juegos desarrollada en C++ pero con bindings, entre otros lenguajes, a C# y Java[1].
  • El juego funciona principalmente en plataformas .Net, aunque gracias a la versión en Java es funcional en Linux y MacOS (en este último caso además ha sido probado sobre Mono). La migración a plataformas móviles como Android, al menos en el momento de escribir estas líneas, no está totalmente soportada por SFML, aunque sí que se espera que lo esté en breve.



Es importante resaltar que muy posiblemente Galaga se podría implementar de manera mucho más sencilla, que en algunas ocasiones “mataremos moscas a cañonazos”. Pero, como he comentado antes, el objetivo no es hacer el mejor juego del mundo… es aprender técnicas que pueden ser utilizadas en su creación.

Esta entrada servirá como punto de referencia, por lo que lo largo del curso iré colocando aquí los enlaces a los diferentes post.

La manera de trabajar

El curso se plantea como si de un taller se tratase. Partiendo de cero se irán dando pasos en función de las necesidades que poco a poco vayan surgiendo,  analizándolas y viendo diferentes soluciones que se pueden adoptar. El código creado se puede encontrar en GitHub.

Ni que decir tiene que el desarrollo del curso es experimental, por lo que cualquier aportación para mejorarlo o para corregir errores será muy bien recibida. Es más el código se va trabajando día a día (o semana a semana, según tenga tiempo 🙂 ) por lo que es posible que muchas cosas sean implementadas y mejoradas posteriormente. 

El otro problema: los recursos

Un juego no sería un juego si no tuviera un buen diseño gráfico que atrajera a los jugadores. Teniendo en cuenta que mis capacidades de diseño son bastante limitadas he tenido la suerte de poder contar con los recursos diseñados por Adrián Castelló. Desde aquí darle las gracias por los gráficos y recomendaros que visitéis su web.

[1] Otra de las opciones interesantes para la creación del curso era la de usar libGDX, otra potente y versátil librería que además permite la creación de proyectos en diferentes plataformas. El problema con esta librería es que el desarrollo se realiza únicamente en Java (aunque existen alguna opción de desarrollar en otros lenguajes como C#, pero que al menos personalmente no me ha aportado la suficiente confianza).

Tags: , , , ,

Compartir en Facebook Compartir en Twitter

Dejar un comentario

XHTML: Puedes usar estos tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>