18 de octubre de 2009

Haciendo un juego desde cero (parte 1): la elección de un lenguaje de programación

Ya hablamos sobre los primeros pasos para crear un videojuego, sobre algunos engines… todo muy lindo pero..mucha cháchara y poca acción, es hora de poner los huevos en la cancha.

En primer lugar, tenemos que elegir un lenguaje de programación para que nos acompañe a lo largo de esta serie tutoriales que probablemente se extenderán a varias partes. Vamos a tocar varios temas que son extensos en sí mismos. Vas a quedarte con bastante data para poder investigar por tu cuenta (Googlea All The Fucking Time) y espero que, luego de esto, tengas una buena idea de cómo armar un juego.

Entonces.. ¿qué lenguaje será el elegido?




La elección de un lenguaje de programación depende de varios factores.

El primero y, probablemente principal, es la plataforma para la que desarrollaremos. Cada plataforma tiene sus reglas y con ellas viene el lenguaje a utilizar.

Si una plataforma nos permite varios lenguajes, entra en juego el factor “rendimiento”. ¿Qué lenguaje es más veloz?¿Cuál maneja mejor y más eficientemente las tareas? Hay que tener en cuenta que, a diferencia de otro tipo de aplicaciones que se permiten un poco más de “vuelterío”, en un juego hay que tratar de maximizar el rendimiento todo lo posible (o al menos se supone que uno debería hacerlo… vemos juegos dando vuelta cuya calidad no siempre justifica el enorme requerimiento que pide..).

Un tercer factor a tener en cuenta, bastante importante también, es lo soportado e “impuesto” que esté el lenguaje. Podés amar Smalltalk por su maravilloso purismo en el paradigma de objetos, pero se te va a hacer muy cuesta arriba desarrollar un juego con chances de tener algo de éxito. Te encontrarás carente de librerías, de ejemplos, de comunidad, etc. Sí.. es lamentable.. pero el mercado manda.

No podemos obviar la necesidad de desarrollar velozmente. El mercado apura.. y hay lenguajes que nos permiten un desarrollo más rápido que otros.

Por último: el gusto personal. Si tenés la posiblidad de elegir, este es el último factor y tiene también su relevancia.

Ahora bien.. hagamos una comparativa de algunos de los lenguajes de programación más conocidos por todos. Luego de esto, escogeremos uno para manejarnos de aquí en adelante y explicaré mis razones para tal elección.


Java, el sociable

Así es Java, le gusta estar en todas. Su gran fuerte es ese: una enorme portabilidad. Es casi seguro el lenguaje de programación más utilizado del mundo y los juegos tienen gran parte en este honor. ¿A qué me refiero? A los ultra masivos juegos para celulares. Si querés hacer juegos para teléfonos, Java es tu elección.

Ser un lenguaje tan usado tiene obvias ventajas a la hora de conseguir recursos, de contactarte con una comunidad y de poder ubicar tus juegos en el mercado.

Su contra más grande es su alto consumo de memoria, lo que descarta a este lenguaje a la hora de pensar en juegos para consolas o para pc standalone más o menos potentes.

Si alguien manguean, futuramente puedo hacer algún tutorial para la creación de juegos en java para celulares, reutilizando alguno de los que tengo creados. Es bastante más fácil de lo que quizás muchos imaginen.

En mi opinión, de todas maneras, los juegos Java Applet están destinados a desaparecer en un futuro quizás no tan lejano cuando los teléfonos celulares de la próxima generación se encuentren más estandarizados.

C/C++ , el padre de todas las cosas

Tanto C como C++ son, indudablemente, las opciones más potentes y poderosas a la hora de elegir un lenguaje. No encontrarás nada que se le compare en rendimiento, ni por asomo. Todo programador sabe C, o algo de él. Y si jamás lo tocó, lo sabe por herencia cultural: muchos lenguajes toman cosas de él, su forma de trabajo, su sintaxis, etc.

