jueves, 7 de julio de 2011

Articulo: Empezando a programar videojuegos

¿Como empiezo?
Normalmente la gente recomendara aprender C, o C#, o incluso C++, y apuntarte a algun lugar.

No recomiendo en absoluto que empiezes con C o Java. Empieza trasteando con programas que no requieran programacion(o si, pero opcional o simple) para crear videojuegos, como el rpgmaker xp, adventure game studio, construct o el game maker. O si me apuras qualquier editor de mapas de fps o rts, o creando algun mod para algun juego.

Estos ademas tienen lenguajes de script que te resultaran mas faciles de aprender y manejar que librerias profesionales como puede ser SDL o XNA, pero igual te introduciran bien en todos los asuntos importantes.





Trasteando con eso aprenderas la complejidad de un videojuego en su totalidad(graficos, musica, guion, diseño, jugabilidad...) a la vez que iras captando rutinas de programacion, aunque sea de forma grafica.

Aprendiendo tu primer lenguaje

Luego pasate a un lenguaje accesible y simple con el que aprender desde 0. Mucha gente empieza con Python y Pygame o C# y XNA, aunque otra alternativa seria Ruby y Gosu, los cuales forman en conjunto para mi la mejor opcion para empezar, y sin dejar de ser potentes en ningun aspecto.


Notad que hoy en dia hay una nueva libreria muy potente, rapida, basada en objetos, en desarollo, con mejores prestaciones que sdl y muy portable tambien(esta para casi todos los lenguajes que puedan interesaros), se trata de SFML, de hecho es hasta mas sencilla aunque haya menos tutoriales y codigo hecho de antemano, aun asi, tiene un desarrollo activo y eso cuenta mucho tambien y posiblemente acabe desplazando bastante a SDL y los que se basan en ella(como gosu o pygame) el futuro. Tan sencillo como buscar la version para tu lenguaje favorito, aunque es preferible python porque hay mas gente detras.

Tras eso y cuando hayas aprendido orientacion a objetos y toda la pesca, puedes pasarte a c++ sin demasiado problema. Y tambien toquetear con 3d, aunque no dejas de poder hacerlo en todos ellos.


http://slav0nic.org.ua/static/books/python/beginning-game-development- ​with-python-and-pygame-from-novice-to-professional.9781590598726.29808​ .pdf

Libro gratuito de python y pygame.

En general no necesitas estudiar un ciclo de informatica para desarrollar videojuegos. El 99% de lo que dan ahi es inutil para tu proposito, y la programacion que dan es pobre y orientada ha hacer aplicaciones y sobretodo webs.

Nose si te pediran si o si el titulo o algo, pero sino fuera asi yo gastaria mi tiempo en bajar una coleccion de libros y tutoriales de internet y empezar a apendrer a saco.

Ya en eso puedes provar tambien con Unity, Cryengine y Unreal Engine 3, 3 engines decentes y muy potentes para indies.


Rendimiento de los distintos lenguajes, ¿Importante?
No te dejes engañar por la potencia tecnica y rendimiento de lenguajes como C o Java. Un programa en Ruby, el lenguaje de script mas lento, funcionara sin ningun tipo de lag o problema en casi qualquier equipo. Muy compleja y pesada ha de ser una aplicacion para que no vaya a funcionar en uno de estos lenguajes, la verdad, y si puedes hacer las cosas mas simples sin tener que gastar tanto tiempo, mucho mejor.

Que tenga un alto rendimiento es util para cuando este alto rendimiento es necesario. Nadie va a escribir un Sistema Operativo en python o un Game Engine con el pero otra cosa es escribir un juego amateur o qualquier otra aplicacion que sustente sus tareas mas complejas en librerias ya compiladas y optimitzadas en C o C++.


Entonces no tiene ningun sentido usar otro lenguaje por su rendimiento, porque todo lo mas pesado es hecho por librerias que tu no gestionas.

C++ se usa en el ambito PROFESIONAL porque ahi cuenta el rendimiento al limite, no a un chaval que acaba de empezar programando y no tiene ni idea y quiere hacer juegos indies para enseñar a sus amigos. Se debe elegir la mejor herramienta para cada cosa, cojones.

¿De que te va a servir programar un buscaminas con un manejo de la memoria 100% optimo y estructuras de datos personalizadas, acceso a bajo nivel y toda la pesca? ¿Para hacer un buscaminas necesitas todo eso? ¿Y gastar todo el tiempo extra en aprenderlo, manejarlo y escribirlo?

La enorme mayoria de programas que un amateur vaya a escribir no necesitan un lenguaje realmente rapido. Y los lentos ofrecen millones de ventajas a cambio de esto. Y python es uno de los mejores para aprender porque es un lenguaje donde las cosas solo se hacen de pocas formas, tiene identacion obligada, etc...

Ventajas de los lenguajes nombrados
-Mas simplicidad y accesibilidad, que no falta de potencia, excepto quizas de librerias, donde nadie compite con C++. Son lenguajes ideales para empezar y para que los amateurs trasteen. Lenguajes como ruby estan hechos con el karma 'Un lenguaje orientado al programador y no a la maquina'.

-No has de compilar, excepto con c#. Este proceso es lento y a veces puede dar problemas. Con los lenguajes de script puedes testear de forma immediata.


-La sintaxis. La sintaxis de lenguajes como ruby o python(el que mas ruby, y el que menos c#), es mucho mas accesible, flexible, bonita y rapida, por lo cual la hace mas interesante para aprender. Ademas python es recomendable por su identacion obligatoria y su lema de hacer las cosas de una forma, por lo cual te aseguras bastante mejor de educar bien desde el al principio al chaval.

-Biblioteca estandard mas amplia. El que menos es python. Lenguajes como C tenian 4 funciones muy cutres de forma base. Esto quiere decir por ejemplo, que debes reescribir codigo y herramientas a cada paso.

-Diseño moderno. Muchos lenguajes antiguos tienen decisiones en diseño que otros nuevos han solucionado mejor. No es que sean perfectos pero en ruby para copiar un objeto es tan simple como: objeto.clone, o copy, mientras que en Java primero has de implementar una interfaz, que luego te enteras que no va porque la hicieron de pena y no es usada, y se usa el constructor de copia, y implementarlo cada vez y tal y cual... teniendo que escribrir cada asignacion de atributos siempre, aunque vayas a hacer una copia total en el 99% de los casos, vamos un desastre, y cosas asi hay muchisimas.




-Manejo de memoria automatico. En C/C++ debes manejar tu de forma manual la memoria del programa. Esto quiere decir mucho mas esfuerzo y complejidad, a la par que mas bugs y problemas de seguridad. El bonus es el rendimiento, que dudo que resulte necesario.

2 comentarios:

  1. porque decís de no usar java? entonces para programar juegos (entre Python y java) me conviene empezar por Python? gracias

    ResponderEliminar
  2. Java, tiene un diseño peor que el de C#, el cual es mas moderno y es de hecho es una version del propio Java pero bastante mejorada y que ha corregido muchos de sus errores, asi que elige C# antes que Java o Python si lo quieres para aprender a programar videojuegos.

    Tampoco es que Python sea muy superior a Java y en este caso, son lenguajes bastante diferentes, pero para empezar y en general es mejor usar Python.

    ResponderEliminar