teste

mail@pastecode.io avatar
unknown
python
2 years ago
5.2 kB
5
Indexable
Never
# -*- coding: utf-8 -*-
"""ICA-SLI-2022-1-PP1-prova-P1-V1.0-FatoumataWS-LuaraRM.V2ipynb

Automatically generated by Colaboratory.

Original file is located at
    https://colab.research.google.com/drive/1Y-L6d-mxuHIXKajVfFlcj-GN3g2E_1vV
"""

"""Programa QuebraCabeca:Quebra-cabeca tradicional de 15 pecas."""
#
# 0Sera que falta algum import?
#
from random import choice
import board


def montarQuebraCabeca():
    """
    Construtor: Monta um tabuleiro 4x4 aleatoriamente.
    retorna uma lista que representa o tabuleiro
    """
    pecas = list(range(16))  # uma lista de 16 inteiros
    pecas[0] = " "  # forca a primeira posicao como casa vazia
    tabuleiro = []
    while pecas != []:  # 1enquanto a lista de pecas NAO esta vazia
        x = choice(pecas)  # choice: escolhe aleatoriamente uma peça
        tabuleiro += [x]  # 2aciciona ao tabuleiro
        del pecas[pecas.index(x)]  # remomve da lista inicial
    return tabuleiro


def transposta(b1):
    b2 = board.Board((4, 4))
    for i in range(4):
        for j in range(4):
            b2[j, i] = b1[i, j]
    return b2


def prepararSaida(tabuleiro):
    """
    Retorna uma string que representa o tabuleiro.
    Util para impressao.
    """
    # ...........................===>suas linhas de codigo

    tabela1 = board.Board((4, 4))
    tabela1.populate(tabuleiro)

    return transposta(tabela1)


def ganhou(tabuleiro):
    "Retorna True se as 15 primeiras casas contêm os números de 1 a 15"
    # ...........................===>suas linhas de codigo
    ganhou1 = [" ", ]
    ganhou2 = []

    bg = board.Board((4, 4))
    bg.populate(tabuleiro)
    bc = transposta(bg)
    arrayTab = []
    for i in range(4):
        for j in range(4):
            arrayTab.append(bc[i,j])
    for i in range(15):
        ganhou1.append(i+1)
        ganhou2.append(i+1)
    ganhou2.append(" ")
    if arrayTab == ganhou1 or arrayTab == ganhou2:

        return True
    else:
        
        return False



ganhou([2, ' ', 8, 11, 15, 4, 12, 1, 5, 13, 10, 7, 9, 3, 6, 14])


def retornarJogadasValidas(tabuleiro):
    """Retorna uma lista com os números das peças livres(aquelas que podem ser movidas)"""
    # ...........................===>suas linhas de codigo
    pecasLivres = []
    b1 = board.Board((4, 4))
    b1.populate(tabuleiro)
    b2 = transposta(b1)
    for i in range(4):
        for j in range(4):
            if b2[i, j] == ' ':
                if i+1 < 4:
                    pecasLivres.append(b2[i + 1, j])
                if i-1 >= 0:
                    pecasLivres.append(b2[i - 1, j])
                if j + 1 < 4:
                    pecasLivres.append(b2[i, j + 1])
                if j - 1 >= 0:
                    pecasLivres.append(b2[i, j - 1])

                return pecasLivres

    return pecasLivres


#tabuleiro = montarQuebraCabeca()
#print(tabuleiro)
#tab = prepararSaida(tabuleiro)
#tab.draw()
#retornarJogadasValidas(tabuleiro)


def executarJogada(tabuleiro, peca):
    """Movimenta a peça dada. Levanta exceção ValueError caso peça não seja válida"""
    # ...........................===>suas linhas de codigo
    b1 = prepararSaida(tabuleiro)
    pecasLivres = retornarJogadasValidas(tabuleiro)

    if peca in pecasLivres:
        for i in range(4):
            for j in range(4):
                if b1[i, j] == ' ':
                    linha = i
                    coluna = j

        for i in range(4):
            for j in range(4):
                if b1[i, j] == peca:
                    linhapeca = i
                    colunapeca = j

        b1[linha, coluna] = b1[linhapeca, colunapeca]
        b1[linhapeca, colunapeca] = " "

    tabArray = []
    for i in range(4):
        for j in range(4):
            tabArray.append(b1[j, i])

    return tabArray


#tabuleiro = montarQuebraCabeca()
#tab = prepararSaida(tabuleiro)
#tab.draw()
#peca = input('Peça: ')
#executarJogada(tabuleiro, peca)


def jogar():
    qc = montarQuebraCabeca()
    #print(qc)
    while not ganhou(qc):
        saida = prepararSaida(qc)
        saida.draw()

        try:
            peca = int(input("Entre com o número da peca:"))
            #
            # 3 Como o usuario pode abandonar o jogo?
            # 4 Que tipo de teste deve ser feito?
            # 5 Qual o comando a executar?
            #
            qc = executarJogada(qc, peca)
        except ValueError as erro:
            print("Erro:", erro)  # 6imprime mensagem e continua
        except SyntaxError:
            sys.exit("Fim")  # 7abandona a execucao
        except Exception as exInst:  # algo inespeprado aconteceu!
            # print(type(exInst))     # a instancia da excecao
            # print(exInst.args)      #x argumentos armazenados em .args
            # print(exInst)           # a excecao em si
            print("Nao entendi")
    return qc


def main():
    qc = jogar()
    if ganhou(qc):
        print("Parabens, voce ganhou!")
    else:
        print("Que pena, perdeu!")
    saida = prepararSaida(qc)
    saida.draw()


main()