Jogo da velha feito em Python

Para mostrar alguns exemplos do uso do Python no nosso curso de programação, criei uma versão em modo texto do famoso jogo da velha usando Python.O jogo trás muitas funcionalidades da linguagem que foram tratadas ao longo do curso, e também algumas técnicas que não foram tratadas, pois o objectivo do curso era começar do básico até ao avançado!Dentre as funções que o jogo trás, temos a geração de excepções por parte do usuário, formatação de strings, e outras. Abaixo vão os detalhes do jogo, e das funções usadas:

class PositionError(Exception): pass

Esta classe é a classe para capturar excepções no nosso jogo. Como excepções são classes, nós podemos criar uma classe para capturar certos tipos de excepção que desejamos. Para o nosso jogo, a excepção PositionError será lançada quando o usuário indicar uma posição invalida para jogar, pois no jogo da velha temos três linhas e três colunas, e se o jogador escolhe uma linha ou uma coluna que não existe, o jogo lançará esta excepção.

def desenha(m):print """----------------| %s | %s | %s |----------------| %s | %s | %s |----------------| %s | %s | %s |----------------""" %(m[0][0],m[0][1],m[0][2],m[1][0],m[1][1],m[1][2],m[2][0],m[2][1],m[2][2])

Esta função cuida da parte gráfica do jogo, pois é responsável por desenhar o tabuleiro do jogo na tela. Note que tem como argumento uma matriz3X3 e coloca os seus valores no tabuleiro

linha1=[' ',' ',' ']linha2=[' ',' ',' ']linha3=[' ',' ',' ']matriz=[linha1,linha2,linha3]

é a definição da matriz3X3, que é inicializada sem nenhum valor!!!

def joga(p):while 1:try:if p==1:x=(int(raw_input('Jogador 1 Escolha a linha a jogar')))-1y=(int(raw_input('Jogador 1 Escolha a coluna a jogar')))-1if matriz[x][y]==' ':matriz[x][y]='X'player=0breakelse:raise PositionErrorelse:x=int(raw_input('Jogador 2 Escolha a linha a jogar'))y=int(raw_input('Jogador 2 Escolha a coluna a jogar'))if matriz[x][y]==' ':matriz[x][y]='0'player=1breakelse:raise PositionErrorexcept IndexError:print 'Valores fora do intervalo. Escolha entre 1 e 3 \n \n'except PositionError:print 'Esta posicao ja foi jogada, por favor escolha outra \n \n'except ValueError:print 'Introduza um valor inteiro entre 1 e 3!!! \n \n'return player

Função que controla as opções do jogador, e preenche a matriz. Se os valores estiverem fora do intervalo, lança a excepção PositionError, atravez da palavra reservada raise. Note também a captura de várias excepções em apenas um bloco try.Ela preenche as jogadas do jogador 1 com X e do jogador 2 com 0. a variável player controla qual é o jogador a jogar em um determinado instante.

def verifica(m,situacao):flag=Falseif (m[0][0]==m[0][1]==m[0][2]=='X'):print 'Jogador 1 ganhou'situacao=Trueelif (m[1][0]==m[1][1]==m[1][2]=='X'):print 'Jogador 1 ganhou'situacao=Trueelif (m[2][0]==m[2][1]==m[2][2]=='X'):print 'Jogador 1 ganhou'situacao=Trueelif (m[0][0]==m[1][0]==m[2][0]=='X'):print 'Jogador 1 ganhou'situacao=Trueelif (m[0][1]==m[1][1]==m[2][1]=='X'):print 'Jogador 1 ganhou'situacao=Trueelif (m[0][2]==m[1][2]==m[2][2]=='X'):print 'Jogador 1 ganhou'situacao=Trueelif (m[0][0]==m[1][1]==m[2][2]=='X'):print 'Jogador 1 ganhou'situacao=Trueelif (m[0][2]==m[1][1]==m[2][0]=='X'):print 'Jogador 1 ganhou'situacao=Trueelif (m[0][0]==m[0][1]==m[0][2]=='0'):print 'Jogador 1 ganhou'situacao=Trueelif (m[1][0]==m[1][1]==m[1][2]=='0'):print 'Jogador 1 ganhou'situacao=Trueelif (m[2][0]==m[2][1]==m[2][2]=='0'):print 'Jogador 1 ganhou'situacao=Trueelif (m[0][0]==m[1][0]==m[2][0]=='0'):print 'Jogador 1 ganhou'situacao=Trueelif (m[0][1]==m[1][1]==m[2][1]=='0'):print 'Jogador 1 ganhou'situacao=Trueelif (m[0][2]==m[1][2]==m[2][2]=='0'):print 'Jogador 1 ganhou'situacao=Trueelif (m[0][0]==m[1][1]==m[2][2]=='0'):print 'Jogador 1 ganhou'situacao=Trueelif (m[0][2]==m[1][1]==m[2][0]=='0'):print 'Jogador 1 ganhou'situacao=Trueelse:for i in matriz:for j in i:if j==' ':flag=Trueif flag==False:print 'Empate'situacao=Truereturn situacao

Afunção verifica é chamada depois de cada jogada, e serve para verificar se um dos jogadores ganhou o jogo segundo as regras do jogo da velha, ou então se já não existem casas vazias por jogar, neste caso, o jogo termina em empate.

def apaga():for i in range(0,25):print '\b'

Esta função “limpa” a tela depois de cada jogada. Na verdade ela enche a tela de espa;os vazios até que a jogada anterior saia do alcance da tela.

player=1situacao=Falsewhile 1:apaga()desenha(matriz)player=joga(player)print playerdesenha(matriz)situacao=verifica(matriz,situacao)if situacao:raw_input('Pressione qualquer tecla para sair')break

O loop principal do jogo. O ciclo será executado até que se encontre um vencedor ou então um empate, quando a função verifica retornar o valor True.Note qua a variável player é inicializada com 1, o que indica que o jogo vai começar pelo jogador 1. Inicialize com outro valor( 0 de preferência para começar pelo jogador 2).Clique aqui para baixar o jogo da velha feito em Python

Receba nossas actualizações por email

Ver Campanhas anteriores.

(Visited 600 times, 1 visits today)
Share