Re: I found a project
Jeff wrote On 03/02/07 22:35,:
Actually, my plan was to use UML to design
a) The board
b) A piece (interface)
c) Each individual piece
d) A team
I'm not sure what to do about the moves though.
I was thinking that I would like to have a class called "moveAPiece"
that has all the different possible moves implemented in separate methods.
I read somewhere about a design pattern that might make this easier, but
I'm not sure I'm ready to get into that level. Maybe, I'll just build
each move into the individual pieces. Of course this would make using
an interface moot, *I think*, but that's ok.
Given that piece movement is an action on a piece, IMHO MoveAPiece
should be a method. Might think about Piece being an abstract class,
with derivative classes of Pawn, Rook, etc., each of which would
implement the MoveAPiece method differently. Piece would have all the
common parameters and functions you would expect from all pieces -
properties of Row, Column, Color, perhaps Points, and the method
MoveAPiece. Each class extending from Piece would override the
MoveAPiece method.
Mmm-hmm. And then you wind up implementing the Bishop
and Rook moves twice to take care of the Queen. Isn't
object-oriented design supposed to promote code re-use?
Another design would be to have a WoodPusher class that
moves pieces; the Bishop would "have a" BishopWoodPusher
while the Queen would have both a BishopWoodPusher and a
RookWoodPusher. Still another design makes the moves a
property of the board rather than of the pieces: Each Square
owns sets of other Squares that are its Bishop-neighbors,
Knight-neighbors, and so on. There are many ways to skin
cats.
For what it's worth, I did a little bit of (not very
good) chess programming long ago and in another language,
and one of the useful tricks was to use a repertoire of
ten pieces instead of the usual six. In addition to
"King" there was "Unmoved King;" the latter transmuted to
an ordinary King when it moved, but until then it had the
ability to castle (with an "Unmoved Rook" but not with
a plain "Rook"). Pawns came in three flavors: "Pawn on
second rank," "Pawn vulnerable to en passant," and plain
"Pawn." Letting the identity of the piece encode the
necessary parts of its history made the move variations
easy to deal with.
--
Eric.Sosman@sun.com