Se utiliza desde hace más de 40 años para casi cualquier cosa que se te ocurra, por lo que vas a encontrar una enorme, gigantesca cantidad de herramientas y frameworks para trabajar con c/c++. La gran mayoría de los juegos comerciales superproducción ( por no decir todos) están programados en alguno de estos dos lenguajes y los pocos que utilizan lenguajes más amigables para la lógica de gameplay (como puede ser python), tienen un core desarrollado igualmente en c/c++. Como muestra, te dejo esta lista de game engines open source. ¿En qué están programados la mayoría?

Ahora… con tantas flores… ¿por qué no elegir simplemente C/C++? ¿Para qué nos estamos gastando en compararlo con otras opciones?

C/C++ es costoso… lo que en otros lenguajes se puede hacer en dos simples líneas de un hermoso codiguito, en el padre de todas las cosas puede ser un engorroso choclo de código. No siempre vale la pena complicarse tanto la vida.. C++ (que es orientado a objetos, mientras C no), no posee Garbage Collector, feature que todo lenguaje POO máso menos actual incorpora. Esto es solo un ejemplo de lo cuidadoso que debemos ser y a eso a hay que sumarle la complejidad de un código C.

Otra contra considerable, es la baja (por decir nula) portabilidad de nuestros proyectos.
En resumen, C/C++ es el objetivo de un desarrollador profesional participando de grandes producciones. Si tu objetivo es más mundano, no te recomiendo que encares por este lado. De todas maneras, si tenés la intención de ser parte de la elite, encontrarás muchísimo material online para que aprendas y te prepares para el zarpazo. Tan solo fucking googlea y lo comprobarás.


C#, el cortado

Tiene su aguante, tiene su calidad, su alta orientación a objetos, su gran velocidad a la hora de desarrollar… pero es un cortado. Él solo te va a funcionar en plataformas Microsoft. Vos decidirás si esto es bueno o malo. Si querés hacer juegos para PC (específicamente, Windows) o para X-box, C# es una gran opción. En lo que juegos respecta, se encuentra actualmente en pleno auge gracias al framework que el mismo Microsoft ofrece: me refiero a Xna.

Xna es una más que interesante alternativa. Nos ofrece jugosos features y nos pone al alance más terrenal la creación de juegos. La posibilidad de desarrollar juegos para X-Box Live no es nada desdeñable…

Fuera de Xna, C# está siendo utilizado en otro engine del que ya hablamos por aquí. Me refiero a Unity3d. Si ya no lo hiciste, pegate una vueltita. A diferencia de Xna, aquí utilizaremos C# a un nivel bastante más alto, pero de todas maneras cuenta.

Python, el elegante


Python es eso: elegancia. Un código hermoso, sencillo y super claro. Su desventaja principal: es interpretado. Se usa bastante para realizar las partes más altas de algunos juegos, como el scripteo de la gameplay, mientras se deja en manos del señor C++ aquello más pesadote (ejemplos son algunos Battlefield y el Civilization IV).

Python es extremandamente sencillo y claro para aprender, y es POO. En muchas facultades se está pensando en utilizarlo para introducir a los alumnos en el mundo de la programación en lugar de Pascal y Basic, o como primer vistazo a la orientación a objetos.

Una gran opción si querés investigar cómo es hacer un juego más allá de publicarlo y entender sus mecánicas, obteniendo código muy claro.

Objective C, el exquisito

Todos hablan de Iphone y muchos de hacer juegos para él. Objetive C es el camino. Hablamos de un lenguaje altamente orientado a objetos y realmente muy interesante. Dado que pensamos en desarrollar para Iphone, y esto implica hacerlo en una Mac, nuestro entorno será xCode, con Cocoa, Interface Builder y toda la mar en coche. Un conjunto de herramientas poderosísimo, basándome en mi experiencia desarrollando para el teléfono de Apple.

Lamentablemente, esta opción no está al alcance de la gran mayoría de las personas. Apple implementa condiciones realmente cerradas para desarrollar en su plataforma, lo cual anula cualquier posible comunidad online, codigos open source, etc etc... sin contar con que no todos tienen Mac.

Action Script 3, el animado


