teste
unknown
python
4 years ago
5.2 kB
11
Indexable
# -*- 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()
Editor is loading...