.. py:module:: escaquer Classe Escaquer =============== La classe :py:class:`Escaquer` representa un tauler d'escacs amb peces col·locades. Les peces són instàncies de la classe :py:class:`~pessa.Peça`. Descarregueu-ne la implementació per tal de poder fer proves. .. py:class:: 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 :download:`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: .. literalinclude:: test-escaquer.txt .. py:module:: escacs #. Al mòdul :file:`escacs.py`, afegiu-hi la funció següent: .. py:function:: quantes_peces(escaquer) Donada una instància de la classe :py:class:`Escaquer`, retorna el nombre de peces que conté. .. literalinclude:: test-escacs.txt :language: python :start-after: --ini-test-quantes-peces :end-before: --fi-test-quantes-peces #. Al mòdul :file:`escacs.py` afegiu la funció: .. py:function:: crear_partida(dic_coloc) A partir d'un diccionari que descriu la col.locació de les peces retorna una instància de la classe :py:class:`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. .. literalinclude:: test-escacs.txt :language: python :start-after: --ini-test-crear-partida :end-before: --fi-test-crear-partida #. En l'intèrpret de Python, creeu l'escaquer ``t1`` sense peces i tot seguit assigneu-li a la variable ``t2``: .. code:: python >>> t1 = Escaquer() >>> t2 = t1 Si ara situem un rei negre a la casella ``'b3'`` de ``t1``, .. code:: python >>> t1['b3'] = Peça('Rei','Negre') s'haurà afegit també a l'escaquer ``t2``? Per què? Utilitzeu les funcions del mòdul :py:mod:`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``). .. note:: Disposeu de jocs de proves per a les funcions que heu de dissenyar al fitxer :download:`test-escacs.txt ` i de les solucions :download:`escacs.py `.