1. Classes: El joc del penjat (3 punts)¶
Es vol dissenyar una classe per a gestionar una partida del joc del penjat que deveu conèixer. En aquest joc, un primer jugador pensa una paraula secreta i escriu tants guionets com lletres té la paraula. El segon jugador ha d’endevinar-la a base d’anar enunciant les lletres que creu que té, d’una en una. Si la paraula secreta conté la lletra enunciada, el primer jugador ho revela escrivint-la sobre el guionet corresponent (o guionents, si en conté més d’una). Si, en canvi, la paraula secreta no conté la lletra enunciada, el primer jugador dibuixa un traç d’una figura d’un penjat. El segon jugador guanya la partida si endevina totes les lletres de la paraula secreta o bé perd quan el dibuix del penjat queda completat.
La classe PartidaPenjat s’ha dissenyat de manera que emmagatzemi la paraula secreta, el conjunt de lletres ja enunciades i el nombre d’intents fallits. Totes les lletres implicades al joc són majúscules. La figura del penjat completa es dibuixa amb 10 traços, o sigui que el segon jugador perd la partida si fa 10 intents fallits. Si el segon jugador enuncia una lletra més d’una vegada, no es compta com a intent fallit.
Es demana que, al fitxer penjat.py, hi deseu la classe PartidaPenjat, tal com queda especificada a continuació:
- class penjat.PartidaPenjat(paraula)¶
Representa una partida del joc del penjat amb la paraula secreta donada.
Atributs:
- lletres¶
Conjunt de lletres (un
set) enunciades pel segon jugador, siguin o no de la paraula secreta. Inicialment, el conjunt buit.
Mètodes:
- jugada(c)¶
Aquest mètode és el que es crida quan el segon jugador enuncia una lletra
c, per tant no es cridarà mai si el joc ja s’ha acabat. Si la lletra ja és una de les enunciades, no ha de fer res. En cas contrari, actualitza el nombre d’intents fallits i el conjunt de lletres jugades de la forma adient.
- estat()¶
Retorna un string que indica si el segon jugador ha guanyat o perdut la partida:
'PERD'si ha fet 10 intents fallits;'GUANYA'si ha enunciat totes les lletres de la paraula secreta;'JUGANT'en qualsevol altre cas.
Operacions:
len(p)
Retorna el nombre de lletres de la paraula secreta.
p[i]
Retorna la i-èssima lletra de la paraula secreta si ha estat enunciada; en cas contrari, retorna
'-'. Es compleix que \(0 \leq i \lt len(p)\).str(p)
Retorna un string amb les lletres de la paraula secreta, però en el qual les lletres no enunciades es reemplacen per un guionet (
'-').
Exemples d’ús de la classe:
>>> from penjat import PartidaPenjat
>>> x = PartidaPenjat('PATATA')
>>> x.secreta, x.fallades, x.lletres
('PATATA', 0, set())
>>> len(x)
6
>>> for i in range(len(x)):
... print(x[i], end=';')
-;-;-;-;-;-;
>>> x.jugada('A')
>>> x.secreta, x.fallades, x.lletres
('PATATA', 0, {'A'})
>>> for i in range(len(x)):
... print(x[i], end=';')
-;A;-;A;-;A;
>>> str(x)
'-A-A-A'
>>> x.jugada('Ç')
>>> x.jugada('T')
>>> x.fallades, x.lletres == {'A', 'Ç', 'T'}
(1, True)
>>> print(x)
-ATATA
>>> x.estat()
'JUGANT'
>>> x.jugada('B')
>>> x.jugada('T')
>>> x.jugada('P')
>>> x.fallades, x.lletres == {'Ç', 'T', 'A', 'B', 'P'}
(2, True)
>>> print(x)
PATATA
>>> x.estat()
'GUANYA'
Trobareu més jocs de proves al fitxer tests-penjat.txt.