Classe Personatge¶
La classe Personatge representa un personatge d’un joc de rol. Un personatge té un nom, un nombre de vides i una sèrie de característiques com el seu nivell de força i de màgia. Vegeu-ne l’especificació.
- class personatge.Personatge(nom, nvides)¶
Construeix un personatge a partir dels paràmetres donats
Atributs
Aquesta classe ha de suportar les operacions següents:
Operació
Resultat
p[c]Retorna el valor de la característica c del personatge p. Si el personatge no té la característica c, retorna -1.
p[c] = vAssigna el valor v a la característica c Si el personatge no té la característica c, la crea i sinó reemplaça el seu valor
Aquesta classe ha de suportar la funció len que retorna el nombre de característiques del personatge.
Els atributs
nomividess’inicialitzen a partir dels paràmetres de la instanciació. La classe té un atribut privat, un diccionari que associa un valor a cada característica del personatge. En crear-se la instància, aquest atribut és un diccionari buit.
Vegeu un exemple de funcionament de la classe:
>>> from personatge import Personatge
>>> p = Personatge('Peter', 3)
>>> p.nom
'Peter'
>>> p.vides
3
>>> len(p)
0
>>> p['Astúcia']
-1
>>> p['Astúcia'] = 4
>>> p['Astúcia']
4
>>> p['Màgia'] = 2
>>> p['Màgia']
2
>>> len(p)
2
Implementeu la classe Personatge en el fitxer personatge.py. Disposeu de jocs de proves al fitxer test-personatge.txt i d’una solució a personatge.py.
Funció Combat¶
Els personatges lluiten entre ells en combats de força, d’astúcia, de màgia, o altres característiques. El guanyador del combat és el personatge que té més punts de la característica del combat. Si els dos personatges tenen el mateix valor hi ha empat i els dos personatges no es modifiquen. Sinó, al guanyador se li suma una vida i al perdedor se li en resta una.
En el fitxer combat.py dissenyeu la funció següent:
- combat(pers1, pers2, carac)`
Aquesta funció rep dues instaǹcies de la classe Personatge i un str que representa la característica en joc i modifica, si escau, les vides dels personatges d’acord amb el resultat del combat. Tingueu en compte que el nombre de vides mai no pot ser negatiu. Vegeu el comportament esperat de la funció:
>>> from personatge import Personatge >>> p = Personatge('Peter', 3) >>> q = Personatge('Jenny', 2) >>> p['Força'] = 2 >>> q['Força'] = 3 >>> from combat import combat >>> combat(p, q, 'Força') >>> p.vides 2 >>> q.vides 3
Disposeu de jocs de proves al fitxer test-combat.txt i d’una solució a combat.py.
Classe Comerciant¶
La classe Comerciant es deriva per herència de la classe Personatge. Té un atribut addicional: el nombre de monedes d’or amb les que poden comprar i vendre vides. Vegeu-ne l’especificació:
- class comerciant.Comerciant(nom, nvides, nmonedes)¶
Construeix un comerciant a partir dels paràmetres donats
Atributs de classe
- valor_vida¶
Nombre de monedes d’or que val una vida (inicialment 5)
Atributs (a més dels de la classe base)
Mètodes (a més dels de la classe base)
- comprar_vides(n)¶
Compra n vides a canvi de monedes d’or si en té prou. Altrament, no compra res.
Vegeu un exemple de funcionament de la classe:
>>> from comerciant import Comerciant
>>> from personatge import Personatge
>>> c = Comerciant('Pep', 3, 16)
>>> isinstance(c, Comerciant) and isinstance(c, Personatge)
True
>>> Comerciant.valor_vida
5
>>> c.valor_vida
5
>>> c.comprar_vides(2)
>>> c.vides
5
>>> c.monedes
6
>>> c.comprar_vides(2)
>>> c.vides
5
>>> c.monedes
6
Implementeu la classe Comerciant en el fitxer comerciant.py. Disposeu de jocs de proves al fitxer test-comerciant.txt i d’una solució a comerciant.py.