On 04/27/2016 06:12 PM, Christopher Reimer wrote:

After considering the feedback I got for sanity checking my code, I've
decided to simplify the base class for the chess pieces (see code
below). All the variables are stored inside a dictionary with most
values accessible through properties. A custom dictionary can be loaded
through the constructor and or saved out through the fetch_state method.
The subclasses only have to implement the is_move_valid method, which is
different for each type of chess piece.

Much better.

Here's my take on it:

class Piece(object):
    def __init__(self, color, position):
         self._color = color
         self._first_move = True
         self._initial_position = position
         self._move_count = 0
         self._name = color.title() + ' ' + self.__class__.__name__
         self._notation = color.title()[:1] + self.__class__.__name__[:1]
         self._position = position

    @property
    def color(self):
        return self._color

    def is_move_valid(self, new_position, board_state):
        raise NotImplementedError

    @property
    def move_count(self):
        return self._move_count

    @property
    def name(self):
        return self._name

    @property
    def notation(self):
        return self._notation

    @property
    def position(self):
        return self._position

    @position.setter
    def position(self, position):
        self._position = position
        if self._first_move:
            self._first_move = False
        self._move_count += 1

Now all the attributes are, well, attributes of the instance (that's what instances are for).

I ripped out the fetch_state because that will take more work -- you can't pass a Pawn's saved state in to Piece and get the results you want. pickle is worth looking at for saving/restoring.

Also, your code will give the same notation to Kings and Knights.

--
~Ethan~
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to