예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
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
예제 #4
0
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)
예제 #5
0
    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)
예제 #6
0
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)