Ir ao conteúdo
  • Cadastre-se

Python Jogo da Velha PYTHON


Posts recomendados

Gente, como eu posso melhorar a lógica da minha máquina? (JogadaAI) visto que toda vez que ela vai jogar ela só marca em lugares disponíveis e aleatórios… raramente faz uma vitória…

 

import random
import sys
import os
def restart_program():
    python = sys.executable
    os.execl(python, python, * sys.argv)

tab = [0, 1, 2, 
       3, 4, 5, 
       6, 7, 8]

def desenhar():
  print(tab[0], '|', tab[1], '|', tab[2])
  print('-' * 9)
  print(tab[3], '|', tab[4], '|', tab[5])
  print('-' * 9)
  print(tab[6], '|', tab[7], '|', tab[8])

def jogadaHumano():
  while True:
    posicao = input('Escolha a posição:')
    n = int(posicao)

    if(tab[n] == 'X' or tab[n] == 'O'):
      print('Posiçao inválida')
      continue
    else:
      break
    

  tab[n] = 'O'

def jogadaAI():
  
  print('Jogada da AI')
  opcoesValidas = []

  for i in range(0, 8):
    if(tab[i] != 'X' and tab[i] != 'O'):
      opcoesValidas.append(i)

  opcao = random.choice(opcoesValidas)
  tab[opcao] = 'X'

def ganhou(turno):
  if(
      # Avaliando as linhas
      (tab[0] == turno and tab[1] == turno and tab[2] == turno) or
      (tab[3] == turno and tab[4] == turno and tab[5] == turno) or
      (tab[6] == turno and tab[7] == turno and tab[8] == turno) or

      # Avaliando as colunas
      (tab[0] == turno and tab[3] == turno and tab[6] == turno) or
      (tab[1] == turno and tab[4] == turno and tab[7] == turno) or
      (tab[2] == turno and tab[5] == turno and tab[8] == turno) or

      # Avaliando as diagonais
      (tab[0] == turno and tab[4] == turno and tab[8] == turno) or
      (tab[2] == turno and tab[4] == turno and tab[6] == turno)
  ):
    return True
  else:
    return False


desenhar()

turnoHumano = True

for i in range(0, 9):
  if turnoHumano:
    jogadaHumano()

    if(ganhou('O')):
      desenhar()
      print('Jogador Humano ganhou')
      jogardnv = input("Deseja jogar novamente? Se sim responda 's' ou nao responda 'n'")
      if jogardnv == "s":
         restart_program()
      else:   
        break
  else:
    jogadaAI()

    if(ganhou('X')):
      desenhar()
      print('AI ganhou')
      jogardnv = input("Deseja jogar novamente? Se sim responda 's' ou nao responda 'n'")
      if jogardnv == "s":
        restart_program()
      else:
        break
   
  desenhar()
  turnoHumano = not turnoHumano

  if(i == 8):
    print('Deu velha')
    print('Fim do jogo.')
    jogardnv = input("Deseja jogar novamente? Se sim responda 's' ou nao responda 'n'")
    if jogardnv == "s":
      print ("carregando jogo...")
      restart_program()
    else:
        break

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Em 29/03/2020 às 15:20, Bruna Ferreia disse:

Gente, como eu posso melhorar a lógica da minha máquina? (JogadaAI) visto que toda vez que ela vai jogar ela só marca em lugares disponíveis e aleatórios… raramente faz uma vitória…

 

@Bruna Ferreia, um como que poderia fazer é pensar no o que a máquina está fazendo no momento, o que ela poderia fazer. 

 

O que a máquina está fazendo no momento? pelo que eu entendi, está verificando as casas disponíveis e sorteando uma delas para jogar. Como verificado, esta estratégia é eficiente, mas não é eficaz. Daí, você poderia verificar outro o que a máquina poderia fazer para jogar de uma forma melhor... após, tentar desenvolver um como para este o que implementando em Python.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...