Buscar

Trabalho - Jogo da forca - Python Computação II - Engenharia Mecânica UFRJ

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

from tkinter import*
from random import shuffle
class Janela:
 def __init__(self,toplevel):
 #definiremos a janela para depois fecha-la
 self.janela=toplevel
 #criamos uma lista com os temas pra pessoa escolher, caso não haja na tela do tkinter será avisado que o tema não existe
 self.temas=["filmes","desenhos"]
 #criamos uma lista vazia letras=[] onde será armazenada as letras chutadas pelo usuário, pra quando ele repetir uma um aviso ser rertonado na tela, ou
 #já irmos imprimindo na tela as letras chutadas
 self.letras=[]
 # vamos criar uma lista onde será armazenada as letras certas chutadas pelo jogador formando a palavra da rodada
 self.quemeapalavra=[]
 #Para lidar com os espaços, letras maisculas, e verificar e a letra chutada compoe a palavra, vamos criar uma lista onde iremos manipula-la
 self.palavraanalise=[]
 # a palavra que será escondida será definida aqui e não na funções pois ela é geral pro jogo vamos consuta-la com mais de uma função.
 self.palavra=""
 #vamos criar o contador de erros, como temos cabeça, dois braços, tronco, e duas pernas é 6
 self.erros=0
 #Como queremos lidar com niveis vamos criar uma variavel nivel, ele jogara o jogador num arquivo referente ao tema de acordo com o nivel dele
 #por exemplo se ele for jogando e o nivel dele for o 2, sera aberto o arquivo filmes2. Serão dois niveis, a cada dois acertos ele sobe um nivel
 #então temos que criar uma variavel que conta a quantidade de acertos
 self.nivel=0
 self.vitorias=0
 self.fr1=Frame(toplevel)
 self.fr1.pack(pady=2,padx=2)
 self.fr2=Frame(toplevel)
 self.fr2.pack(pady=2,padx=2)
 self.fr3=Frame(toplevel)
 self.fr3.pack(pady=2,padx=2)
 self.fr4=Frame(toplevel)
 self.fr4.pack(pady=2,padx=2)
 self.fr5=Frame(toplevel)
 self.fr5.pack(pady=2,padx=2)
 self.fr6=Frame(toplevel)
 self.fr6.pack(pady=2,padx=2)
 self.fr7=Frame(toplevel)
 self.fr7.pack(pady=2,padx=2)
 self.fr8=Frame(toplevel)
 self.fr8.pack(pady=2,padx=2)
 
 self.titulo=Label(self.fr1,text="Jogo da Forca")
 self.titulo.pack(side=LEFT)
 
 self.tema=Button(self.fr2,text="Escolha um Tema:",state=NORMAL,command=self.tema)
 self.tema.pack(pady=5,padx=5,side=LEFT)
 
 #Aqui estamos definindo o state para depois de ter escolhido o tema o cara não ficar de graça e muda o tema no meio do jogo, ele terá que ir até o fim,por
 #o ultimo entry também tem o state e é inciado com disabled pro cara não reiniciar o jogo sem perder e matendo o level.
 #Habilitaremos e desabilitaremos tanto a entrada quanto o botão
 self.escolhadotema=Entry(self.fr2,width=15,state=NORMAL,textvar=tv)
 self.escolhadotema.pack(side=LEFT,padx=5)
 self.vertema=Button(self.fr3,text=" Ver temas",command=self.vertemas)
 self.vertema.pack(side=LEFT,padx=5)
 self.aviso=Label(self.fr4,text="")
 self.aviso.pack(side=LEFT)
 self.boneco=Label(self.fr5,text= '''
 +---------------------+
 | |''')
 self.boneco.pack(side=LEFT)
 
 self.escolherletra=Button(self.fr6, text= "Chute uma letra:",command=self.chute)
 self.escolherletra.pack(side=LEFT,padx=9)
 self.chutedaletra=Entry(self.fr6,width=15,textvar=tv2)
 self.chutedaletra.pack(side=LEFT)
 self.palavraescolhida=Label(self.fr7,text="")
 self.palavraescolhida.pack(side=LEFT)
 self.jogarnovamente=Button(self.fr8,text="Jogar Novamente?",state=DISABLED, command=self.pergunta)
 self.jogarnovamente.pack(side=LEFT)
 self.resposta=Entry(self.fr8,width=20,state=DISABLED,textvar=tv3)
 self.resposta.pack(side=LEFT)
 
 def vertemas(self):
 temas=", ".join(self.temas)
 self.palavraescolhida["fg"]="blue"
 self.palavraescolhida["text"]="Os temas cadastrados são %s."%temas
 
 def pergunta(self):
 if tv3.get()!="s" or tv3.get().lower()!="sim" or tv3.get()!="n" or tv3.get().lower()!="não":
 self.palavraescolhida["fg"]="blue"
 self.palavraescolhida['text']="Responda apenas sim ou não, outros carateres não são reconhecidos"
 if tv3.get()== "s" or tv3.get().lower()=="sim":
 self.erros=0
 self.letras=[]
 self.quemeapalavra=[]
 self.palavraanalise=[]
 self.palavra=""
 self.aviso['text']=""
 self.palavraescolhida['text']=""
 tv3.set("")
 tv2.set("")
 self.tema["state"]="normal"
 self.resposta["state"]="disabled"
 self.jogarnovamente["state"]="disabled"
 self.escolhadotema["state"]="normal"
 self.palavraescolhida["fg"]="blue"
 self.palavraescolhida['text']="Escolha seu novo tema"
 self.boneco['text']= '''
 +---------------------+
 | | '''
 
 if tv3.get()=="n" or tv3.get().lower()=="não":
 self.janela.destroy()
 
 
 def tema(self):
 if self.escolhadotema.get()in self.temas:
 self.escolhadotema["state"]="disabled"
 self.tema["state"]="disabled"
 
 
 self.aviso["fg"]="blue"
 # Vamos pegar as palavras no arquivo e coloca-las numa lista, depois embaralhamos a lista e escolhemos uma palavra
 # vamos abrir o arquivo de acordo com o nivel
 
 tema=open("%s%s.txt"%(tv.get(),self.nivel),"r")
 palavras=tema.readlines()
 shuffle(palavras)
 #como embaralhamos acima a lista, posso pegar sempre o primeiro elemento da lista que a cada rodada será um elemento diferente.
 self.palavra=palavras[0].lower()
 #Vamos deixar todos os caractereres em minusculo, e vamos mantes os espaços como elementos pois depois precisaremos do indice pra substituir a letra certa
 for i in range (len (self.palavra)):
 self.palavraanalise.append(self.palavra[i])
 tema.close()
 # a lista self.palavraanalise possui um espaço como ultimo elemento, o espaço dado para pular de linhas no arquivo, retiremo-lo
 del self.palavraanalise[-1]
 # Após escolhido o tema zeremos o entry de escolha do tema, apenas por estética
 tv.set("")
 # aqui vamos colocar na lista de quem é a palavra formada traços com a quantidade de letras que a palavra contem.
 
 for i in range (len(self.palavra)):
 if self.palavra[i]==" ":
 self.quemeapalavra.append(" ")
 else:
 self.quemeapalavra.append("_")
 # foi observado que estava indo o espaço usado para pular de linha no arquivo, para tira-lo fizemos o que se segue abaixo
 del self.quemeapalavra[-1]
 incognita=" ".join(self.quemeapalavra)
 self.aviso["text"]=incognita
 
 
 else:
 self.palavraescolhida["text"]="Tema não cadastrado"
 self.palavraescolhida["fg"]="red"
 tv.set("")
 def chute(self):
 #vamos ver se a letra já não foi escolhida
 if tv2.get() in self.letras:
 self.palavraescolhida["text"]=" Essa letra ja foi escolhida"
 self.palavraescolhida["fg"]="red"
 
 else:
 # tendo a letra não sido escolhida antes, a adicionamos a lista de letras
 self.letras.append(tv2.get())
 
 
 #Vamos verificar se a letra escolhida esta na palavra que foi selecionada em def tema
