Classe Escaquer¶
La classe Escaquer representa un tauler d’escacs amb peces
col·locades. Les peces són instàncies de la classe
Peça. Descarregueu-ne la implementació per tal de
poder fer proves.
- class escaquer.Escaquer¶
Tauler d’escacs de 8 per 8. Aquesta classe suporta les operacions següents:
Operació
Resultat
m[pos]Retorna l’string “Buida” si la posició pos del tauler està buida o, en cas contrari, la peça que ocupa la posició. pos ha de ser un string de 2 caràcters tal que: “a”<=pos[0]<=”h” i “1”<=pos[1]<=”8”
m[pos] = valAssigna val a la casella pos del tauler. valor pot ser l’string “Buida” o una instància a la classe Peça. pos ha de ser un string de 2 caràcters tal que: “a”<=pos[0]<=”h” i “1”<=pos[1]<=”8”
Inicialment el tauler no conté cap peça (totes les caselles estaran buides). Per a accedir a les peces que hi ha a cada casella, cal utilitzar la notació tradicional dels escacs (vegeu escaquer). Concretament, les coordenades de les caselles cal indicar-les com un string de tipus 'FN' on F és una lletra entre a i h que indica la columna de la casella i N és un enter entre 1 i 8 que n’indica la fila (per exemple 'a6' o 'g5').
Trobareu aquesta classe implementada al mòdul escaquer.py. Feu proves en l’intèrpret de python per a comprovar el seu funcionament: instancieu un escaquer, afegiu-hi unes quantes peces i traieu-ne com per exemple:
>>> from escaquer import Escaquer
>>> e = Escaquer()
>>> e['a3']
'Buida'
>>> from pessa import Peça
>>> e['c1'] = Peça('Rei', 'Negre')
>>> str(e['c1'])
'Rei Negre'
>>> try:
... e['k2']
... except IndexError:
... print("Index Erroni")
Index Erroni
Al mòdul
escacs.py, afegiu-hi la funció següent:- escacs.quantes_peces(escaquer)¶
Donada una instància de la classe
Escaquer, retorna el nombre de peces que conté.>>> e = Escaquer() >>> quantes_peces(e) 0 >>> e['a1'] = Peça('Rei', 'Blanc') >>> e['b3'] = Peça('Cavall', 'Blanc') >>> e['b8'] = Peça('Cavall', 'Negre') >>> e['h6'] = Peça('Àlfil', 'Blanc') >>> quantes_peces(e) 4
Al mòdul
escacs.pyafegiu la funció:- escacs.crear_partida(dic_coloc)¶
A partir d’un diccionari que descriu la col.locació de les peces retorna una instància de la classe
Escaqueramb aquesta distribució. Concretament, les claus del diccionari són l’índex de la casella amb el format descrit abans i els valors són tuples amb dues components, el tipus i el color de la peça. Per a prevenir possibles errors en el diccionari, la funció només colocarà peces vàlides en posicions vàlides.>>> d = {'a2': ('Rei', 'Blanc'), 'f5': ('Dama', 'Negra'), ... 'c5': ('Gos', 'Blanc'), 'b9': ('Dama', 'Blanca')} >>> t = crear_partida(d) >>> str(t['a2']) 'Rei Blanc' >>> str(t['f5']) 'Dama Negra' >>> t['c5'] 'Buida'
En l’intèrpret de Python, creeu l’escaquer
t1sense peces i tot seguit assigneu-li a la variablet2:>>> t1 = Escaquer() >>> t2 = t1
Si ara situem un rei negre a la casella
'b3'det1,>>> t1['b3'] = Peça('Rei','Negre')
s’haurà afegit també a l’escaquer
t2? Per què? Utilitzeu les funcions del mòdulcopyper a fer una altra còpia det1de manera que no es comparteixi la graella de l’escaquer (sigui un àlias det1).
Nota
Disposeu de jocs de proves per a les funcions que heu de
dissenyar al fitxer test-escacs.txt i de les solucions escacs.py.