Problems with Frames in Python

1

I'm doing a college job, and I'm having a hard time messing with Frames , more precisely I need to build the graph below.

In the code, you walk through it from EAST, WEST, NORTH and SOUTH commands, but for example when I am at 3 and I give > EAST , it is going to point to 9 and I do not know the reason and I can not find the error in the code.

fromtkinterimport*classShakespeare:cont1=0pontos=0comando=''quarto=0flag7=0dvivo=0def__init__(self):self.c=Frame(w,width=500,height=500)self.c.pack()self.quarto1()defsaiu_do_sete(self):if(Shakespeare.flag7==1):self.msg=Label(self.c,text='Háumemblemanaparede,rasgado,comoseofogohouvessearrancadooolhodeumanimal')Shakespeare.flag7=0defquarto1(self):self.c.destroy()self.c=Frame(w,width=500,height=500)self.c.pack()self.saiu_do_sete()Shakespeare.quarto=1Shakespeare.cont1+=1self.msg=Label(self.c,text='Jáénoiteevocêfinalmenteencontraabrigoemumacavernaescura''efria.Apósexplorá-laporalgumtempo,vocêencontraumcaldeirãofumegando.Aoestalodeumtrovão,trêsbruxassurgemdiantedevocê.')self.msg.pack()if(Shakespeare.cont1==1):self.msg=Label(self.c,text='Asbruxasfalameuumasóvoz:\n\n''Mortal,teconvocamos,deixedeladoomedo!\n''Apressa-teemtuamissão,nãosedehesitante.\n''Acheolhosdesalamandraesapo,umdedo\n''Eosjogueaquinessecaldeirãofumegante!\n\n''Emais:asasdacorujaqueaquiousavavoar,\n''PernadelagartoepelodegatoAngara.\n''Essascoisasprecisamosparaofeitiçolançar!\n''Rápido,nostragaemalnenhumteabaterá\n\n''Poisagoranosdeixeeváembora.\n''Nadamaistemosadizernomomento\n''Anãoserteavisarqueláfora\n''Umdragãopodeseroteutormento!')self.msg.pack()else:Shakespeare.pontos+=1self.msg=Label(self.c,text='Asbruxasestãodiantedevocê,comolhosarregalados,esperandoquelhesdêalgo.''Ossonsdanoiteparecemlheavisarquenãoéseguronestelugarcontinuar.')self.msg.pack()self.msg=Label(self.c,text='VocêpodeiraoNORTE,SUL,LESTEouOESTE')self.msg.pack()self.e=Entry(self.c)self.e.pack()self.b=Button(self.c,text="OK",command=self.ok)
        self.b.pack()

    def ok(self):
        Shakespeare.comando=self.e.get()
        if(Shakespeare.quarto==7):
            Shakespeare.flag7=1

        if Shakespeare.comando=="NORTE" or Shakespeare.comando=="SUL" or Shakespeare.comando=="LESTE" or Shakespeare.comando=="OESTE":
            self.ir_para(Shakespeare.comando)

    def ir_para(self,comando):
        print(Shakespeare.quarto, comando)

        if(Shakespeare.quarto==1 and comando=="NORTE"):
            self.quarto3()
        if(Shakespeare.quarto==1 and comando=="SUL"):
            self.quarto8()
        if(Shakespeare.quarto==1 and comando=="OESTE"):
            self.quarto5()
        if(Shakespeare.quarto==1 and comando=="LESTE"):
            self.quarto6()

        if(Shakespeare.quarto==2 and comando=="OESTE"):
            self.quarto2()
        if(Shakespeare.quarto==2 and comando=="SUL"):
            self.quarto2()
        if(Shakespeare.quarto==2 and comando=="LESTE"):
            self.quarto3()

        if(Shakespeare.quarto==3 and comando=="SUL"):
            self.quarto1()        
        if(Shakespeare.quarto==3 and comando=="LESTE"):
            self.quarto4()
        if(Shakespeare.quarto==3 and comando=="OESTE"):
            self.quarto2()              

        if(Shakespeare.quarto==4 and comando=="LESTE"):
            self.quarto6()
        if(Shakespeare.quarto==4 and comando=="SUL"):
            self.quarto6()

        if(Shakespeare.quarto==5 and comando=="LESTE"):
            self.quarto1()
        if(Shakespeare.quarto==5 and comando=="OESTE"):
            self.quarto7()           

        if(Shakespeare.quarto==6 and comando=="LESTE"):
            self.quarto9()
        if(Shakespeare.quarto==6 and comando=="OESTE"):
            self.quarto1()
        if(Shakespeare.quarto==6 and comando=="NORTE"):
            self.quarto4()
        if(Shakespeare.quarto==6 and comando=="SUL"):
            self.quarto8()            

        if(Shakespeare.quarto==7 and comando=="NORTE"):
            self.quarto2()
        if(Shakespeare.quarto==7 and comando=="OESTE"):
            self.quarto5()

        if(Shakespeare.quarto==8 and comando=="LESTE"):
            self.quarto6()

        if(Shakespeare.quarto==9 and comando=="NORTE"):
            self.quarto6()
        if(Shakespeare.quarto==9 and comando=="OESTE"):
            self.quarto10()            

        if(Shakespeare.quarto==10 and comando=="LESTE"):
            self.quarto9()

    def quarto2(self):
        self.c.destroy()
        self.c=Frame(w, width=500, height=500)
        self.c.pack()
        Shakespeare.quarto=2
        Shakespeare.pontos+=1
        self.msg = Label(self.c, text='Q2 Você voltou no tempo... Parece estar em um castelo medieval na Europa no século XIV.\n\n'
                         'Há brasões e emblemas nas paredes cheias de mofo. Em um dos emblemas, você vê o que parece ser um animal no meio do fogo.'
                         ' Abaixo uma inscrição diz "vulcani" e, mais abaixo, "Paracelso". Por um momento, o animal parece estar olhando em seus olhos.\n'
                         'Você pode ir ao SUL, LESTE ou OESTE')
        self.msg.pack()
        self.e = Entry(self.c)
        self.e.pack()
        self.b=Button(self.c,text="OK",command=self.ok)
        self.b.pack()  


    def quarto3(self):
        self.c.destroy()
        self.c=Frame(w, width=500, height=500)
        self.c.pack()
        Shakespeare.quarto=3
        Shakespeare.pontos+=1
        self.msg = Label(self.c, text='Q3 Um mundo, um paradigma, a sociedade, cachorros, aviões, mortes, cachorros-quente, viagens, alucinógenos\n'
                         'Você pode ir ao SUL, LESTE ou OESTE ')
        self.msg.pack()
        self.e = Entry(self.c)
        self.e.pack()
        self.b=Button(self.c,text="OK",command=self.ok)
        self.b.pack()        

    def quarto4(self):
        self.c.destroy()
        self.c=Frame(w, width=500, height=500)
        self.c.pack()
        Shakespeare.quarto=4
        Shakespeare.pontos+=1
        self.msg = Label(self.c,text='Q4 Ventos fortes, ventos fracos, ventos, ventanias, vendavais, vendas\n'
                         'Você pode ir ao SUL ou LESTE')
        self.msg.pack()
        self.e = Entry(self.c)
        self.e.pack()
        self.b=Button(self.c,text="OK",command=self.ok)
        self.b.pack()

    def quarto5(self):
        self.c.destroy()
        self.c=Frame(w, width=500, height=500)
        self.c.pack()
        Shakespeare.quarto=5
        Shakespeare.pontos+=1
        self.msg = Label(self.c,text='Q5 Hoje, mas não amanhã, somente hoje, eu irei, mas somente se não chover, porque senão não fará sol, então'
                         ' haveria de ser amanhã, mas hoje será o que ontem não foi\n'
                         'Você pode ir ao LESTE ou OESTE ')
        self.msg.pack()
        self.e = Entry(self.c)
        self.e.pack()
        self.b=Button(self.c,text="OK",command=self.ok)
        self.b.pack()

    def quarto6(self):
        self.c.destroy()
        self.c=Frame(w, width=500, height=500)
        self.c.pack()
        Shakespeare.quarto=6
        Shakespeare.pontos+=1
        self.msg = Label(self.c,text='Q6 O demônio, números, bodes, bandeiras esquisitas, Guiné e a socideade, tudo a mesma coisa, só que diferente\n'
                         'Você pode ir ao NORTE, SUL, LESTE ou OESTE ')
        self.msg.pack()
        self.e = Entry(self.c)
        self.e.pack()
        self.b=Button(self.c,text="OK",command=self.ok)
        self.b.pack()

    def quarto7(self):
        self.c.destroy()
        self.c=Frame(w, width=500, height=500)
        self.c.pack()
        Shakespeare.quarto=7
        Shakespeare.pontos+=1
        self.msg = Label(self.c,text='Q7 Você se encontra em um lugar onde o grupo Monty Python está encenando o "Sapo Crocante".'
                         ' Você olha para um confeiteiro que logo lhe diz: "Se eu tirar os ossos, eles não vão ser mais crocantes,'
                         ' né?" Você então vê uma caixa de chocolate onde está escrito "Sapos Crocantes". Ela parece conter uma dúzia'
                         ' de sapos inteiros, cuidadosamente cobertos pelo melhor chocolate.\n'
                         'Você pode ir ao NORTE ou OESTE ')
        self.msg.pack()
        self.e = Entry(self.c)
        self.e.pack()
        self.b=Button(self.c,text="OK",command=self.ok)
        self.b.pack()

    def quarto8(self):
        self.c.destroy()
        self.c=Frame(w, width=500, height=500)
        self.c.pack()
        Shakespeare.quarto=8
        Shakespeare.pontos+=1
        self.msg = Label(self.c,text='Q8 Uma porta, somente uma porta que pode ser aberta, irei morrer agora? Ou será só o reinício dessa história?\n'
                         'Você pode ir ao LESTE')
        self.msg.pack()
        self.e = Entry(self.c)
        self.e.pack()
        self.b=Button(self.c,text="OK",command=self.ok)
        self.b.pack()

    def quarto9(self):
        self.c.destroy()
        self.c=Frame(w, width=500, height=500)
        self.c.pack()
        Shakespeare.quarto=9
        Shakespeare.pontos+=1
        self.msg = Label(self.c,text='Q9\n'
                         'Você pode ir ao NORTE ou OESTE ')
        self.msg.pack()
        self.e = Entry(self.c)
        self.e.pack()
        self.b=Button(self.c,text="OK",command=self.ok)
        self.b.pack()

    def quarto10(self):
        self.c.destroy()
        self.c=Frame(w, width=500, height=500)
        self.c.pack()
        Shakespeare.quarto=10
        Shakespeare.pontos+=1
        self.msg = Label(self.c,text='Q10 Você está em uma cozinha. Você então vê, ao fundo, um cozinheiro colocando uma porção de atum em uma'
                         ' panela. \nApesar de não ter certeza, parece haver uma espingarda ao lado do fogão. Há pelos brancos voando por todo lado,'
                         ' enquanto o cozinheiro parece falar sozinho: "Impossível trabalhar com todos estes gatos aqui...\n'
                         'Você pode ir ao LESTE')
        self.msg.pack()
        self.e = Entry(self.c)
        self.e.pack()
        self.b=Button(self.c,text="OK",command=self.ok)
        self.b.pack()

