def ChecaVez(self, request, context): global salas global next global prev global imFirst nomeSala = request.nome hashSala = int(sha1(nomeSala.encode('utf-8')).hexdigest(), 16) % 360 if imFirst: if (0 <= hashSala <= myHashRange[0]) or (myHashRange[1] <= hashSala <= 359): tabuleiro = salas[nomeSala][0] numJogada = salas[nomeSala][1] if (numJogada % 2) == 0: return communicate_pb2.Vez(vez=salas[nomeSala][3], tabuleiro=tabuleiro) return communicate_pb2.Vez(vez=salas[nomeSala][4], tabuleiro=tabuleiro) else: response = next.ChecaVez(communicate_pb2.NomeSala(nome=request.nome)) return communicate_pb2.Vez(vez=response.vez, tabuleiro=response.tabuleiro) else: if myHashRange[1] >= hashSala >= myHashRange[0]: tabuleiro = salas[nomeSala][0] numJogada = salas[nomeSala][1] if (numJogada % 2) == 0: return communicate_pb2.Vez(vez=salas[nomeSala][3], tabuleiro=tabuleiro) return communicate_pb2.Vez(vez=salas[nomeSala][4], tabuleiro=tabuleiro) elif hashSala > myHashRange[1]: response = next.ChecaVez(communicate_pb2.NomeSala(nome=request.nome)) return communicate_pb2.Vez(vez=response.vez, tabuleiro=response.tabuleiro) elif hashSala < myHashRange[0]: response = prev.ChecaVez(communicate_pb2.NomeSala(nome=request.nome)) return communicate_pb2.Vez(vez=response.vez, tabuleiro=response.tabuleiro)
def ReqNum(self, request, context): global salas global next global prev global imFirst nomeSala = request.nome hashSala = int(sha1(nomeSala.encode('utf-8')).hexdigest(), 16) % 360 if imFirst: if (0 <= hashSala <= myHashRange[0]) or (myHashRange[1] <= hashSala <= 359): numJogadores = salas[nomeSala][2] return communicate_pb2.NumJogadores(numJogadores=numJogadores) else: response = next.ReqNum(communicate_pb2.NomeSala(nome=request.nome)) return communicate_pb2.NumJogadores(numJogadores=response.numJogadores) else: if myHashRange[1] >= hashSala >= myHashRange[0]: numJogadores = salas[nomeSala][2] return communicate_pb2.NumJogadores(numJogadores=numJogadores) elif hashSala > myHashRange[1]: response = next.ReqNum(communicate_pb2.NomeSala(nome=request.nome)) return communicate_pb2.NumJogadores(numJogadores=response.numJogadores) elif hashSala < myHashRange[0]: response = prev.ReqNum(communicate_pb2.NomeSala(nome=request.nome)) return communicate_pb2.NumJogadores(numJogadores=response.numJogadores)
def eh_minha_vez(stub, user): global tabuleiro global nomeSala response_s = stub.ChecaVez(communicate_pb2.NomeSala(nome=nomeSala)) vez = response_s.vez tabuleiro = response_s.tabuleiro return vez == user
def checaVencedor(stub): global nomeSala global tabuleiro response = stub.ChecaVencedor(communicate_pb2.NomeSala(nome=nomeSala)) if response.vencedor == 'empate': mostrarTabuleiro(tabuleiro) print('O jogo empatou...') print('\nFinalizando jogo...') exit(1) if response.vencedor != 'ninguem': mostrarTabuleiro(tabuleiro) print('O vencedor eh ' + response.vencedor) print('\nFinalizando jogo...') exit(1)
def ChecaVencedor(self, request, context): global imFirst global salas global next global prev nomeSala = request.nome hashSala = int(sha1(nomeSala.encode('utf-8')).hexdigest(), 16) % 360 if imFirst: if (0 <= hashSala <= myHashRange[0]) or (myHashRange[1] <= hashSala <= 359): vencedor = winner(nomeSala) if vencedor is not None: desconectaUsuarios(nomeSala) salas[nomeSala][5] = vencedor return communicate_pb2.Vencedor(vencedor=vencedor) else: return communicate_pb2.Vencedor(vencedor='ninguem') else: response = next.ChecaVencedor(communicate_pb2.NomeSala(nome=request.nome)) return communicate_pb2.Vencedor(vencedor=response.vencedor) else: if myHashRange[1] >= hashSala >= myHashRange[0]: vencedor = winner(nomeSala) if vencedor is not None: desconectaUsuarios(nomeSala) salas[nomeSala][5] = vencedor return communicate_pb2.Vencedor(vencedor=vencedor) else: return communicate_pb2.Vencedor(vencedor='ninguem') elif hashSala > myHashRange[1]: response = next.ChecaVencedor(communicate_pb2.NomeSala(nome=request.nome)) return communicate_pb2.Vencedor(vencedor=response.vencedor) elif hashSala < myHashRange[0]: response = prev.ChecaVencedor(communicate_pb2.NomeSala(nome=request.nome)) return communicate_pb2.Vencedor(vencedor=response.vencedor)
def run(): # Variaveis iniciais global tabuleiro global user global nomeSala # user = '' channel = grpc.insecure_channel(sys.argv[1] + ':' + sys.argv[2]) stub = communicate_pb2_grpc.CommunicateStub(channel) num_jogadores = 1 jogar_ = False while not jogar_: # Menu show_menu() opcao = inputOpcao() # Login jogar_ = handleOption(opcao, stub) # Checa se tem um oponente while num_jogadores < 2: response_s = stub.ReqNum(communicate_pb2.NomeSala(nome=nomeSala)) num_jogadores = response_s.numJogadores time.sleep(1) # Jogo # na hora de jogar agora, ele tem q passar o nome da sala q esta jogando while True: if eh_minha_vez(stub, user): checaVencedor(stub) mostrarTabuleiro(tabuleiro) tabuleiro = jogar(stub) checaVencedor(stub) mostrarTabuleiro(tabuleiro) print('Aguarde sua vez...') time.sleep(1)