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

nom

Nom del personatge (str)

vides

Nombre de vides (int)

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] = v

Assigna 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 nom i vides s’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)

monedes

Nombre de monedes d’or del personatge (int)

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.