Seite 1 von 1

[Pygame]Menü, Texture Auswahl Funktion, und andere Fragen..

Verfasst: Freitag 11. Mai 2012, 16:54
von Pyanfänger
Hallo an alle,

in diesem Thema habe ich bereits angefangen ein paar Fragen zu Stellen, und hier sind dann gleich ein paar andere, umfangreichere ;)
Erstmal der Quelltext:

[spoiler]

Code: Alles auswählen

import pygame, sys, random





pygame.init()
pygame.mixer.init()
font = pygame.font.Font(None, 37)
pygame.display.set_caption('TEST')
screen = pygame.display.set_mode([550,412])
screen.fill([255,255,255])
Objekt = pygame.image.load('Objekt.png')
Objekt_rect = Objekt.get_rect()
Hintergrund = pygame.image.load('Himmel.jpg')
Ende = pygame.image.load('Ende.png')
Pause = pygame.image.load('Pause.png')
ploff = pygame.image.load('ploff.png')
farbe = [255,255,255]
screen.blit(Hintergrund,[0,0])
plopp_sound = pygame.mixer.Sound("plopp.wav")
luftblase_geplatzt = False
time_slot = 0
counter = 0 
pause1 = False
Punkte = 0 

pygame.time.set_timer(pygame.USEREVENT, 200)


def Score(t):
    text = font.render(t , True, (255,255, 255), (159, 182, 205))
    textRect = text.get_rect()
    textRect.centerx = screen.get_rect().centerx
    textRect.centery = screen.get_rect().centery
    screen.blit(text, textRect)
    return;

###########################    
########EVENTS#############
###########################



while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type ==pygame.USEREVENT:
            if not pause1:
                time_slot = time_slot + 1
                if time_slot == 10 and counter < 25:
                    time_slot = 0
                    luftblase_geplatzt = False
                    x0 = random.randint(0,350)
                    y0 = random.randint(0,350)
                    screen.blit(Hintergrund,[0,0])
                    screen.blit(Objekt,[x0,y0])
                    counter = counter + 1
                if counter >= 25 :
                    screen.blit(Ende,[0,0])
                Score("Score: " + str(Punkte))
                pygame.display.flip() 
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_p:
                pause1 = not pause1
                if pause1:
                    screen.blit(Pause,[0,0])
                else:
                    screen.blit(Hintergrund,[0,0])
                    if luftblase_geplatzt:
                        screen.blit(ploff,[x0,y0])
                    else:
                        screen.blit(Objekt,[x0,y0])             
                    Score("Score: " + str(Punkte))
                pygame.display.flip()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            pos1=pygame.mouse.get_pos()
            xm = pos1[0]
            ym = pos1[1]
            
            if Objekt_rect.collidepoint(xm-x0,ym-y0):
                if not luftblase_geplatzt:
                    screen.blit(Hintergrund,[0,0])
                    screen.blit(ploff,[x0 - 10 ,y0 - 10])
                    plopp_sound.play()
                    Score(":D")
                    pygame.display.flip()
                    luftblase_geplatzt = True
                    Punkte = Punkte + 10 - time_slot
                

                
[/spoiler]

Das Spiel ist bis jetzt einfach ein OBjekt das hin und her hüpft und man so schnell wie möglich anklicken muss um so viel wie mögliche Punkte zu kriegen. Es ist alles noch ÜBERHAUPT NICHT ausgereift keine Sorge ;) Die TExturen, falls ihrs ausprobieren müsst mit ihr wirklich wisst was ich meine findet ihr dann hier : https://rapidshare.com/files/2853257439/Spiel
SInd eigentlich auch nur dahin gekritzelt...
Ahja und fast alles ist noch einfach so nur provisorisch da , zum Beispiel wenn das Spiel zu Ende ist, oder der Platz vom Score xD
ABer das wird nacheinander geklärt :)
Aber jetzt zu den eigentlichen Problemen/Fragen:

I. Menü

ICh würde gerne ein Menü einbauen, also das wenn man das Spiel startet man erst in eben ein Menü kommt in dem zum Beispiel START, HIGHSCORE und andere BUttons sind.

II. Texturen : Texturepacks

Bis jetzt hat es ja eine "feste" Textur, und um die zu ändern, muss man die Bilddateien ändern.
Es wäre schön wenn man einfach in dem INstallationsverzeichnis(schritt 3 ;) ) einen ornder namens Texturepacks hat in den die leute einfach ihre texturen reinziehen, und ann kann man vom menü aus das texture pack auswählen...

III. Installation & Verzeichnis

Da ja nicht nur das Programm alleine benötig t wird um auf anderem PC zu laufen, sondern viele anderen FIles,(also mit py2exe kommen ganz viele dinamyk link library dateien) wäre es doof wenn der NUtzer zb son ordner auf dem Desktop hat mit all dem zeug drin... es wäre cool so ne art setup.exe zu haben die es installiert und automatisch in zb program files einen ordner mit dem namen vom spiel generiert wo dan alles rein kommt, auch der texturepack ordner und so UND das programm ansich weiß das die dateien da sind (oder einfach durch die setup.exe automatisch ein shortcut icon auf den desktop erstellen lassen)

Das wars erstmal, mehr kommt noch ;)

MfG Universum

Re: [Pygame]Menü, Texture Auswahl Funktion, und andere Frag

Verfasst: Freitag 11. Mai 2012, 16:56
von webspider
Erlerne erst einmal Objektorientierung und strukturiere damit deinen Code so, dass du ihn nach deinen Wünschen erweitern kannst. Das wäre mit deiner aktuellen Codebasis zwar auch möglich, aber viel zu umständlich und unschön.

Re: [Pygame]Menü, Texture Auswahl Funktion, und andere Frag

Verfasst: Freitag 11. Mai 2012, 18:40
von Hyperion
Ich habe Dich in besagtem Thread bereits auf die Formatierung von Quellcode hier im Forum hingewiesen. Also sei doch so gut und passe das entsprechend an (also die Tags!). Des Weiteren ist auch dieser Code voll von unnötigen Leerzeilen. Benutze zwei Leerzeilen zwischen Funktionen - das reicht vollkommen aus.

Zum Thema Menüs habe ich vor einiger Zeit einmal etwas gebastelt... ich habe es mir jetzt nicht noch mal en detail angeguckt; vermutlich würde ich heutzutage da einiges anders machen. Aber immerhin war die Engine recht flexibel und hat funktioniert :-)

Sowohl Deine erste als auch Deine zweite Frage kapiere ich vom Anspruch her nicht. Wo liegt denn da Dein Problem? Du musst die Dateinamen der Texturen eben nicht fix in Deinen Code schreiben, sondern z.B. aus einer Konfigurationsdatei (INI, JSON o.ä. Format) holen, in der dann ein Mapping auf den Dateinamen stattfindet. Also etwa so:

Code: Alles auswählen

# als INI-Datei (`configparser` Modul zum Parsen benutzen!)
[Package]
name: My Package

[Pictures]
objekt: Objekt.png
background: Himmel.jpg
end: Ende.png
# usw.
Alternativ schreibst Du die Namen vor und definierst ein Verzeichnis, in dem sich Verzeichnisse mit solchen Bildern befinden. Der "Name" eines Texturpakets wäre dann eben der Verzeichnisname.

Generell fehlt es Dir noch an Gespür für Verallgemeinerung und Abstraktion. Das sind essenzielle Techniken für die Programmierung, aber natürlich schwer zu erlernen. Schau Dir dazu ggf. auch mal fertigen Code an - so etwas hilft ungemein.