Básicamente el juego se trata de no dejar caer la pelota por el agujero que se situado entre las 2 palancas que el usuario puede mover.
Para este juego no hay una forma de ganar, la cuestión es solo no perder y hacer la mayor cantidad de puntos que se obtienen chocando la pelota contra los figuras que aparecen en la parte superior de la mesa.
Esto es todo lo que hace el juego, se repite una y otra vez.
NO se hace uso de inteligencia artificial.
Una parte muy importante de este juego es su física, que hace todo el trabajo de como se debe mover la pelota cuando se avienta y cuando rebota, para que sea de la forma mas natural posible.
Un diagrama de como se jugaría en este juego y las opciones para perder y/o ganar.
En esta entrada mostraremos la implementación del Algoritmo Euclides en el lenguaje Python de una manera muy sencilla.
Generalmente este algoritmo de utiliza para obtener el máximo común divisor de ciertos numeros, que a su vez puede ser parte de la simplificación de fracciones o parte de una sucesión de divisiones continuas, o en un ejercicio para conocer los inversos modulares de ciertos números.
Hay 2 formas de obtener el MCD (máximo común divisor) o GCD (greatest comun divisor):
-> Implementar el algoritmo (programar todos los pasos)
-> Usar la librería incluida en python
Aquí esta el código para la primera opción, es muy básico pero cumple con la finalidad.
def extended_gcd (a, b):
x, ant_x = 0, 1
y, ant_y = 1, 0
while b:
cociente = a // b
a, b = b, a % b
x, ant_x = ant_x - cociente*x, x
y, ant_y = ant_y - cociente*y, y
return (ant_x, ant_y, a)
def main():
a = input()
b = input()
print extended_gcd(a, b)
main()
Y una captura de esto corriendo:
Aquí esta la segunda opción, donde solo se importa la librería y se le pasan los dos números de los cuales se quiere conocer el mcd
from fractions import gcd
def main():
a = input()
b = input()
print "gcd(", a,", ", b,") = ", gcd(a, b)
main()
El diagrama de la física del juego demuestra que básicamente en esta parte del juego casi todo depende de la gravedad, por lo que la buena y correcta implementación de esta dentro del juego supondrá un buen funcionamiento de las demás partes del juego.
Algo muy importante que también se muestra en el diagrama, es la interacción de los personajes y los objetos (que a su vez dependen de la gravedad) ya que otras partes en el desarrollo del juego como la sección de equipamiento para los personajes y la de música interectúan con la física del juego.
Y aunque no se visualiza en el diagrama (creo que es muy obvio) todo esta relacionado con la parte del desarollo del aspecto visual.
Al momento del desarrollo de esta parte debería tenerse definido si el juego se realizará en 2D o 3D, ya que el espacio, los objetos y los personajes tendrían una forma diferente y la manera en la que se implementaría la gravedad sería una forma muy diferente; sería mas compleja si el juego se realiza dentro de un ambiente 3D.
Y la manera en que interactuarían los personajes/objetos también dependería si el desarrollo es en 3D o 2D.
Herramientas para el Desarrollo de la Física
Una herramienta que podría servir para esta parte del desarrollo es una librería llamada Chipmunk-Physics que esta escrita en C y que como su nombre lo dice se encarga de facilitar el desarrollo de la física en ambientes 2D.
Un ejemplo de lo que se puede hacer con esta librería:
Como el desarrollo será en Python, esta librería cuenta con una implemetación para este lenguaje llamada Pymunk.
Un ejemplo de lo que se puede lograr al usar esta libreria:
Otra libreria que también puede ser usada para este mismo propósito puede ser la llamada Box2D.
Esta librería es muy conocida ya que se ha usado para el desarrollo de la física de Angry Birds y Crayon Physics Deluxe, que precisamente en estos juegos se puede ver su correcto funcionamiento y sus limites. Esta librería esta pensada para el desarrollo de ambientes en 2D.
Esta dirigida al desarrollo en el leunguaje C++.
La realización de un juego implica el uso de diferentes herramientas, metodologías, etcétera; estos puntos son importantes ya que de estos depende el camino que se tomara para la creación del videjuego, que generalmente son 2 diferentes metodologías:
Crear el juego 100% desde cero, es decir, programar absolutamente todo lo que este relacionado con el juego: inteligencia artificial, animacion, texturas, sonido, modelado de personajes y escenarios, sistemas encargado de la fisica del juego, motores de renderizacion, de hecho primero se tiene que crear el motor gráfico con todas las características y después proceder.
Usar un motor gráfico, que es, tomar una especie de kit donde se envuelven todas la herramientas necesarias para la creación del videjuego, donde todo esta integrado para trabajar de una manera mas "fácil", donde ya se está establecido y probado al 100% los motores de renderizacion, de la fisica, la inteligencia artificial, practicamente solo se centrarían en seguir el guión del juego.
Cabe mencionar que una buena idea antes de comenzar cualquier desarrollo de un videojuego, es conveniente establecer una especie de guión a seguir con la historia del juego, los limites de éste, las personalidades y aspectos de los personajes, interacción entre ellos, descripción de los escenarios, y todo lo que pueda a ayudar a tener en claro como queremos que sea la versión final de nuestro juego (que si tendrá y que no tendrá) esto para centrarse completamente en el desarrollo y no estar batallando al mismo tiempo con la historia, aspectos, etc.
Herramientas para crear un juego desde cero
Para desarrollar un juego de esta forma es necesario contar por lo menos con conocimientos acerca de una herramienta para el modelado y animación de los personajes o escenarios (2D, 2.5D, 3D) y un lenguaje de programación el cual se encargará de manejar todo lo creado con las herramientas de diseño, es decir, la animación.
El lenguaje más utilizado en el ámbito de los videojuegos es por mucho C++, debido a que puede acceder de una manera muy rápida al hardware de la plataforma (PC, Consolas).
Aunque C++ es el más utilizado no es el único, ya que se usan infinidad de lenguajes como el reciente LUA conocido por ser usado(o combinado con otro) en juegos como World of Warcraft, GTA: San Adreas o Angry Birds.
Otro lenguaje muy común para nosotros (tal ves en el desarrollo de videojuegos comerciales no lo es) es Python ya que debido a su facilidad de manejo y su amplio campo de aplicación, es un fuerte candidato para su uso en la categoría de desarrollo de videojuegos; cuenta con una variedad de librerías que sirven de apoyo para el desarrollo de videojuegos tales como: PyGame y PyGlet.
En cuanto a las actividades de modelado/diseño de los personajes y escenarios pueden llevarse acabo en ambientes o suite de animación, dentro de las más conocidas están: Maya, 3DS Max.
La mayorá de estos de paga, aunque existen otros gratuitos (tal ves de menos calidad o con menos aceptación) como: SketchUp, Blender(compatible con Python).
Existen también algunas API´s, las cuales su objetivo es el de facilitar este tipo de desarrollos:
OpenGL, DirectX, Renderman.
Desarrollo de videojuegos usando un motor gráfico
Para esta manera de desorrollo solo es necesario contar con un motor gráfico y su elección dependerá del lenguaje de programación que se desee usar durante el desarrollo. Solo es necesario apegarse al guión del juego y olvidarse de la programación del motor de la física, renderizado y todos los demas ya que un motor gráfico de distribución ya cuenta con estas herramientas (probadas y garantizadas).
Unreal Engine
Un motor gráfico potente y que ya tiene más que probado su buen funcionamiento(en juegos como Gear of War y Batman AA) es el motor de la compañía desarrolladora Epic, conocido como Unreal Engine, el cual actualmente cuenta con una licencia de desarrollo para estudiantes que es gratuita e inclusive se puede lucrar con los proyectos creados en este sin tener que pagar a Epic (siempre y cuando las ganancias no superen los 5000 USD).
El motor es multiplataforma, asi que se puede desarrollar juegos para PC, Xbox360, PS3, Wii, Android, iOS.
El lenguaje de programación utilizado para desarrollar dentro de este motor es un lenguaje propio llamado UnrealScript(inspirado en Java y C++), pero también se puede usar C++.
El kit de Unrela Engine o UDK, incluye las siguientes herramientas: * Unreal Editor toolset, completo con un entorno de desarrollo de juegos integrado.
* Sistema de renderizado multihilo Unreal Gemini, con soporte para
todas las técnicas modernas de renderizado y sombreado, iluminación
avanzada, oclusión de ambiente, y un gestor para crear sombras complejas
sobre la marcha. * Ilumnicación global mediante Unreal Lightmass, para resolver ilumnación estática. * Herramienta visual de modelado físico Unreal PhAT, que incluye el sistema físico NVIDIA® PhysX®. * Unreal Kismet, una solución para crear rápidamente prototipos de juegos y mecánicas mediante scripts visuales. * AnimSet Viewer y AnimTree Editor, que permiten a los animadores un control preciso sobre movimientos de músculos y huesos. * Unreal Matinee, que incluye un editor de vídeos profesional para crear vídeos “in-game”, escenas de corte y cinemáticas. * UnrealScript, un lenguaje de programación de alto nivel orientado a objetos, totalmente integrado. * Unreal Cascade, sistema de efectos de partículas para implementar explosiones, niebla, humo y fuego. * Herramienta para diseño de terrenos, configuración de vegetación, estructuras y un gran número de puntos de interés.
Los requerimientos mínimos para el desarrollo bajo UE son:
Windows XP SP3 or Windows Vista
2.0+ GHz processor
2 GB system RAM
SM3-compatible video card
3 GB Free hard drive space
Demo de Unreal Engine
http://www.youtube.com/watch?v=YNNhZrE1KN8
Ogre 3D
Otro motor con menos popularidad dentro del mundo comercial, pero que tambien tiene un gran potencial es el motor Ogre 3D (que como su nombre lo indica tiene la posibilad de desarrollar juegos en 3D), el cual cuenta con una licencia gratuita y es uno de los motores mas usados dentro del desarrollo de juegos de bajo nivel o por principiantes (como nosotros).
Es utilizado para el desarrollo de juegos en PC(Windows, Linux, Mac OSX)
Para desarrollar dentro de este motor se puede usar C++, Python, C#, .NET, Java.
Algunas herramientas que utiliza Ogre 3D:
Sonido - SDL_mixer
Red - SDL_net
Motor de Física - Bullet
Entrada del usuario - herramienta SDL o OIS (Object Input Oriented System)
Los requerimientos base son:
NVidia: Geforce2 or higher required, Geforce 4(non-mx) or higher recommended
ATI: Radeon 7500 or higher required, Radeon 9600 or higher recommended
Alguna de esas tarjetas de video, y supongo que un PC mas o menos decente como los mínimos requerimientos para UE, aunque se dice que no se necesita un PC muy potente o que depende del tipo de juego que se quiera desarrollar.
Demo de Ogre 3D
http://www.youtube.com/watch?v=woHZRUlOQqo
Pilas
Un último motor un poco débil, pero que cuenta con buenos proyectos es Pilas, que en su mayoría los juegos creados en este motor son juegos en 2D, su licencia es gratuita (lgplv3).
Una ventaja o desventaja (según sea el caso) es que esta totalmente en español, por lo que podría facilitar a algunos el trabajo.
Se puede desarrollar para PC en los diferentes SO: Windows, GNU/Linux.
El lenguaje que se utiliza para desarrollar en este motor es Python.
En cuanto a los requerimientos para desarrollar en este motor no parecen ser muy exigentes, ya que solo se desarrollan juegos en 2D, pero sería una buena idea tomar como referencia los requerimientos mínimos para el UE para no quedarnos atorados en el proceso.