2. Classe TaulerMaxTirades (4 punts)¶
Fent ús del mecanisme d’herència, hem dissenyat una classe que emmagatzema un tauler de joc sobre el qual es pot disparar un màxim nombre de vegades (el nombre de bales de què disposa el contrincant). A més, aquesta classe disposa d’un nou mètode, caselles().
Implementeu la classe TaulerMaxTirades tal com s’especifica a continuació, derivant-la de TaulerVaixells. Deseu-la al mòdul vaixells_max (fitxer vaixells_max.py).
- class vaixells_max.TaulerMaxTirades(dim=5, max_tirades=10)¶
Crea un tauler quadrat amb \(dim \times dim\) caselles, inicialment tot buit (sense cap vaixell) i amb un màxim nombre de tirades (per defecte, 10).
Atributs públics addicionals:
- max_tirades¶
Nombre màxim de tirades que el contrincant pot fer sobre el tauler (nombre de bales)
Mètodes:
- dispara(coords)¶
Realitza una tirada del contrincant a la casella de coordenades coords del tauler únicament si el nombre de tirades no supera el màxim admès, max_tirades: En primer lloc, incrementa el nombre de tirades; en segon lloc, si la casella conté part d’un vaixell no encertada, es marca com a «tocada». Es compleix que les coordenades coords són vàlides.
- caselles()¶
Retorna una tupla amb tres enters: el nombre de caselles del tauler ocupades per parts de vaixell no tocades, el nombre de caselles ocupades per parts de vaixells tocades i el nombre de caselles on no hi ha vaixells (on hi ha aigua).
Exemples d’ús de la classe:
>>> from vaixells_max import TaulerMaxTirades
--ini-enunciat
>>> t = TaulerMaxTirades()
>>> t.num_tirades
0
>>> t.max_tirades
10
>>> t.dimensio()
5
>>> t.afegeix_vaixell_H((0,0), 3)
>>> t.afegeix_vaixell_V((1,3), 2)
>>> t.afegeix_vaixell_V((3,2), 2)
>>> for y in range(4, -1, -1):
... for x in range(5):
... print(t[x, y], end='')
... print()
-V---
-V-V-
---V-
-----
VVV--
>>> t.caselles()
(7, 0, 18)
>>> t.dispara((1,3)) # TOCAT!
>>> t.dispara((2,1)) # AIGUA!
>>> t.dispara((1,0)) # TOCAT!
>>> t.num_tirades
3
>>> t.caselles()
(5, 2, 18)
>>> for i in range(6):
... t.dispara((1,1)) # Disparem 6 cops a l'aigua ..
>>> t.dispara((0,0)) # .. un cop sobre un vaixell ...
>>> t.dispara((2,0)) # .. i un altre cop, però s'han acabat les bales
>>> for y in range(4, -1, -1):
... for x in range(5):
... print(t[x, y], end='')
... print()
-V---
-X-V-
---V-
-----
XXV--
>>> t.caselles()
(4, 3, 18)
>>> t.num_tirades
10
Disposeu de jocs de prova al fitxer tests-taulermax.txt