3. Classe MemoryPlus (2 punts)¶
Volem fer una versió del joc per a dos jugadors en el qual hi hagi cartes especials, identificades pel caràcter '@'. Si un dels dos jugadors gira una carta especial, directament se la queda encara que no hagi format una parella. Això ho aconseguirem utilitzant el mecanisme d’herència. Hem dissenyat una nova classe MemoryPlus que tindrà dos atributs addicionals, els nombre de punts dels dos jugadors.
Implementeu la classe MemoryPlus tal com s’especifica a continuació, derivant-la de Memory. Deseu-la al mòdul memoryplus (fitxer memoryplus.py)
- class memoryplus.MemoryPlus(nfils, ncols)¶
Inicialitza l’espai del joc per a dos jugadors com un rectangle de dimensions \(nfils \times ncols\) sense cap carta. En començar el joc tots dos jugadors tenen 0 punts.
Atributs públics addicionals:
- npunts1¶
Punts del jugador 1 (enter)
- npunts2¶
Punts del jugador 2 (enter)
Mètodes:
- capgira(p, q, jug)¶
Realitza el torn del jugador jug, paràmetre que ha de valdre 1 o 2, simulant el capgirament de les cartes de les posicions p i q. Es compleix que tant a p com a q hi ha una carta. Si les dues cartes coincideixen (tenen el mateix valor), s’eliminen de l’espai de joc i el jugador jug obté dos punts. Si només una de les carta de les posicions p o q és una carta especial, l’elimina de l’espai de joc i el jugador jug obté un sol punt.
Exemples d’ús de la classe:
>>> from memoryplus import MemoryPlus
>>> m = MemoryPlus(4, 6)
>>> m.nfils, m.ncols
(4, 6)
>>> m.npunts1, m.npunts2
(0, 0)
>>> m.omplir('ABCCAH', 0)
>>> m.omplir('B@D@EC', 1)
>>> m.omplir('HDCFFE', 2)
>>> m.omplir('FGAAGF', 3)
>>> for f in range(4): # Dibuixem l'espai de joc (les cartes)
... for c in range(6):
... print(m[f,c], end='')
... print()
ABCCAH
B@D@EC
HDCFFE
FGAAGF
>>> m.capgira((0,0), (3,4), 1) # cartes no coincidents
>>> m.npunts1, m.npunts2
(0, 0)
>>> m.capgira((2,1), (1,2), 2) # el jugador 2 capgira una parella
>>> m.npunts1, m.npunts2
(0, 2)
>>> m.capgira((3,3), (1,3), 1) # el jugador 1 capgira una carta especial
>>> m.npunts1, m.npunts2
(1, 2)
>>> for f in range(4):
... for c in range(6):
... print(m[f,c], end='')
... print()
ABCCAH
B@**EC
H*CFFE
FGAAGF
Disposeu de jocs de prova al fitxer tests-memoryplus.txt