# Examen ALS 16/3/2018 Juego de ajedrez Baltasar <baltasarq@gmail.com>
class TableroAjedrez:
"""Tablero para jugar al ajedrez."""
LADO = 8
def __init__(self):
self._tablero = [[None] * TableroAjedrez.LADO,
[None] * TableroAjedrez.LADO,
[None] * TableroAjedrez.LADO,
[None] * TableroAjedrez.LADO,
[None] * TableroAjedrez.LADO,
[None] * TableroAjedrez.LADO,
[None] * TableroAjedrez.LADO,
[None] * TableroAjedrez.LADO]
def pon_pieza(self, i, j, p):
"""Pone una pieza en el tablero.
:param i: La fila.
:param j: La columna.
:param p: La pieza.
"""
self._tablero[i][j] = p
def get_pieza(self, i, j):
"""Devuelve una pieza en el tablero
(None si no hay pieza)
:param i: La fila.
:param j: La columna.
"""
return self._tablero[i][j]
def __str__(self):
toret = ""
for fila in self._tablero:
for casilla in fila:
toret += (" -- " if not casilla else ' ' + str(casilla) + ' ')
toret += '\n'
return toret
class Pieza:
"""Clase base para todas las piezas del ajedrez."""
def __init__(self, color):
"""Crea una pieza con un color: 'n' negras, 'b' blancas
:param color: El color de la pieza.
"""
self._color = color
@property
def color(self):
"""Devuelve el color de la pieza.
:return: 'n' negras, 'b' blancas
"""
return self._color
def __str__(self):
return self.color
class Peon(Pieza):
"""Peones."""
def __init__(self, color):
super().__init__(color)
def __str__(self):
return "P" + super().__str__()
class Alfil(Pieza):
"""Alfiles."""
def __init__(self, color):
super().__init__(color)
def __str__(self):
return "A" + super().__str__()
class Torre(Pieza):
"""Torre."""
def __init__(self, color):
super().__init__(color)
def __str__(self):
return "T" + super().__str__()
class Caballo(Pieza):
"""Caballo."""
def __init__(self, color):
super().__init__(color)
def __str__(self):
return "C" + super().__str__()
class Rey(Pieza):
"""El rey."""
def __init__(self, color):
super().__init__(color)
def __str__(self):
return "R" + super().__str__()
class Reina(Pieza):
"""La reina."""
def __init__(self, color):
super().__init__(color)
def __str__(self):
return "Q" + super().__str__()
class Jugador:
"""El jugador mantiene una lista de piezas y una referencia al tablero."""
def __init__(self, color, tablero):
"""El jugador recibe un color: 'n' negras, 'b' blancas, y coloca
sus piezas en el tablero.
:param color: 'n' negras, 'b' blancas
:param tablero: El tablero del ajedrez.
"""
self._tablero = tablero
self._color = color
self._piezas = []
fila = 1 if color == 'b' else 6
for i in range(TableroAjedrez.LADO):
self._piezas.append(Peon(color))
tablero.pon_pieza(fila, i, self._piezas[-1])
fila = 0 if color == 'b' else 7
self._piezas.append(Torre(color))
tablero.pon_pieza(fila, 0, self._piezas[-1])
self._piezas.append(Torre(color))
tablero.pon_pieza(fila, TableroAjedrez.LADO - 1, self._piezas[-1])
self._piezas.append(Caballo(color))
tablero.pon_pieza(fila, 1, self._piezas[-1])
self._piezas.append(Caballo(color))
tablero.pon_pieza(fila, TableroAjedrez.LADO - 2, self._piezas[-1])
self._piezas.append(Alfil(color))
tablero.pon_pieza(fila, 2, self._piezas[-1])
self._piezas.append(Alfil(color))
tablero.pon_pieza(fila, TableroAjedrez.LADO - 3, self._piezas[-1])
self._piezas.append(Rey(color))
tablero.pon_pieza(fila, 3, self._piezas[-1])
self._piezas.append(Reina(color))
tablero.pon_pieza(fila, 4, self._piezas[-1])
@property
def color(self):
"""El color de las piezas del jugador.
:return: 'b' blancas, 'n' negras.
"""
return self._color
def __getitem__(self, i):
return self._piezas[i]
def __setitem__(self, i, val):
self._piezas[i] = val
def __len__(self):
return len(self._piezas)
def __str__(self):
return self.color + " " + str(self._piezas)
class Partida:
"""Partida con un tablero y dos jugadores."""
def __init__(self):
self._tablero = TableroAjedrez()
self._jugador1 = Jugador("b", self._tablero)
self._jugador2 = Jugador("n", self._tablero)
def __str__(self):
return str(self._tablero)
if __name__ == "__main__":
p = Partida()
print(p)