• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

JoaoRodrigues

[Python] Jogo da Forca

7 mensagens neste tópico

Deixo aqui a minha primeira contribuição decente (ou não) em Python :D Provavelmente o código podia estar mais claro (tem comentários a mais porque foi para eu me explicar a mim mesmo o que estava a fazer e para delinear o meu pensamento) e podia usar outras funções ou menos variáveis. Depois se lhe der mais algum upgrade, posto aqui :)

Algumas ideias a mais para isto?

By the way, para funcionar, têm que criar algures um ficheiro *.txt com uma lista de palavras. Algo tipo isto:

banana

maracuja

abacaxi

...

...

E sem mais demoras, a minha primeira experiência:

# Jogo da Forca

# Modulos a importar
import sys # Para quebrar o jogo a meio se quiser
import string # para manipular as palavras retiradas da lista
import random # para escolher a palavra

# Ir buscar ao ficheiro das palavras uma palavra para o utilizador adivinhar

# Define-se o caminho do ficheiro txt onde esta uma palavra por linha!
caminho = 'C:\Documents and Settings\joaorodrigues\My Documents\Joao - Python\Dia 4\hangman.txt'

# Abre-se o ficheiro
abrir_ficheiro = open(caminho)

# Le-se o ficheiro TODO para uma lista
base_de_dados = abrir_ficheiro.readlines()

# Criar uma funcao com o jogo para ser mais facil gerir

def novo_jogo():
   print 'Bem-vindo ao Jogo da Forca\n\n'
   print 'Para iniciar um jogo, prima 1. Para sair, prima 0\n'
   escolha = int(raw_input('--> '))
   if not escolha:
       print '\nAdeus!\n'
       sys.exit() # No IDLE da erro mas sai .. nao percebo porque
   # Escolha de palavra do meio das retiradas da lista
   palavra_inteira = random.choice(base_de_dados)
   # Explode-se a string da palavra para uma lista
   palavra_lista = []
   for char in range(len(palavra_inteira)):
       if palavra_inteira[char]!='\n':
           palavra_lista.append(palavra_inteira[char]) # Para retirar a quebra de linha que resulta da leitura do ficheiro
   # Definir palavra a mostrar ao utilizador
   palavra_utilizador = []
   for char in range(len(palavra_inteira)):
       if palavra_inteira[char]!='\n': # Para retirar a quebra de linha que resulta da leitura do ficheiro
           palavra_utilizador.append('_ ')
   #Mostrar ao utilizador o numero de letras da palavra
   print '\nA palavra tem',len(palavra_lista),'letras'
   tentativas = 6
   acertou_antes = 0
   acertou_agora = 0
   # Tentativas
   while 1:
       if tentativas == 0:
           break
       elif palavra_lista == palavra_utilizador:
           break
       acertou_antes = acertou_agora
       print '\nFaltam',len(palavra_lista)-int(acertou_agora),'letras!'
       print 'Faltam',tentativas,'tentativa(s)'
       # Mostrar ao utilizador a palavra com os espacos
       mostrar_palavra = ''
       for char in range(len(palavra_utilizador)):
           mostrar_palavra = mostrar_palavra+palavra_utilizador[char]
       print mostrar_palavra
       # Pedir ao utilizador uma letra minuscula (KISS)
       letra_utilizador = raw_input('Digite uma letra em minusculas: ')
       # Comparar a letra com as na palavra_lista
       for char in range(len(palavra_lista)):
           if palavra_lista[char] == letra_utilizador:
               palavra_utilizador[char] = str(letra_utilizador)
               acertou_agora += 1
       if acertou_antes == acertou_agora:
           tentativas-= 1
   if tentativas!=0:
       print 'Parabens! Voce Acertou na palavra!'
   else:
       print 'Perdeu! Pode ser que acerte para a proxima!'

# Comecar um jogo novo
choice = 's'
while choice == 's':
   novo_jogo()
   choice = str(raw_input('Deseja jogar outra vez? [s]im/[n]ao: '))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

caminho = 'C:\Documents and Settings\joaorodrigues\My Documents\Joao - Python\Dia 4\hangman.txt'

Nessa linha, ou metes o r antes da plica, ou escapas os backslashes ou usas barras normais. ;)

Anyway, podias era pedir a path através de argumento:

import sys
try:
    caminho = sys.argv[1]
except IndexError:
    print "Especifique um ficheiro assim: %s ficheiro" % (sys.argv[0])
    sys.exit(0)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas ele funcionou assim...

Eu não pus a path como um argumento porque é para não estar sempre a pedir o caminho. Se calhar faço antes assim: faço o código para ele ir buscar a directoria actual do source code e como "provavelmente" a lista de palavras vai la estar (tava a pensar em ser eu a dar uma se decidir dar o jogo a alguem) para concatenar o nome do ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então:

import sys
try:
    caminho = sys.argv[1]
except IndexError:
    caminho = "./hangman.txt"

;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bah, já me baralhaste com esses metodos do sys ;) Tenho que ir ver esse ;) Anyways, este jogo é pa cromos como eu e tu que sabem mexer ali.. e mesmo que não saibam, tá lá um comment a dizer.. E agora que penso nisso...que é que joga a forca? ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hum, ok. Got it. Quando me der na telha, mudo isso ;) E acrescento mais umas coisas como um grau de dificuldade e ajudas. Thanks pelo input ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora