Seite 1 von 1

random zahl im while loop

Verfasst: Montag 25. Februar 2008, 20:55
von lockwood
Hallo Leute,

Ich versuche gerade um mit pygame random zahlen zu generieren im while loop. Wenn ich dies aber mache, dann spinnen meine zahlen wie verrueckt auf dem bildschirm. Habt ihr vielleicht eine ahnung wie ich immer auf einen event, neue zahlen abfragen kann?

Verfasst: Montag 25. Februar 2008, 21:07
von BlackJack
Mit pygame kann man keine Zufallszahlen generieren, dafür ist das `random`-Modul aus der Standardbibliothek da.

Und was heisst die Zahlen "springen auf dem Bildschirm"? Erzeugst Du Zufallszahlen und benutzt diese als Koordinaten um Grafiken zu platzieren? Wenn ja, was erwartest Du denn anderes als "springen", wenn Du das in einer Schleife immer wieder machst?

Verfasst: Montag 25. Februar 2008, 21:23
von lockwood
Ich moechte das er immer zufalls zahlen generiert wenn ich auf dem instance knopf druecke. Ich habe darfuer leider keine richtige loesung gefunden...

Code: Alles auswählen

"""
Lockwood Random loop control
"""
import pygame
import random
from pygame.locals import *

class Button(pygame.sprite.Sprite):
    """The button class"""

    def __init__(self, image, posxy):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(image)
        self.posxy = posxy
        self.rect  = self.image.get_rect(topleft=(posxy))


    def draw(self, surface):
        surface.blit(self.image, self.posxy)


class Main():

    def __init__(self):
        #init pygame
        pygame.init()
        pygame.display.set_caption("Lockwood Random loop conrtol")
        self.screen = pygame.display.set_mode((800,600))
        
        self.buttons = []
        self.add_button(Button("1.bmp", [100, 100]))

    def add_button(self, button):
        self.buttons = self.buttons + [button]


    def random_question(self):
        self.randomA  = random.randint(0,10)
        self.randomB  = random.randint(0,10)
        self.answer   = self.randomA + self.randomB
        return self.randomA, self.randomB


    def run(self):
        #run event loop
        self.loop()
        #pygame quiting
        pygame.quit()
        

    def loop(self):
        exit = False
        self.clock = pygame.time.Clock()

        while not exit:
            self.clock.tick(50)
            #random question in loop
            self.random_question()
            exit = self.EventHandler()
            self.draw()
            

    def EventHandler(self):
        exit = False
        for event in pygame.event.get():
            if event.type == QUIT:
                exit = True
            elif event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                        exit = True
            elif event.type == MOUSEBUTTONDOWN:
                self.check_points(pygame.mouse.get_pos())
        return exit
    

    def check_points(self, (x, y)):
        for button in self.buttons:
            if button.rect.collidepoint(x, y):
                print "pressed: ", button.posxy

    def draw(self):
        self.screen.fill((0,0,0))
        font  = pygame.font.Font("times.ttf", 40)
        text = font.render("%d + %d " %(self.randomA,self.randomB), 1, (255, 255, 0))
        self.screen.blit(text, [100, 150])

        for button in self.buttons:
            button.draw(self.screen)

        pygame.display.flip()

#run the program
Main().run()