Jogo da velha, python

2 respostas Resolvido
python
L

Sou novo em python e estou tentando fazer um jogo da velha, eu até soube fazer a tabela e preencher corretamente a tabela do jogo, mas eu não estou sabendo fazer o código reconhecer quando algum jogador ganhou. Com esse código, vocês têm alguma ideia de como fazer isso?

#o jogo da velha
#essa 1ª parte é somente uma demonstração dos movimentos:
print('Movimentos'.center(11))
ex_screen = [[[' 1 '],[' 2 '],[' 3 '],[' 4 '],[' 5 '],[' 6 '],[' 7 '],[' 8 '],[' 9 ']],['\n---+---+---\n']]
print(f'{ex_screen[0][0][0]}|{ex_screen[0][1][0]}|{ex_screen[0][2][0]}{ex_screen[1][0]}{ex_screen[0][3][0]}|{ex_screen[0][4][0]}|{ex_screen[0][5][0]}{ex_screen[1][0]}{ex_screen[0][6][0]}|{ex_screen[0][7][0]}|{ex_screen[0][8][0]}')
#aqui, o 1º jogador pode escolher ser X ou O:
plr = input(escolha X ou O: ).upper().strip()
#esse i coloquei apenas para informar qual partida o jogo está:
i=0
#aqui é a tabela de fato que vai atualizando a cada jogada:
screen, sline = [’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘],[’\n---+---+---\n’]

#aqui, começa o jogo de fato:
while True:
    i+=1
    print(f’{i}ª Jogada.center(11))
    #aqui, o jogador informa a posição que deseja ficar:
    pos = int(input(fposição para {plr}: '))
    #se o jogador digitar zero o jogo acaba:
    if pos == 0:
        break
    #aqui verifica se a posição escolhida está disponível:
    if screen[pos-1].isspace() == False or pos > 9 or pos < 1:
        while screen[pos-1].isspace() == False:
            print(posição  ocupada!’)
            pos = int(input(fescolha novamente para {plr}: ))
        while pos > 9 or pos < 0:
            print(posição inválida!’)
            pos = int(input(fescolha novamente para {plr}: ))
        screen.insert(pos-1, f {plr} )
        del screen[pos]
    else:
        screen.insert(pos-1, f {plr} )
        del screen[pos]
    #aqui apresenta a tabela atualizada com as posições dos jogadores
    print(f’{screen[0]}|{screen[1]}|{screen[2]}{sline[0]}{screen[3]}|{screen[4]}|{screen[5]}{sline[0]}{screen[6]}|{screen[7]}|{screen[8]}’)

print(Fim do Jogo)

Eu tentei fazer o código reconhecer quem ganhou usando listas mas não conseguir.
quem puder me ajudar, de já agradeço.

2 Respostas

J
Solucao aceita

Cara, pensei em criar uma lista com as sequências corretas para se ganhar, outra com a jogadas do player e por fim percorre a primeira, verificando se o player já executou a combinação. Segue exemplo:

Listas para validação:

# Combinações que declara um vencedor
winner_mapper = [
    # Horizontal
    [ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9],
    # Vertical
    [ 1, 4, 7], [ 2, 5, 8], [ 3, 6, 9],
    # Diagonal
    [ 1, 5, 9], [ 3, 5, 7]   
]

# Cria uma lista das jogadas do player
player = []

Função que verifica o ganhador:

# Verifica se alguma combinação do player é vencedora
def checkWinner(player):        
    for seq in winner_mapper:
        if seq[0] in player and seq[1] in player and seq[2] in player:
            return True

    return False

No seu loop:

# Validar a jogada do player
player.append(pos)

# Verifica se o player ganhou
if checkWinner(player):
    print ("Aí sim heim cara?!")
    exit()
L

vlw cara! era justamente isso que eu tava precisando. só precisei fazer uma correção, pois eu to usando só uma variável para os dois jogadores que é mudado sempre entre X e O no final do programa, daí eu precisei mudar a ´primeira lista:
player = []
para:
plrx, plro = [], []
e no final a verificação ficou sendo:

if plr == 'X':
        plrx.append(pos)
    elif plr == 'O':
        plro.append(pos)
    if checkWinner(plrx):
        print (f'jogador X venceu!')
        exit()
    elif checkWinner(plro):
        print (f'jogador O venceu!')
        exit()

ao invés de:

player.append(pos)
if checkWinner(player):
    print ("Aí sim heim cara?!")
    exit()

mto obg!!!

Criado 23 de junho de 2020
Ultima resposta 25 de jun. de 2020
Respostas 2
Participantes 2