w=Tk()
app = Shakespeare()
w.mainloop()
    
asked by anonymous 12.09.2016 / 02:47

1 answer

1

Initially the room number is 1 .

def quarto1(self):
    # ...
    Shakespeare.quarto=1
    # ....

In the first% w_that is displayed if you type LESTE , in the Frame method, the following line is executed:

if(Shakespeare.quarto == 1 and comando == "LESTE"):
    self.quarto6()

In method ir_para the value of the variable quarto6 is changed:

def quarto6(self):
    # ...
    Shakespeare.quarto = 6
    # ....
    self.b = Button(self.c, text="OK", command = self.ok)

Upon completion of the Shakespeare.quarto method, the quarto6 variable is 6 .

The method will continue its execution , that's where the problem may be, as the command is LESTE and the fourth is now 6 , then the reason for going to point 9 is:

if(Shakespeare.quarto == 6 and comando == "LESTE"):
    self.quarto9()

You enter the room X , change the value of Shakespeare.quarto to X and continue with the ir_para method execution. One way to fix this is to put a Shakespeare.quarto after calling the other function:

 if(Shakespeare.quarto == 1 and comando == "LESTE"):
     self.quarto6()
     return

It is also necessary to do the same in other parts of the code that exhibit this behavior.

Another way is to put the code in a ir_para block and use return to stop execution:

def ir_para(self,comando):
    print(Shakespeare.quarto, comando)

    while True:
        if(Shakespeare.quarto==1 and comando=="NORTE"):
            self.quarto3()
            break
        if(Shakespeare.quarto==1 and comando=="SUL"):
            self.quarto8()
            break
        # ...
        # ....
        # .....
    
12.09.2016 / 05:22