Empecé a aprender a hacer juegos con python/pygame y, como es fácil hacer un juego que funcione rápidamente en pygame, no hay un tutorial real sobre cómo organizar el código de manera sensata.pygame code organization
En la página de tutoriales de pygame, he encontrado 3 formas de hacerlo.
1- No uso de las clases, para pequeños proyectos
2- MVC rubí sobre raíles tipo de estructura, pero sin el marco rieles que se traduce en algo demasiado complicado y oscuro (incluso con la programación OO y carriles conocimiento ?)
3- C++ - estructura como la siguiente: (limpia e intuitiva, pero tal vez no mucho pitón similar)
import pygame
from pygame.locals import *
class MyGame:
def __init__(self):
self._running = True
self._surf_display = None
self.size = self.width, self.height = 150, 150
def on_init(self):
pygame.init()
self._display_surf = pygame.display.set_mode(self.size)
pygame.display.set_caption('MyGame')
#some more actions
pygame.display.flip()
self._running = True
def on_event(self, event):
if event.type == pygame.QUIT:
self._running = False
elif event.type == KEYDOWN:
if event.key == K_ESCAPE:
self._running = False
elif event.type == MOUSEBUTTONDOWN:
if event.button == 1:
print event.pos
def on_loop(self):
pass
def on_render(self):
pass
def on_cleanup(self):
pygame.quit()
def on_execute(self):
if self.on_init() == False:
self._running = False
while(self._running):
for event in pygame.event.get():
self.on_event(event)
self.on_loop()
self.on_render()
self.on_cleanup()
if __name__ == "__main__" :
mygame = MyGame()
mygame.on_execute()
estoy acostumbrado a hacer juegos de SDL en C++ y utilizo este exacta estructura, pero me pregunto si es utilizable para ambos sma ll y grandes proyectos o si hay una manera más limpia en pygame.
Por ejemplo me encontré con un juego organizado de esta manera:
imports
def functionx
def functiony
class MyGameObject:
class AnotherObject:
class Game: #pygame init, event handler, win, lose...etc
while True: #event loop
display update
También se ve muy bien organizado y fácil de seguir.
¿Qué estructura debo usar consistentemente en todos mis proyectos para tener un código limpio que se pueda usar en juegos pequeños y grandes?
MVC ha existido de alguna forma, siempre y cuando haya GUI. Su 'estructura C++' es realmente la parte del controlador de MVC. Cada vez que esperas un evento con un método 'on_foo' probablemente uses alguna forma de MVC. http://martinfowler.com/eaaDev/uiArchs.html –
estoy tratando de escribir un juego simple usando pygame y encontrar su enfoque muy interesante, pero podría explicar qué hacer lo que necesitamos hacer en 'on_loop()' y 'on_render()' métodos? Como lo entiendo en 'on_render' hacemos algunos dibujos, ¿verdad? Y en 'on_loop()' llevamos a cabo cierta lógica. ¿Es correcto? – DaZzz