Mario Game mit python 2.7.9 und processing

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
b.grosse
User
Beiträge: 16
Registriert: Freitag 3. Januar 2014, 11:29

Hallo Leute,

ich versuche gerade mir ein eigenes Mario Spiel zu Basteln mithilfe von Processing (Download und Reference)
Hierzu wollte ich mit einem kleinen Menü anfangen:

Code: Alles auswählen

from time import sleep

state = "menu"

def setup():                                     # läuft einmal
    size(1280,720)
    frameRate(30)

def draw():                                      #endlosschleife
    if state == "menu":
        menu()  
        if state == "level":
            screenlevel()
        if state == "achievements":
            screenachievements() 
        if state == "Chapter 1":
            screenchapter1()
        if state == "Chapter 2":
            screenchapter2()
        if state == "Chapter 3":
            pass
        
def level():                                      
    if mouseX >= 560:
        if mouseX <= 755:
            if mouseY >=210:
                if mouseY <=230:
                    if mousePressed:
                        if mouseButton == LEFT:
                            print("mouseButton == LEFT") 
                            state =  "level"                        
                    else:
                        print("nomousepressed")
                else:
                    print("nomouseY <= 210")
            else:
                print("nomouseY >= 230")
        else:
            print("nomouseX <=340")
    else:
        print("nomouseX >= 560")

def achievements():                               
    if mouseX >= 560:
        print("mouseX >= 560")
        if mouseX <= 755:
            print("mouseX <= 755")
            if mouseY >=265:
                print("mouseY >= 210")
                if mouseY <=285:
                    print("mouseY <= 230")
                    if mousePressed:
                        print("mousepressed")
                        if mouseButton == LEFT:
                            print("mouseButton == LEFT")
                            state = "achievements"
                    else:
                        print("nomousepressed")
                else:
                    print("nomouseY <= 210")
            else:
                print("nomouseY >= 230")
        else:
            print("nomouseX <=340")
    else:
        print("nomouseX >= 560")

def chapter1():
    if mouseX >= 560:
        if mouseX <= 755:
            if mouseY >=210:
                if mouseY <=230:
                    if mousePressed:
                        if mouseButton == LEFT:
                            print("mouseButton == LEFT") 
                            state = "Chapter 1"                          
                    else:
                        print("nomousepressed")
                else:
                    print("nomouseY <= 210")
            else:
                print("nomouseY >= 230")
        else:
            print("nomouseX <=340")
    else:
        print("nomouseX >= 560")

def chapter2():
    if mouseX >= 560:
        print("mouseX >= 560")
        if mouseX <= 755:
            print("mouseX <= 755")
            if mouseY >=265:
                print("mouseY >= 210")
                if mouseY <=285:
                    print("mouseY <= 230")
                    if mousePressed:
                        print("mousepressed")
                        if mouseButton == LEFT:
                            print("mouseButton == LEFT")
                            state = "Chapter 2" 
                    else:
                        print("nomousepressed")
                else:
                    print("nomouseY <= 210")
            else:
                print("nomouseY >= 230")
        else:
            print("nomouseX <=340")
    else:
        print("nomouseX >= 560")
    
def screenlevel():                                        # Levelmenü(wo man die versch. level auswählen kann)
    backg = loadImage("lake.png")
    background(backg)
    textSize(25);
    text("Chapter 1", 560, 225);
    textSize(25);
    text("Chapter 2", 560, 275);  
    textSize(70);
    tint(100, 102, 153);
    text("Mario", 500, 80); 
    

    
def screenachievements():                                 # Die Errungenschaften 
    backg = loadImage("lake.png") 
    print("hi")
    
def menu():                                               # das Menü
    backg = loadImage("lake.png")
    background(backg)
    textSize(25);
    text("Singleplayer", 560, 225);
    textSize(25);
    text("Achievements", 560, 275);  
    textSize(70);
    tint(100, 102, 153);
    text("Mario", 500, 80); 
    level()
    achievements()
    
def screenchapter1() :                                  # Level1
    pass
def screenchapter2() :                                  # Level2
    pass
Leider habe ich das problem, dass er nicht in einen anderen State außer "Menu" wechselt.(level() und achievements() sind die auswahlschleifen die per Mausklick funktionieren. Sie können den state verändern)
hat jmd ahnung wieso?

Vielen Dank im Vorraus
BlackJack

@b.grosse: `state` ist in den Funktionen ein lokaler Name der nichts mit `state` auf Modulebene zu tun hat.

Du solltest entweder mit Funktionen arbeiten, also nicht nur syntaktisch sondern auch tatsächlich die Eigenschaften von Funktionen nutzen, zum Beispiel das die einen Rückgabewert haben können, oder objektorientiert arbeiten und `state` zu einem Attribut einer Klasse machen die das Spiel modelliert.

Edit: Und man könnte überlegen ob die Zeichenketten für `state` tatsächlich nötig sind, denn das sieht mir nach einer Indirektion aus das Du dann jeweils eine Zeichenkette einer Funktion zuordnest. Man könnte stattdessen auch gleich die Funktionen als `state`-Werte verwenden. Das macht den Code etwas einfacher.
Antworten