Tauler d'escacs =============== El joc d'escacs es juga en un tauler quadrat de ``8x8`` caselles, identificades mitjançant un parell de coordenades únic: una lletra i un número. Les columnes estan etiquetades de la *a* fins a la *h* d'esquerra a dreta. Les files es numeren de *1* a *8* de baix a dalt. Farem servir strings per representar cada casella, per exemple l'alfil blanc en la figura de sota es troba en la casella ``'c3'``, i en les caselles ``'a8'`` i ``'g8'`` hi són les dues torres negres. Cada tipus de peça és identificada per la seva primera lletra (rei = ``'R'``, dama = ``'D'``, torre = ``'T'``, alfil = ``'A'``, cavall = ``'C'`` i peó = ``'P'``). Les peces blanques es designen amb lletres majúscules (``'RDTACP'``), mentre que les negres, en minúscules (``'rdtacp'``). Per representar la distribució de les peces sobre el tauler farem servir un diccionari on la clau és un tipus de peça, i el valor la llista de caselles ocupades per peces d'aquest tipus. Per exemple, la clau/valor ``'t':['a8','g8']`` indica que hi ha dues torres negres i que són a les caselles ``'a8'`` i ``'g8'``. ========================================== ==================================== Per tant, el següent tauler d'escacs: es representarà amb el diccionari: |CHESS| .. literalinclude:: exemple.txt :language: python3 ========================================== ==================================== .. |CHESS| image:: chess4.png :height: 300px :width: 300px Per un altra banda, guardem la llista de les caselles a les quals es pot moure cada peça del tauler. Això ho fem en un altre diccionari on la clau és la casella d'una peça, i el valor la llista de caselles on la peça es pot moure. Per exemple, en ``'c3'`` hi és l'alfil blanc que es pot moure a les caselles de la llista ``['d4','e5','f6','g7','h8','d2','b4','a5']``, en color verd a la figura. Donat que una d'elles és la casella del rei negre, en ``'h8'``, aquest es troba en situació *d'escac*. Pel que fa al peó blanc en ``'c2'``, com que no es pot moure enlloc, al diccionari trobarem la clau/valor ``'c2':[ ]``. Volem dissenyar una funció :py:func:`escac` tal que donat el caràcter d'un dels reis (``'R'`` o ``'r'``), un diccionari amb la distribució de les peces sobre el tauler i un altre diccionari amb les caselles on es pot moure cada peça com els descrits anteriorment, comprovi si hi ha escac sobre el rei donat. Si és així, retornarà la casella de la peça que fa l'escac, altrament retornarà l'string ``'**'``. Per implementar aquesta funció, en primer lloc, es demana implementar una funció anomenada :py:func:`fa_escac` tal que donat el caràcter corresponent a una peça d'escacs, un diccionari amb la distribució de les peces sobre el tauler i un altre diccionari amb les peces on es pot moure cada peça retorna un string corresponent a la posició on està la peça donada de manera que fa escac al rei de color contrari, en cas que no pugui fer escac en cap de les posicions possibles, retornarà l'string buit. .. note:: no tractarem casos d'escac fet per dues o més peces alhora. Desa les funcions al fitxer :file:`tauler_d_escacs.py`. Per exemple, les funcions han de passar els següents doctests: .. literalinclude:: tauler_d_escacs.txt :language: python3 :lines: 17-34 .. note:: Pots descarregar el fitxer de tests complet :download:`tauler_d_escacs.txt ` .. rubric:: Solució El fitxer :download:`tauler_d_escacs.py ` conté una solució.