Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - ddaro

#1
Scripting / [Solucionado][Python] Ayuda con pygame
8 Noviembre 2016, 20:19 PM
Hola estoy haciendo un juego para la universidad con python y pygame pero la realidad es que nunca nos enseñaron python por eso venia a pedirles una mano. Mi problema es el siguiente como el juego tiene varias "etapas" como sea menu, ranking, el juego en si, etc busque en google como moverme entre esa etapas creando un director y estableciendo cada una de las "etapas" del juego como escenas  pero al ejecutar el menu lo dibuja en el screen pero se crashea osea deja de responder y no puedo hacer nada, no me tira una error ni nada simplemente deja de responder les dejo el code

main.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Módulos
import pygame
import director
import juego
import menu
def main():
   dirr = director.Director()
   opciones = [
   ("Jugar", comenzar_nuevo_juego),
   ("Opciones", mostrar_opciones),
   ("Creditos", creditos),
   ("Salir", salir_del_programa)
   ]
   scene = menu.Menu(dirr,opciones)
   dirr.change_scene(scene)
   dirr.loop()
   
def comenzar_nuevo_juego():
   scene1 = juego.Juego(dirr)
   dirr.change_scene(scene1)
def mostrar_opciones():
   print " Función que muestra otro menú de opciones."

def creditos():
   print " Función que muestra los creditos del programa."

def salir_del_programa():
   import sys
   print " Gracias por utilizar este programa."
   sys.exit(0)
   
if __name__ == '__main__':
   pygame.init()
   main()


director.py

# -*- encoding: utf-8 -*-

# Módulos
import pygame
import sys
import os

class Director:
   """Representa el objeto principal del juego.

   El objeto Director mantiene en funcionamiento el juego, se
   encarga de actualizar, dibuja y propagar eventos.

   Tiene que utilizar este objeto en conjunto con objetos
   derivados de Scene."""

   def __init__(self):
       self.screen = pygame.display.set_mode((800, 600))
       os.environ['SDL_VIDEO_CENTERED'] = '1'
       pygame.display.set_caption("Defensa de Chorros")
       self.scene = None
       self.quit_flag = False
       self.clock = pygame.time.Clock()
       

   def loop(self):
       "Pone en funcionamiento el juego."
       self.scene.LoadContent()
       while not self.quit_flag:
           time = self.clock.tick(60)

           # detecta eventos          
           self.scene.Events()            
           # actualiza la escena
           self.scene.Update()

           # dibuja la pantalla
           self.scene.Draw(self.screen)
           pygame.display.flip()
             
   def change_scene(self, scene):
       "Altera la escena actual."
       self.scene = scene
       
   def quit(self):
       self.quit_flag = True


scene.py

# -*- encoding: utf-8 -*-

# Módulos
import pygame
import sys

class Scene:
   """Representa un escena abstracta del videojuego.

   Una escena es una parte visible del juego, como una pantalla
   de presentación o menú de opciones. Tiene que crear un objeto
   derivado de esta clase para crear una escena utilizable."""

   def __init__(self, director):
       self.director = director

   def LoadContent(self):
       "Se llama cuando llega un evento especifico al bucle."
       raise NotImplemented("Tiene que implementar el método LoadContent.")
   
   def Update(self):
       "Actualización lógica que se llama automáticamente desde el director."
       raise NotImplemented("Tiene que implementar el método Update.")
   
   def Events(self):
       "Se llama cuando llega un evento especifico al bucle."
       raise NotImplemented("Tiene que implementar el método Events.")

   def Draw(self, screen):
       "Se llama cuando se quiere dibujar la pantalla."
       raise NotImplemented("Tiene que implementar el método Draw.")


menu.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Módulos
import random
import pygame
from pygame.locals import *
import scene
import Util

class Menu(scene.Scene):
   "Representa un menú con opciones para un juego"
   
   def __init__(self,director, opciones):
       self.opciones = opciones
       self.font = pygame.font.Font('Menu/dejavu.ttf', 52)
       self.seleccionado = 0
       self.total = len(self.opciones)
       self.mantiene_pulsado = False
       self.fondo = Util.imagen("Menu/Fondo.png")
       scene.Scene.__init__(self, director)
   def LoadContent(self):
       pass  
   def Events(self):

       k = pygame.key.get_pressed()

       if not self.mantiene_pulsado:
           if k[K_UP]:
               self.seleccionado -= 1
           elif k[K_DOWN]:
               self.seleccionado += 1
           elif k[K_RETURN]:

               # Invoca a la función asociada a la opción.
               titulo, funcion = self.opciones[self.seleccionado]
               funcion()
               """Altera el valor de 'self.seleccionado' con los direccionales."""


       # procura que el cursor esté entre las opciones permitidas
       if self.seleccionado < 0:
           self.seleccionado = 0
       elif self.seleccionado > self.total - 1:
           self.seleccionado = self.total - 1

       # indica si el usuario mantiene pulsada alguna tecla.
       self.mantiene_pulsado = k[K_UP] or k[K_DOWN] or k[K_RETURN]
               
   def Update(self):
       pass

   def Draw(self, screen):
       """Imprime sobre 'screen' el texto de cada opción del menú."""

       total = self.total
       indice = 0
       altura_de_opcion = 70
       x = 280
       y = 180
       screen.blit(self.fondo, (0, 0))
       for (titulo, funcion) in self.opciones:
           if indice == self.seleccionado:
               color = (200, 0, 0)
           else:
               color = (29, 0, 80)

           imagen = self.font.render(titulo, 1, color)
           posicion = (x, y + altura_de_opcion * indice)
           indice += 1
           screen.blit(imagen, posicion)


Si cambio de scene en el main y la inicializo con el juego anda a la perfeccion

dirr = director.Director()
scene = juego.Juego(dirr)
dirr.change_scene(scene)
dirr.loop()