Este es indudablemente el más "lento" de todos los nombrados. Nació para darle un poco de vida a las páginas webs a través del entonces Macromedia Flash y fue creciendo enormemente con el paso del tiempo. Actualmente es un lenguaje orientado a objetos (antés era prototipado y luego una mezcla) y es realmente bastante completito. Indudablemente, posee el menor rendimiento (por lejos) de todos los nombrados, dadas las limitaciones del player que lo ejecuta. ¿Por qué lo incluyo en la lista? Prácticamente todos los juegos web están hechos en flash. Es algo por todos sabido. Muchos opinan que el futuro de los videojuegos viene por el lado de los minigames web, ¿cómo no incluir Action Script en la lista?

Más allá de las limitaciones propias del entorno, Action Script continúa creciendo y cumple con creces aquello para lo que está pensado. Es fácil de aprender (sobre todo si venís de Java o similares) y tiene muchísimas facilidades a la hora de tratar gráficos, ya que utiliza clases propias de Flash. Aunque los juegos que desarrollarás en AS3 son siempre mini juegos 2d, hay librerías que vienen experimentando el 3d, como Papervision o Alternativa3D. Y si bien están en pañales aún, ya varios juegos utilizan sus capacidades.

Hacer juegos web, para muchos es el futuro. Son menos costosos, fáciles de hacer y realmente divertidos. Llegan a todo el mundo, solo necesitás un navegador web y un plugin flash player, y se ven cada vez más beneficiados por la viralidad de las redes sociales.


Aaaaaaand the Winneeer Iiiiiis…..

Es obvio que varios lenguajes quedaron fuera de la lista, pero intenté describir los que más relevantes me parecieron y a los que más probablemente les des uso. Sería hermoso (al menos para mí) escribir un juego comercial en Smalltalk… pero la realidad me indica que no sucederá.

Así que, tras toda esta información choreada de aquí y de allá, es hora de la gran elección. El lenguaje que nos acompañará a lo largo de nuestros tutoriale eeeeeees….
¡Action Script 3!

¿Por qué? Solo porque nos será más sencillo. Flash nos ofrece muchas facilidades a la hora de manejar gráficos, así que podremos concentrarnos más en lo que programamos. Si en algún momento deseamos hacer el paso a otro lenguaje, ya tenemos toda la base de cómo hacer un juego y apenas deberemos ocuparnos de aprender otra manera de mostrar en pantalla.

Asumiré que saben lo básico de flash (MovieClips, Frames, TimeLine,etc) y me concentraré más en la idea general, aquella que luego podrá ser exportada a otros lenguajes. Todo aquello que desconozcan, lo encontrarán aquí:

De todas maneras, cualquier duda que surja, solo posteen en los comentarios y las responderé ni bien me haga un tiempito.

Pronto vuelvo con la segunda parte, donde hablaré de la estructura del código de un juego.


Algunos Links acerca de lo que estuvimos viendo:

C/C++

* http://alleg.sourceforge.net/ Una librería para programar juegos en C++. Contiene tutoriales y econtrarás muchos más en la red.
* http://www.indielib.com/ Otra librería opensource, bastatne interesante.
* http://www.cplusplus.com/doc/tutorial/ Un cursito bastante completo de C++
* http://www.conclase.net/c/ Otro curso, pero en castellano.

Python

* http://www.pygame.org/news.html Una librería bastante copada.

C#

* http://msdn.microsoft.com/en-us/aa937791.aspx Recursos para desarrolladores Xna.

Action Script 3

* http://www.kirupa.com/developer/flash/index.htm Muchos tutoriales de actionscript, algunos viejos pero igual sirven.
* http://www.cristalab.com/ Excelente comunidad en español de desarrollo web. Tiene una gran cantidada de tutoriales sobre flash y ActionScript

Java

* http://wiki.netbeans.org/CreatingJavaMEGamesWithGameBuilder Tutorial de la página de NetBeans para desarrollar juegos con este IDE. Realmente instructivo. Fue mi primer paso a la hora de desarrollar juegos para celulares y
* http://developers.sun.com/mobility/midp/articles/gameapi/ Otro tutorial de la página de NetBeans.
* http://www.gamedev.net/reference/programming/features/j2me1/ Tutorial copado de una página copada.

No hay comentarios: