Package: tatiana
sitio web principal•página del proyecto•repositorio de códigoUn pobre intento de hacer un pequeño motor de videojuegos utilizando Python (≥ 3.10) y pygameTatianaes un pequeño intento de implementar un motor de videojuegos 2D competente utilizandoPython(en una versión superior o igual a3.10) y el módulopygamecomo dependencia obligatoria, además de estar construido y regirse enteramente mediante el paradigmaECS(en castellano:sistema entidad-componente).Como es obvio debido a la versión en la que actualmente se encuentra este proyecto, debe tratarse por el momento como una prueba de concepto más que como un producto estable y seguro, pues todavía quedan multitud de funcionalidades esenciales en cualquier motor de videojuegos por implementar a la par que muchos errores (que podrían ser considerados como graves) por corregir; por no mencionar el detalle de estar escrito enteramente enPython, lo que hace de este motor algo lento en comparación.No obstante y a causa de los importantes avances que ha estado teniendo este proyecto, he decidido hacer público este proyecto para facilitar su uso y, en caso de tener sugerencias para el mismo o querer asistir en el desarrollo, hacer posible la contribución por parte de cualquiera.instalación del paquetePuede instalar remotamente la versión más reciente del paqueteTatianaen su entorno local ejecutando el siguiente comando desde su terminal:pip3installgit+https://github.com/soyeltata/tatianaEsto, en el caso de que se encuentre en un entornoUNIX, si está bajo una máquinaWindowshabrá de reemplazarpip3porpip, como se muestra a continuación:pipinstallgit+https://github.com/soyeltata/tatianaAdemás, a partir de la versiónv0.0.2, puede instalarTatianaa través de los repositorios oficiales dePyPI, como se muestra a continuación:pip3installtatianaDe nuevo, si está en una máquina conWindows, habrá de reemplazarpip3porpip:pipinstalltatianaSin embargo y en el caso de que quiera instalarTatianamanualmente con el fin de modificar su código fuente o con cualquier otro propósito, habrá de seguir las siguientes instrucciones, no sin antes asegurarse de que tiene instalados los paquetesgitymake:Clone el repositorio en su máquina local mediante el siguiente comando (funciona indistintamente de su sistema operativo):gitclonehttps://github.com/soyeltata/tatiana.gittatiana-main&&cdtatiana-mainO, si no poseegiten su máquina, puede descargar el código fuente como un archivo.zipy posteriormente descomprimirlo y moverse al directoriotatiana-main.Una vez realizados dichos pasos, proceda a ejecutar el siguiente comando si posee el paquetemakeinstalado en su máquina para instalarTatiana:makeinstallSi por el contrario sólo quiere compilar el paquete (por cualquier motivo), ejecute el siguiente comando en su lugar:makeallLos binarios se encontrarán en el directoriodist/que se acabará de crear.
Para configurar correctamente y adaptar la compilación a su dispositivo con precisión, visite y lea el archivoMakefileque encontrará en la carpeta en la que se sitúa en el momento.
En el caso de que no poseamakeinstalado en su dispositivo, puede instalarTatianamanualmente con el siguiente comando:pip3install-e.Reitero en que, si está en un sistemaWindows, habrá de cambiarpip3porpip, como se muestra más abajo:pipinstall-e.Luego de haber completado la instalación deTatiana, puede, ahora sí, eliminar el directoriotatiana-mainy el archivo.zipque haya descargado.un pequeño ejemplo del motorUna vez instaladoTatianaen su dispositivo, ya puede empezar a trastear y juguetear con el pequeño motor de videojuegos que acaba de obtener.
Aquí, en esta pequeña sección podrá encontrar varios ejemplos útiles hechos utilizandoTatianaque quizás le ayuden en el desarrollo de su proyecto:dibujar una imagen en pantallaPara este primer ejemplo, necesitará de una imagen cualquiera de formatoPNGa la que nombraremos comoimage.pngdentro del código. Este archivo será nombrado una única vez en el código en la declaración de la constanteSPRITE, por lo que modifíquela si el nombre de su imagen es otro:fromtatianaimportWorld,Entityfromos.pathimportabspathRESX=800RESY=600SPRITE='image.png'player=Entity('mainobj',(0,0),abspath(SPRITE))w=World(RESX,RESY)w.add_entity(player)w.set_target_fps(30)w.run()movimiento 2D básicoAhora, para este segundo ejemplo nos basaremos en el extracto de código anterior, salvo que crearemos un módulo llamadomovement.pyque contendrá el sistema de movimiento del personaje. El código de este módulo será el siguiente:importkeyboardfromtatianaimportWorldfromtatiana.componentsimportTransformComponent,SpriteComponentSPEED=5defMovementSystem(_,environment:World)->None:player=environment.get_entity('mainobj')position=player.get_component(TransformComponent)# camera = environment.get_camera()try:ifkeyboard.is_pressed('a'):position.X-=SPEEDelifkeyboard.is_pressed('d'):position.X+=SPEEDelifkeyboard.is_pressed('w'):position.Y-=SPEEDelifkeyboard.is_pressed('s'):position.Y+=SPEEDexceptExceptionase:print(e)La velocidad del personaje vendrá determinada por la variableSPEED, por lo que modifíquela para variar la velocidad del personaje. Para este segundo ejemplo necesitaremos tener instalado además el módulokeyboard, sin este no se ejecutará el programa. El código de el archivo principal será, de nuevo, el siguiente (con una modificación con respecto a el extracto anterior):fromtatianaimportWorld,EntityfrommovementimportMovementSystemfromos.pathimportabspathRESX=800RESY=600SPRITE='image.png'player=Entity('mainobj',(0,0),abspath(SPRITE))w=World(RESX,RESY)w.add_entity(player)w.add_system('movement',MovementSystem)w.set_target_fps(30)w.run()más ejemplos variosAdemás, contamos con una pequeña galería de ejemplos varios llevados a cabo con el motorTatiana, puedes visitarla en el directorioexamples, y siéntete libre de añadir los tuyos propios.características por implementarAún habiéndose implementado varias características dentro del motorTatiana, el desarrollo de este apenas comienza, por lo que la mayoría de las que pensamos como posibles o que nos gustaría ver implementadas aún no lo están.
Por ello, a continuación se muestra el plan de programación que se tiene pensado para el proyecto (aunque sin fecha alguna, puede que no se acaben cumpliendo nuestras intenciones):Unsistema de entidad-componente(ECS) funcional.Dibujado de imágenes y sistemas para el escalado, la rotación y la opacidad de las mismas.Animaciones funcionales y sistemas para manejar varias a la vez.Sistemas para la limitación de FPS en la ejecución.Refactorizar el proyecto según la guía de estiloPEP 8.Seguridad de tipos garantizada gracias a la herramientamypy.Pequeña galería con ejemplos sencillos del motor.Escribir la documentación del proyecto mediante la herramientapdoc.Movimiento fluido mediante interpolaciones.Importación de"atlas"y"spritesheets".Físicas realistas mediante el paquetePymunk.Clases base para crear rectángulos, círculos, triángulos, texto...Una interfaz de línea de comandos para crear y manejar los proyectos.demostración de las capacidades deTatianaEn general, es posible resumir el estado actual del proyecto con la siguiente imagen:Y es que en esta pequeña demostración se puede apreciar el manejo de imágenes, animaciones y el límite deFPSque es capaz de realizar el motor. Siendo muy poco, ilustra perfectamente el estado del proyecto y el hecho de que aún necesita tiempo de desarrollo.licencia del proyectoCopyright (C) 2007 Free Software Foundation, Inc.https://fsf.org/Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.PreambleThe GNU General Public License is a free, copyleft license for
software and other kinds of works.The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.Este proyecto está dedicado, cómo no, aTatiana. Sé que no es mucho, pero es trabajo honrado y, si he podido llevar a cabo esta idea, ha sido pensando en ti;)