Last active
October 6, 2016 22:34
-
-
Save nenodias/3bea7fe0b0f791ffd8cae24bb7cce037 to your computer and use it in GitHub Desktop.
Jogo da Forca
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # -*- 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