Source code for velha.classesvec

# -*- coding : utf-8 -*-
# SPDX-License-Identifier: GPL-3.0-or-later
""" Jogo para ensino de programação Python.

.. codeauthor:: Carlo Oliveira <carlo@ufrj.br>

Changelog
---------
.. versionadded::    20.11.b0
        Usando uma classe para Casa e uma para Velha.

"""
[docs]class Casa(): """Representa uma casa do jogo da velha. Referências: casa Célula contendo o marcador do jogador. """ def __init__(self): self.casa = None """Uma casa vazia contendo None. """
[docs] def joga(self, jogador): """Preecha a casa com o maracdor de um jogador. :param jogador: Marcador do jogador para preencher a casa. """ self.casa = jogador
[docs] def mostra(self): """Retorna o marcador do jogador. :return: Marcador do jogador usado para preencher a casa. """ return self.casa
[docs]class Velha(): """Representa o jogo da velha. Referências: casa Lista contendo as casas do jogo. jogador Marcador do jogador com a vez corrente. """ ESCOLHA = "Escolha uma casa do tabuleiro" """Frase para pedir uma jogada.""" FINAL = "Situação final do tabuleiro" """Frase indicando o fim o do jogo.""" TABULEIRO = """ {} {} | {} | {} ----------- {} | {} | {} ----------- {} | {} | {} """ """Display mostrando a situação atual do tabuleiro.""" def __init__(self): self.casa = [Casa() for _ in range(9)] """Usamos uma compressão de lista para criar nove instâncias da classe **Casa**. """ self.jogador = "x" """O jogador com a peça x começa"""
[docs] def joga(self): """Executa o joga da velha. Referências: jogada Índice da casa a ser preenchida. display_das_casas Apresentação do conteúdo de cada casa: o índice se vazia ou marcador se cheia. """ while True: display_das_casas = [a_casa.mostra() or posicao for posicao, a_casa in enumerate(self.casa)] if all([marcador.mostra() for marcador in self.casa]): print(Velha.TABULEIRO.format(Velha.FINAL, *display_das_casas)) """Mostra a situação final do tabuleiro.""" break jogada = str(input(Velha.TABULEIRO.format(Velha.ESCOLHA, *display_das_casas))) """Mostra a situação atual do tabuleiro e pede a próxima jogada.""" casa_escolhida = self.casa[int(jogada)].mostra() """Obtem a peça que está colocada na casa escolhida""" if casa_escolhida: """Se a casa escolhida já está ocupada volta a fazer a pergunta.""" continue self.casa[int(jogada)].joga(self.jogador) """ Coloca a peça na posição pedida pela jogada.""" self.jogador = "o" if self.jogador == "x" else "x" """Troca a vez para o outro jogador."""
if __name__ == '__main__': Velha().joga()