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

Assigna 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
  1. 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
    
    
  2. Al mòdul escacs.py afegiu 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 Escaquer amb 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'
    
    
  3. En l’intèrpret de Python, creeu l’escaquer t1 sense peces i tot seguit assigneu-li a la variable t2:

    >>> t1 = Escaquer()
    >>> t2 = t1
    

    Si ara situem un rei negre a la casella 'b3' de t1,

    >>> t1['b3'] = Peça('Rei','Negre')
    

    s’haurà afegit també a l’escaquer t2? Per què? Utilitzeu les funcions del mòdul copy per a fer una altra còpia de t1 de manera que no es comparteixi la graella de l’escaquer (sigui un àlias de t1).

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.