elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Solucionado][Python] Ayuda con pygame
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado][Python] Ayuda con pygame  (Leído 3,168 veces)
ddaro

Desconectado Desconectado

Mensajes: 3


Ver Perfil
[Solucionado][Python] Ayuda con pygame
« en: 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
Código:
#!/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

Código:
# -*- 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

Código:
# -*- 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

Código:
#!/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

Código:
dirr = director.Director()
scene = juego.Juego(dirr)
dirr.change_scene(scene)
dirr.loop()



« Última modificación: 10 Noviembre 2016, 14:02 pm por ddaro » En línea

ddaro

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: [Python] Ayuda con pygame
« Respuesta #1 en: 10 Noviembre 2016, 14:01 pm »

Solucionado. Gracias de todas maneras :rolleyes:


En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: [Solucionado][Python] Ayuda con pygame
« Respuesta #2 en: 10 Noviembre 2016, 18:45 pm »

ya que pusiste el código, podrías poner la solución del problema para los que estamos aprendiendo.
Saludos y que bueno que lo arreglaste.
En línea

ddaro

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: [Solucionado][Python] Ayuda con pygame
« Respuesta #3 en: 10 Noviembre 2016, 21:18 pm »

No lo subi porque la realidad es que no tengo idea de python no me adapto a su sintaxis, etc y se que hay muchas cosas que no estan del todo bien. Lo que hice fue poner el menu en el main y en base al director elijo si voy al ranking o al juego

main.py
Código:
# -*- coding: utf-8 -*-

# Módulos
import pygame, sys
import director
import juego
import os
import ranking
from pygame.locals import *
salir = False

class Menu:
    "Representa un menú con opciones para un juego"
   
    def __init__(self, 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

    def actualizar(self):
        """Altera el valor de 'self.seleccionado' con los direccionales."""

        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]
                print "Selecciona la opcion '%s'." %(titulo)
                funcion()

        # 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 imprimir(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
       
        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)
           
def main():
    global salir
    os.environ['SDL_VIDEO_CENTERED'] = '1'
    opciones = [
        ("Jugar", comenzar_nuevo_juego),
        ("Ranking", rranking),
        ("Salir", salir_del_programa)
        ]

    pygame.font.init()
    screen = pygame.display.set_mode((800, 600))
    fondo = pygame.image.load("Menu/Fondo.png").convert()
    menu = Menu(opciones)

    while not salir:

        for e in pygame.event.get():
            if e.type == QUIT:
                salir = True

        screen.blit(fondo, (0, 0))
        menu.actualizar()
        menu.imprimir(screen)

        pygame.display.flip()
        pygame.time.delay(10)



   

   

def comenzar_nuevo_juego():
    dirr = director.Director()
    scene1 = juego.Juego(dirr,"Juan")
    dirr.change_scene(scene1)
    dirr.loop()

def rranking():
    dirr = director.Director()
    scene2 =ranking.Ranking(dirr)
    dirr.change_scene(scene2)
    dirr.loop()

def salir_del_programa():
    print " Gracias por utilizar este programa."
    salir=True
    sys.exit(1)

if __name__ == '__main__':
    pygame.init()
    main()

Espero que les sirva
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
pygame(python)
Scripting
desnight 0 2,544 Último mensaje 29 Febrero 2008, 15:25 pm
por desnight
[Python][Pygame] Ayuda con un juego de gato
Scripting
EMYLY 4 9,208 Último mensaje 12 Mayo 2010, 22:37 pm
por Debci
[Python] Ayuda con pygame
Scripting
zZznewbiezZz 2 3,217 Último mensaje 16 Noviembre 2010, 12:53 pm
por Gabriela
[Python-Pygame] Cruel Hangman 0.2
Scripting
BigBear 0 2,113 Último mensaje 19 Diciembre 2014, 15:02 pm
por BigBear
[Python-Pygame] E.T Must Die 0.3
Scripting
BigBear 0 3,325 Último mensaje 1 Enero 2015, 15:46 pm
por BigBear
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines