Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Jogador 1 sempre vencendo

Boa tarde, Estou programando uma espécie de jogo para um trabalho da faculdade que seu primeiro modo consiste em uma disputa jogador vs jogador onde quem remover a última peça da "mesa" vence. Porém, por algum motivo o jogador 1 sempre está vencendo, mesmo que o jogador 2 tenha tirado a última peça. Gostaria entender meu erro.

Desde já, agradeço.

#MENU#

print("-@----------------------------------------------@-")
print("Por favor, escolha um dos seguintes modos de jogo:")
print("       -{1}- Jogador VS Jogador (PVP)")
print("       -{2}- Jogador VS Computador (PVE)")
print("-@----------------------------------------------@-")
modo = int(input("Modo de jogo: "))

#MODO PVP#

if modo == 1:
    print("Você selecinou : Jogador vs Jogador")
    n = int(input("Insira a quantidade inicial de peças na mesa: "))
    m = int(input("Insira a quantidade máxima de peças a serem retiradas por rodada: "))
    print("INICIAR JOGO!")
    num_rodada = 1

    while n > 0:
        if num_rodada % 2 != 0:
            print("-@----------------------------------------------@-")
            print("-> RODADA ", num_rodada, " <-")
            print("Vez de : Jogador 1")
            print("Peças na mesa: ", n)
            pecas_a_serem_retiradas = int(input("Quantas peças retirar? "))
            if pecas_a_serem_retiradas <= m and pecas_a_serem_retiradas >= 1:
                print("Jogador 1 removeu ", pecas_a_serem_retiradas, " peças.")
                n = n - pecas_a_serem_retiradas
                print("Peças restantes : ", n)
                num_rodada = num_rodada + 1
            else:
                print("Por favor, insira um numero ENTRE 1 e ", m)
        else:
            print("-@----------------------------------------------@-")
            print("-> RODADA ", num_rodada, " <-")
            print("Vez de : Jogador 2")
            print("Peças na mesa: ", n)
            pecas_a_serem_retiradas = int(input("Quantas peças retirar? "))
            if pecas_a_serem_retiradas <= m and pecas_a_serem_retiradas >= 1:
                print("Jogador 2 removeu ", pecas_a_serem_retiradas, " peças.")
                n = n - pecas_a_serem_retiradas
                print("Peças restantes : ", n)
                num_rodada = num_rodada + 1
            else:
                print("Por favor, insira um numero ENTRE 1 e ", m)
        if n <= 0 :
            if num_rodada % 2 == 0:
                print("Jogador 2 venceu!")
                print("FIM DE JOGO")
            else :
                print("Jogador 1 venceu!")
                print("FIM DE JOGO")
2 respostas
solução!

Olá Gabriel.

O problema do seu código é que toda vez que você exibe a mensagem:

-> RODADA  n_rodada  <-
Vez de : Jogador 1 ou 2
Peças na mesa:  n
Quantas peças retirar? m
Jogador 1 ou 2 removeu  x  peças.

Você acrescenta uma rodada. Assim na última verificação do if n <= 0 : , a variável num_rodada está com seu valor acrescido de 1 a mais que o valor real da rodada.

Segue o código modificado.

#MENU#

print("-@----------------------------------------------@-")
print("Por favor, escolha um dos seguintes modos de jogo:")
print("       -{1}- Jogador VS Jogador (PVP)")
print("       -{2}- Jogador VS Computador (PVE)")
print("-@----------------------------------------------@-")
modo = int(input("Modo de jogo: "))

#MODO PVP#

if modo == 1:
    print("Você selecinou : Jogador vs Jogador")
    n = int(input("Insira a quantidade inicial de peças na mesa: "))
    m = int(input("Insira a quantidade máxima de peças a serem retiradas por rodada: "))
    print("INICIAR JOGO!")
    num_rodada = 1

    while n > 0:
        if num_rodada % 2 != 0:
            print("-@----------------------------------------------@-")
            print("-> RODADA ", num_rodada, " <-")
            print("Vez de : Jogador 1")
            print("Peças na mesa: ", n)
            pecas_a_serem_retiradas = int(input("Quantas peças retirar? "))
            if pecas_a_serem_retiradas <= m and pecas_a_serem_retiradas >= 1:
                print("Jogador 1 removeu ", pecas_a_serem_retiradas, " peças.")
                n = n - pecas_a_serem_retiradas
                print("Peças restantes : ", n)
            else:
                print("Por favor, insira um numero ENTRE 1 e ", m)
        else:
            print("-@----------------------------------------------@-")
            print("-> RODADA ", num_rodada, " <-")
            print("Vez de : Jogador 2")
            print("Peças na mesa: ", n)
            pecas_a_serem_retiradas = int(input("Quantas peças retirar? "))
            if pecas_a_serem_retiradas <= m and pecas_a_serem_retiradas >= 1:
                print("Jogador 2 removeu ", pecas_a_serem_retiradas, " peças.")
                n = n - pecas_a_serem_retiradas
                print("Peças restantes : ", n)
            else:
                print("Por favor, insira um numero ENTRE 1 e ", m)
        if n <= 0:
            if num_rodada % 2 == 0:
                print("Jogador 2 venceu!")
                print("FIM DE JOGO")
            else:
                print("Jogador 1 venceu!")
                print("FIM DE JOGO")
        num_rodada = num_rodada + 1

Muito obrigado pela ajuda!