ASIX-M3-UF2-A1.1- Solucions Exercicis disseny descendent
Regne de Dracs
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...
- Mòduls a emprar:
from random import randint # per distribuir els dracs en les coves aleatoriament
from time import sleep # per fer més "emocionant" el final del joc
- El programa principal podria ser semblant a:
# Programa principal
fiJoc = False
while not fiJoc:
mostrarIntroduccio()
numeroDeCova = escollirCova()
explorarCova(numeroDeCova)
jugarDeNuevo = jugar()
from random import randint
from time import sleep
# Explicaciíó del joc
def mostrarIntroduccio():
print ( "Et trobes en terres desconegudes habitades per dracs.")
print ( "Arribes davant de dues coves. En una viu, un drac generós i")
print ( "amigable i compartirà el seu tresor amb tu. En L'altre hi viu un drac")
print ( "cobdiciós i afamat, i et devorarà immediatament.")
# Elecció de la cova per part del jugador
def escollirCova():
cova = ''
while cova != '1' and cova != '2':
cova = input('A quina cova vols accedir? (1 ó 2)')
return cova
# Es generà aleatoriament la cova on habiten els respectius dracs i el resultat és ...
def explorarCova(covaEscollida):
print ( "T'aproximes a la cova ...")
sleep (2)
print ( "És fosca i esgarrifosa ...")
sleep (2)
print ( "Un gran drac apareix sobtadament davant teu! Obre la boca i ...")
print ()
sleep (2)
covaAmigable = randint(1, 2)
if covaEscollida == str(covaAmigable):
print("Et regala un tresor!")
else:
print("T'engulleix d'una queixelada!")
# Es demana al jugador si volo continuar jugant
def jugar():
tornarAJugar = input('Vols jugar de nou? (Sí o No)')
return not tornarAJugar.lower().startswith('s')
# Programa principal
fiJoc = False
while not fiJoc:
mostrarIntroduccio()
numeroDeCova = escollirCova()
explorarCova(numeroDeCova)
fiJoc = jugar()
Quadrat màgic
Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un nombre senar de files i columnes on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar des de 1 fins a n2 on n és el numero de files i columnes.
Com construir-lo?
- El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).
- El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).
- Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.
- A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).
- Un exemple de quadrat màgic per a N=5 seria:
23 6 19 2 15 10 18 1 14 22 17 5 13 21 9 4 12 25 8 16 11 24 7 20 3
- El programa tindrà les següents funcions:
- llegirDimensio: Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.
- inicialitzarQuadrat: Simplement posem tots els valors a 0
- calculaPosicioInicial: Segons la dimensió, calculem la primera posició
- assignaValor: Posa un valor en una posició
- calcularNovaPosicio: Retorna els valors de fila i columna vàlids per a col·locar el proper valor.
- imprimirQuadrat: Treu per pantalla el quadrat màgic,
- El programa serà semblant a aquest :
dim = llegirDimensio()
qm = inicialitzarQuadrat(dim)
pos = calculaPosicioInicial(dim)
limit = dim*dim;
for valor in range(1,limit+1):
qm = assignaValor(qm,pos,valor)
pos = calcularNovaPosicio(qm, dim, pos)
imprimirQuadrat(qm)
def llegirDimensio():
dim = int(input("Dona la dimensio del quadrat actual: "))
while (dim % 2 == 0):
dim = int(input("Valor incorrecte introdueix de nou : "))
return (dim);
def inicialitzarQuadrat(dim):
qm = []
for i in range(dim):
qm.append([])
for j in range(dim):
qm[i].append(0)
return qm
def calculaPosicioInicial(dim):
columna = (dim // 2)
fila = columna - 1
pos = (fila, columna)
print(pos)
return pos
def imprimirQuadrat(qm):
print("")
for ll in qm:
print(ll)
def assignaValor(qm, pos, valor):
qm[pos[0]][pos[1]] = valor
return qm
def calcularNovaPosicio(qm, dim, pos):
columnaAux = (pos[1]+1)%dim
filaAux = pos[0] - 1
if (filaAux < 0):
filaAux = dim - 1
if (qm[filaAux][columnaAux] != 0):
# lloc ja ocupat
filaAux-=1
if (filaAux < 0):
filaAux = dim - 1
columnaAux=pos[1]
return (filaAux,columnaAux)
dim = llegirDimensio()
qm = inicialitzarQuadrat(dim)
pos = calculaPosicioInicial(dim)
limit = dim*dim;
for valor in range(1,limit+1):
qm = assignaValor(qm,pos,valor)
pos = calcularNovaPosicio(qm, dim, pos)
imprimirQuadrat(qm)