def _handle_input(self): poll = pygame.event.poll event = poll() while event: if event.type == QUIT: self.running = False break elif event.type == KEYDOWN: if event.key == K_ESCAPE: self.running = False break elif event.type == MOUSEBUTTONDOWN: position = pygame.mouse.get_pos() column = position[0] // 100 row = position[1] // 100 coords = Coordinates.from_matrix_coordinates((row, column)) piece = self.table.get(coords) if piece and piece.color == 'white': self._selected = (column, row) elif self._selected: selected_coords = Coordinates.from_matrix_coordinates( (self._selected[1], self._selected[0])) piece = self.table.get(selected_coords) if piece.can_move_to(coords): self.table.move_piece(selected_coords, coords) self._selected = None else: self._selected = None event = poll()
def test_color(self): coord = Coordinates('a', 1) self.assertEqual(constants.BLACK, coord.color) coord = Coordinates('b', 2) self.assertEqual(constants.BLACK, coord.color) coord = Coordinates('a', 2) self.assertEqual(constants.WHITE, coord.color) coord = Coordinates('b', 1) self.assertEqual(constants.WHITE, coord.color)
def __next__(self): if self._next >= 8: raise StopIteration() piece = self._row[self._next] coord = Coordinates.from_matrix_coordinates((self._row_number, self._next)) self._next += 1 return coord, piece
def _set_pieces(self, pieces: dict, color:str): for piece_type, coords in pieces.items(): Piece = self._piece_map.get(piece_type) if Piece.min_pieces <= len(coords) <= Piece.max_pieces: for piece_coord in coords: letter = piece_coord[0] number = int(piece_coord[1]) coord = Coordinates(letter, number) matrix_coordinates = coord.matrix_coordinates self.matrix[matrix_coordinates[0]][matrix_coordinates[1]] = Piece(coord, color)
def can_move_to(self, new_coords: Coordinates): distance = new_coords.distance(self.coordinates) if any(distance): if distance[0] and not distance[1]: return True elif not distance[0] and distance[1]: return True elif distance[0] == distance[1]: return True return False
class TestCoordinates(unittest.TestCase): def setUp(self): self.coordinates = Coordinates('d', 4) def test_coordinates_initialization(self): self.assertEqual('d', self.coordinates.letter) self.assertEqual(4, self.coordinates.number) def test_coordinates_matrix_coordinates(self): self.assertEqual((3, 3), self.coordinates.matrix_coordinates) def test_is_before(self): new_coord = Coordinates('d', 5) self.assertTrue(new_coord.is_before(self.coordinates)) self.assertFalse(self.coordinates.is_before(new_coord)) def test_is_behind(self): new_coord = Coordinates('d', 5) self.assertFalse(new_coord.is_behind(self.coordinates)) self.assertTrue(self.coordinates.is_behind(new_coord)) def test_distance(self): new_coord = Coordinates('d', 4) self.assertEqual((0, 0), self.coordinates.distance(new_coord)) new_coord = Coordinates('d', 5) self.assertEqual((0, 1), self.coordinates.distance(new_coord)) new_coord = Coordinates('e', 4) self.assertEqual((1, 0), self.coordinates.distance(new_coord)) new_coord = Coordinates('e', 5) self.assertEqual((1, 1), self.coordinates.distance(new_coord)) new_coord = Coordinates('d', 3) self.assertEqual((0, 1), self.coordinates.distance(new_coord)) new_coord = Coordinates('c', 4) self.assertEqual((1, 0), self.coordinates.distance(new_coord)) new_coord = Coordinates('c', 3) self.assertEqual((1, 1), self.coordinates.distance(new_coord)) def test_color(self): coord = Coordinates('a', 1) self.assertEqual(constants.BLACK, coord.color) coord = Coordinates('b', 2) self.assertEqual(constants.BLACK, coord.color) coord = Coordinates('a', 2) self.assertEqual(constants.WHITE, coord.color) coord = Coordinates('b', 1) self.assertEqual(constants.WHITE, coord.color)
def test_distance(self): new_coord = Coordinates('d', 4) self.assertEqual((0, 0), self.coordinates.distance(new_coord)) new_coord = Coordinates('d', 5) self.assertEqual((0, 1), self.coordinates.distance(new_coord)) new_coord = Coordinates('e', 4) self.assertEqual((1, 0), self.coordinates.distance(new_coord)) new_coord = Coordinates('e', 5) self.assertEqual((1, 1), self.coordinates.distance(new_coord)) new_coord = Coordinates('d', 3) self.assertEqual((0, 1), self.coordinates.distance(new_coord)) new_coord = Coordinates('c', 4) self.assertEqual((1, 0), self.coordinates.distance(new_coord)) new_coord = Coordinates('c', 3) self.assertEqual((1, 1), self.coordinates.distance(new_coord))
def test_queen_can_move_to_right(self): new_coord = Coordinates('e', 4) self.assertTrue(self.queen.can_move_to(new_coord))
def test_queen_can_move_more_than_one_tile(self): new_coord = Coordinates('d', 8) self.assertTrue(self.queen.can_move_to(new_coord))
def setUp(self): self.coords = Coordinates('d', 4) self.knight = Knight(self.coords, 'white')
def test_queen_can_move_behind(self): new_coord = Coordinates('d', 3) self.assertTrue(self.queen.can_move_to(new_coord))
def test_king_cant_move_more_than_one_tile(self): new_coord = Coordinates('d', 8) self.assertFalse(self.king.can_move_to(new_coord))
def setUp(self): self.coords = Coordinates('d', 4) self.king = King(self.coords, 'white')
def test_rook_cant_move_diagonally(self): new_coord = Coordinates('e', 5) self.assertFalse(self.rook.can_move_to(new_coord))
def test_king_can_move_ahead(self): new_coord = Coordinates('d', 5) self.assertTrue(self.king.can_move_to(new_coord))
def test_rook_can_move_to_right(self): new_coord = Coordinates('e', 4) self.assertTrue(self.rook.can_move_to(new_coord))
def test_rook_can_move_more_than_one_tile(self): new_coord = Coordinates('d', 8) self.assertTrue(self.rook.can_move_to(new_coord))
def test_rook_can_move_behind(self): new_coord = Coordinates('d', 3) self.assertTrue(self.rook.can_move_to(new_coord))
def test_rook_can_move_ahead(self): new_coord = Coordinates('d', 5) self.assertTrue(self.rook.can_move_to(new_coord))
def test_knight_cant_move_diagonally(self): new_coord = Coordinates('e', 5) self.assertFalse(self.knight.can_move_to(new_coord))
def test_queen_can_move_diagonally(self): new_coord = Coordinates('e', 5) self.assertTrue(self.queen.can_move_to(new_coord))
def test_knight_cant_move_to_the_right(self): new_coord = Coordinates('e', 4) self.assertFalse(self.knight.can_move_to(new_coord))
def setUp(self): self.coords = Coordinates('d', 4) self.queen = Queen(self.coords, 'white')
def can_move_to(self, new_coords: Coordinates): distance = new_coords.distance(self.coordinates) return any(d == 1 for d in distance) and all(d <= 1 for d in distance)
def test_king_can_move_behind(self): new_coord = Coordinates('d', 3) self.assertTrue(self.king.can_move_to(new_coord))
def test_knight_cant_move_behind(self): new_coord = Coordinates('d', 3) self.assertFalse(self.knight.can_move_to(new_coord))
def test_king_can_move_to_right(self): new_coord = Coordinates('e', 4) self.assertTrue(self.king.can_move_to(new_coord))
def setUp(self): self.coords = Coordinates('d', 4) self.pawn = Pawn(self.coords, 'white')
def setUp(self): self.coords = Coordinates('d', 4) self.rook = Rook(self.coords, 'white')
def test_knight_can_move_on_l(self): new_coord = Coordinates('e', 7) self.assertTrue(self.knight.can_move_to(new_coord))