Jogo da Velha em Python
Lógica do jogo da velha
Vamos usar uma matriz (lista dentro de lista) de tamanho 3x3 de inteiros.Um jogador vai escolher a linha e a coluna no tabuleiro, para jogar.
Se for o jogador 1, vai assinalar um X.
Se for o jogador 2, vai assinalar um O.
Porém, só pode inserir um X ou O se aquela posição estiver vazia.
Cada vez que o jogador joga, deve verificar se alguma linha, coluna ou diagonal foi preenchida, terminando o jogo, avisando quem ganhou e em quantas rodadas.
O Tabuleiro
Inicializamos o tabuleiro com valores iguais a 0:board= [ [0,0,0], [0,0,0], [0,0,0] ]
Também podemos inicializar fazendo:
board = [ [0 for i in range(3)] for j in range(3)]
Em seguida, o código chama a função menu().
O menu
Criamos uma variável chamada continuar, com valor inicial 1.Enquanto esse valor não for nulo, um laço while vai continuar perguntando se o jogador deseja jogar novamente, novamente e novamente.
Exibindo o tabuleiro do jogo da velha
Na função exibe() vamos imprimir o tabuleiro.
Quando o jogador 1 joga, insere o número inteiro 1 em um local do tabuleiro.
Se o jogador 2 joga, insere o número inteiro -1 em um local do tabuleiro.
Para exibirmos, vamos usar dois laços for aninhados.
O primeiro 'cuida' da linha e o segundo cuida das colunas.
Quando nos deparamos com o valor 0 no tabuleiros, mostramos: __
Para simbolizar que está vazio.
Se encontrar o número 1, printamos o caractere X.
Se encontrar o número -1, printamos o caractere O.
O jogo
A variável jogada é que vai contabilizar o número de rodadas. Obviamente, inicia com zero.Essa variável vai ser incrementada de um em um, a cada rodada.
Se pegarmos o resto dessa divisão dessa variável por 2, teremos valor 0 e 1 alternando.
Se somarmos 1, teremos valores 1 e 2 alternando. Vamos avisar ao usuário se é o jogador 1 ou jogador 2 através dessa lógica.
Ou seja, cada jogador é simbolizado por: (jogada%2 + 1)
Primeiro, exibimos o tabuleiro, chamando a função exibe().
A seguir, pede uma linha e uma coluna.
Detalhe: o usuário vai digitar 1, 2 ou 3, mas nosso tabuleiro tem as posições 0, 1 e 2. Ou seja, quando o usuário fornecer esses números, temos que subtrair o valor de 1.
Em seguida, testamos se o valor que ele assinalou está vazio, ou seja, se tem um 0 naquela posição do tabuleiro.
Se sim, insere um 1 caso seja vez do jogador um ou -1 se for o jogador dois.
Se não for 0 a posição do tabuleiro, cai no ELSE, avisamos que não pode e subtraímos 1 da variável jogada, pois lá embaixo essa variável é sempre incrementada.
Após cada jogada, chamamos a função ganhou() dentro de um teste condicional.
Essa função checa se alguma linha, coluna ou diagonal está completa.
Se sim, termina o jogo e mostra quem ganhou, em quantas rodadas, se foi linha, coluna ou diagonal que se completou, e exibimos o tabuleiro final.
Caso a função ganhou() retorne 0, é porque ninguém ganhou, incrementamos a variável jogada e o loop while roda novamente uma outra rodada com o outro jogador.
Quem ganha o jogo da velha
Dentro da função ganhou(), fazemos três checagens.Primeiro, se alguma linha tem soma de valor 3 ou -3, alguém ganhou e retornamos o valor 1.
Se alguma coluna tem soma 3 ou -3, alguém ganhou e retornamos o valor 2.
Por fim, somamos as diagonais, se alguma tiver valor 3 ou -3, retornamos o valor 3.
Se passar batido por esses testes, retornamos o valor 0, pra simbolizar que ninguém ganhou.
Código Python do Jogo da Velha
def menu(): continuar=1 while continuar: continuar = int(input("0. Sair \n"+ "1. Jogar novamente\n")) if continuar: game() else: print("Saindo...") def game(): jogada=0 while ganhou() == 0: print("\nJogador ", jogada%2 + 1) exibe() linha = int(input("\nLinha :")) coluna = int(input("Coluna:")) if board[linha-1][coluna-1] == 0: if(jogada%2+1)==1: board[linha-1][coluna-1]=1 else: board[linha-1][coluna-1]=-1 else: print("Nao esta vazio") jogada -=1 if ganhou(): print("Jogador ",jogada%2 + 1," ganhou apos ", jogada+1," rodadas") jogada +=1 def ganhou(): #checando linhas for i in range(3): soma = board[i][0]+board[i][1]+board[i][2] if soma==3 or soma ==-3: return 1 #checando colunas for i in range(3): soma = board[0][i]+board[1][i]+board[2][i] if soma==3 or soma ==-3: return 1 #checando diagonais diagonal1 = board[0][0]+board[1][1]+board[2][2] diagonal2 = board[0][2]+board[1][1]+board[2][0] if diagonal1==3 or diagonal1==-3 or diagonal2==3 or diagonal2==-3: return 1 return 0 def exibe(): for i in range(3): for j in range(3): if board[i][j] == 0: print(" _ ", end=' ') elif board[i][j] == 1: print(" X ", end=' ') elif board[i][j] == -1: print(" O ", end=' ') print() board= [ [0,0,0], [0,0,0], [0,0,0] ] menu()
Seu código está bem enxuto, o meu deu 300 linhas. Só a parte de verificar quem ganhou ficou cheio de if e else
ResponderExcluirfaltou a opção de empate
ResponderExcluirComo faço isso?
ExcluirGood!!
ResponderExcluir