if tv2.get() in self.palavraanalise:
 for i in range (len(self.palavraanalise)):
 if self.palavraanalise[i]==tv2.get():
 self.quemeapalavra[i]=tv2.get()
 incognita=" ".join(self.quemeapalavra)
 self.aviso["text"]=incognita
 #Vamos verificar se ele ganhou
 if self.quemeapalavra==self.palavraanalise:
 self.palavraescolhida['fg']="blue"
 self.palavraescolhida['text']="Você Ganhou!"
 self.jogarnovamente["state"]="normal"
 self.resposta["state"]="normal"
 tv2.set("")
 self.vitorias +=1
 #vamos ver se ele ja pode subir de nivel
 if self.vitorias==2:
 self.nivel+=1
 #zeremos o contador de vitorias pra que quando ele chegar novamente em 2 subir o nivel
 self.vitorias=0
 self.palavraescolhida['text']="Parabéns subiu um nível"
 else:
 self.palavraescolhida["text"]="Errou!"
 self.palavraescolhida["fg"]="red"
 self.erros+=1
 if self.erros==1:
 self.palavraescolhida["text"]="Errou!Você tem mais 5 chances"
 self.boneco["text"]='''
 +---------------------+
 | |
 | +--+
 | / x x \\
 | | / \\ |
 | ------'''
 if self.erros==2:
 self.palavraescolhida["text"]="Errou!Você tem mais 4 chances"
 self.boneco['text']='''
 +---------------------+
 | |
 | +--+
 | / x x \\
 | | / \\ |
 | ------
 | ||
 | +----+
 | | |
 | | |
 | +----+'''
 if self.erros==3:
 self.palavraescolhida["text"]="Errou!Você tem mais 3 chances"
 self.boneco['text']='''
 +---------------------+
 | |
 | +--+
 | / x x \\
 | | / \\ |
 | ------
 | ||
 | +----+
 | X==| |
 | | |
 | +----+)'''
 if self.erros==4:
 self.palavraescolhida["text"]="Errou!Você tem mais 2 chances"
 self.boneco['text']='''
 +---------------------+
 | |
 | +--+
 | / x x \\
 | | / \\ |
 | ------
 | ||
 | +----+
 | X==| |==X
 | | |
 | +----+)'''
 if self.erros==5:
 self.palavraescolhida["text"]="Errou!Você tem mais 1 chances"
 self.boneco['text']='''
 +---------------------+
 | |
 | +--+
 | / x x \\
 | | / \\ |
 | ------
 | ||
 | +----+
 | X==| |==X
 | | |
 | +----+
 | ||
 | ||
 | /|'''
 if self.erros==6:
 self.palavraescolhida['text']="vc perdeu"
 self.boneco['text']='''
 +---------------------+
 | |
 | +--+
 | / x x \\
 | | / \\ |
 | ------
 | ||
 | +----+
 | X==| |==X
 | | |
 | +----+
 | || ||
 | || ||
 | /| |\
 
 '''
 self.jogarnovamente["state"]="normal"
 self.resposta["state"]="normal"
 tv2.set("")
 
 
 
 
raiz=Tk()
tv= StringVar(raiz)
tv2=StringVar(raiz)
tv3=StringVar(raiz)
Janela(raiz)
raiz.mainloop()

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais