Skip to content

Instantly share code, notes, and snippets.

@nenodias
Last active October 6, 2016 22:34
Show Gist options
  • Select an option

  • Save nenodias/3bea7fe0b0f791ffd8cae24bb7cce037 to your computer and use it in GitHub Desktop.

Select an option

Save nenodias/3bea7fe0b0f791ffd8cae24bb7cce037 to your computer and use it in GitHub Desktop.
Jogo da Forca
# -*- coding: utf-8 -*-
import os
import sys
import socket
from threading import Thread
class Jogo:
def __init__(self, socket=None):
self.palavra = 'otorrinolaringologista'
self.mascara = len(self.palavra) * '_'
self.letras = []
self.erros = 0
self.GAME_OVER = 6
self.tamanho = len(self.palavra)
self.socket = socket
def fprint(self, mensagem):
if not self.socket:
print(mensagem)
else:
self.socket.send('{0}\n'.format(mensagem))
def finput(self, mensagem):
valor = None
if not self.socket:
valor = raw_input(mensagem)
else:
valor = self.socket.recv(1024).strip()
return valor
def inicio(self):
self.fprint('Uma palavra com {0} letras'.format( self.tamanho ) )
lista_copia = []
for letra_palavra in self.palavra:
if not letra_palavra in self.letras:
lista_copia.append('_')
else:
lista_copia.append(letra_palavra)
copia = ''.join(lista_copia)
self.fprint(copia)
self.desenhar()
def desenhar(self):
cabeca = '()' if self.erros >= 1 else ' '
braco_esq = '/' if self.erros >= 3 else ' '
corpo = '||' if self.erros >= 2 else ' '
braco_dir = '\\' if self.erros >= 4 else ' '
perna_esq = '/' if self.erros >= 5 else ' '
perna_dir = '\\' if self.erros >= 6 else ' '
forca = '''
___
| |
| {cabeca}
| {braco_esq}{corpo}{braco_dir}
| {perna_esq}{perna_dir}
_
'''.format(
cabeca=cabeca,
braco_esq=braco_esq,
corpo=corpo,
braco_dir=braco_dir,
perna_esq=perna_esq,
perna_dir=perna_dir
)
self.fprint(forca)
def letra_ja_escolhida(self, letra):
if not letra in self.letras:
self.letras.append(letra)
return False
else:
return True
def errou(self, letra):
if not letra in self.palavra:
self.erros += 1
return True
return False
def is_vitoria(self):
copia = self.palavra
for letra in self.letras:
copia = copia.replace(letra,'')
return len(copia) == 0
def is_derrota(self):
return self.erros == self.GAME_OVER
def jogar(self):
while True:
self.inicio()
if self.is_vitoria():
self.fprint('Parabéns você acertou!')
self.fprint('A palavra é {0}'.format(self.palavra) )
self.fprint('Letras: {0}'.format(self.letras) )
break
if self.is_derrota():
self.fprint('Você foi enforcado!!!')
break
letra = self.finput('Escolha uma letra:')
if self.letra_ja_escolhida(letra):
self.fprint('Letra já escolhida')
continue
if self.errou(letra):
self.fprint('Letra inválida')
def rodar(conexao):
try:
Jogo(socket=conexao).jogar()
conexao.send('Fim de jogo')
except:
pass
finally:
conexao.close()
if __name__ == '__main__':
try:
conexao = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conexao.bind( ('localhost', 2222) )
conexao.listen(10)
while True:
conn, addr = conexao.accept()
Thread(target=rodar, args=([conn])).start()
except Exception as e:
pass
finally:
try:
conexao.close()
except Exception as ex:
pass
os._exit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment