fork download
  1. # Examen ALS 16/3/2018 Juego de ajedrez Baltasar <baltasarq@gmail.com>
  2.  
  3. class TableroAjedrez:
  4. """Tablero para jugar al ajedrez."""
  5. LADO = 8
  6. def __init__(self):
  7. self._tablero = [[None] * TableroAjedrez.LADO,
  8. [None] * TableroAjedrez.LADO,
  9. [None] * TableroAjedrez.LADO,
  10. [None] * TableroAjedrez.LADO,
  11. [None] * TableroAjedrez.LADO,
  12. [None] * TableroAjedrez.LADO,
  13. [None] * TableroAjedrez.LADO,
  14. [None] * TableroAjedrez.LADO]
  15.  
  16. def pon_pieza(self, i, j, p):
  17. """Pone una pieza en el tablero.
  18.  
  19. :param i: La fila.
  20. :param j: La columna.
  21. :param p: La pieza.
  22. """
  23. self._tablero[i][j] = p
  24.  
  25. def get_pieza(self, i, j):
  26. """Devuelve una pieza en el tablero
  27. (None si no hay pieza)
  28.  
  29. :param i: La fila.
  30. :param j: La columna.
  31. """
  32. return self._tablero[i][j]
  33.  
  34. def __str__(self):
  35. toret = ""
  36.  
  37. for fila in self._tablero:
  38. for casilla in fila:
  39. toret += (" -- " if not casilla else ' ' + str(casilla) + ' ')
  40. toret += '\n'
  41.  
  42. return toret
  43.  
  44. class Pieza:
  45. """Clase base para todas las piezas del ajedrez."""
  46. def __init__(self, color):
  47. """Crea una pieza con un color: 'n' negras, 'b' blancas
  48. :param color: El color de la pieza.
  49. """
  50. self._color = color
  51.  
  52. @property
  53. def color(self):
  54. """Devuelve el color de la pieza.
  55. :return: 'n' negras, 'b' blancas
  56. """
  57. return self._color
  58.  
  59. def __str__(self):
  60. return self.color
  61.  
  62.  
  63. class Peon(Pieza):
  64. """Peones."""
  65. def __init__(self, color):
  66. super().__init__(color)
  67.  
  68. def __str__(self):
  69. return "P" + super().__str__()
  70.  
  71.  
  72. class Alfil(Pieza):
  73. """Alfiles."""
  74. def __init__(self, color):
  75. super().__init__(color)
  76.  
  77. def __str__(self):
  78. return "A" + super().__str__()
  79.  
  80.  
  81. class Torre(Pieza):
  82. """Torre."""
  83. def __init__(self, color):
  84. super().__init__(color)
  85.  
  86. def __str__(self):
  87. return "T" + super().__str__()
  88.  
  89.  
  90. class Caballo(Pieza):
  91. """Caballo."""
  92. def __init__(self, color):
  93. super().__init__(color)
  94.  
  95. def __str__(self):
  96. return "C" + super().__str__()
  97.  
  98.  
  99. class Rey(Pieza):
  100. """El rey."""
  101. def __init__(self, color):
  102. super().__init__(color)
  103.  
  104. def __str__(self):
  105. return "R" + super().__str__()
  106.  
  107.  
  108. class Reina(Pieza):
  109. """La reina."""
  110. def __init__(self, color):
  111. super().__init__(color)
  112.  
  113. def __str__(self):
  114. return "Q" + super().__str__()
  115.  
  116.  
  117. class Jugador:
  118. """El jugador mantiene una lista de piezas y una referencia al tablero."""
  119. def __init__(self, color, tablero):
  120. """El jugador recibe un color: 'n' negras, 'b' blancas, y coloca
  121. sus piezas en el tablero.
  122.  
  123. :param color: 'n' negras, 'b' blancas
  124. :param tablero: El tablero del ajedrez.
  125. """
  126. self._tablero = tablero
  127. self._color = color
  128. self._piezas = []
  129. fila = 1 if color == 'b' else 6
  130.  
  131. for i in range(TableroAjedrez.LADO):
  132. self._piezas.append(Peon(color))
  133. tablero.pon_pieza(fila, i, self._piezas[-1])
  134.  
  135. fila = 0 if color == 'b' else 7
  136. self._piezas.append(Torre(color))
  137. tablero.pon_pieza(fila, 0, self._piezas[-1])
  138. self._piezas.append(Torre(color))
  139. tablero.pon_pieza(fila, TableroAjedrez.LADO - 1, self._piezas[-1])
  140.  
  141. self._piezas.append(Caballo(color))
  142. tablero.pon_pieza(fila, 1, self._piezas[-1])
  143. self._piezas.append(Caballo(color))
  144. tablero.pon_pieza(fila, TableroAjedrez.LADO - 2, self._piezas[-1])
  145.  
  146. self._piezas.append(Alfil(color))
  147. tablero.pon_pieza(fila, 2, self._piezas[-1])
  148. self._piezas.append(Alfil(color))
  149. tablero.pon_pieza(fila, TableroAjedrez.LADO - 3, self._piezas[-1])
  150.  
  151. self._piezas.append(Rey(color))
  152. tablero.pon_pieza(fila, 3, self._piezas[-1])
  153. self._piezas.append(Reina(color))
  154. tablero.pon_pieza(fila, 4, self._piezas[-1])
  155.  
  156. @property
  157. def color(self):
  158. """El color de las piezas del jugador.
  159.  
  160. :return: 'b' blancas, 'n' negras.
  161. """
  162. return self._color
  163.  
  164. def __getitem__(self, i):
  165. return self._piezas[i]
  166.  
  167. def __setitem__(self, i, val):
  168. self._piezas[i] = val
  169.  
  170. def __len__(self):
  171. return len(self._piezas)
  172.  
  173. def __str__(self):
  174. return self.color + " " + str(self._piezas)
  175.  
  176.  
  177. class Partida:
  178. """Partida con un tablero y dos jugadores."""
  179. def __init__(self):
  180. self._tablero = TableroAjedrez()
  181. self._jugador1 = Jugador("b", self._tablero)
  182. self._jugador2 = Jugador("n", self._tablero)
  183.  
  184. def __str__(self):
  185. return str(self._tablero)
  186.  
  187.  
  188. if __name__ == "__main__":
  189. p = Partida()
  190. print(p)
  191.  
Success #stdin #stdout 0.04s 9444KB
stdin
Standard input is empty
stdout
 Tb  Cb  Ab  Rb  Qb  Ab  Cb  Tb 
 Pb  Pb  Pb  Pb  Pb  Pb  Pb  Pb 
 --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  -- 
 Pn  Pn  Pn  Pn  Pn  Pn  Pn  Pn 
 Tn  Cn  An  Rn  Qn  An  Cn  Tn