Here give an example about an object oriented design of a chess game.
The design can be modularized into four parts: board, piece sets, game and player.
A Board class has an attribute of Squares Array (8x8) and PieceSets (black and white).
A Board class also has an attribute of "pieceSetOnTop". The attribute helps to figure the piece moves that are direction-restricted.
A PieceSet class has an attribute of a List<Piece>. The size of the List<Piece> is initially set to 16.
A Piece class has two attributes: color and placeAt (i.e. located at which square).
A Piece class is an abstract class. The extended classes (Pawn, King, Queen, Rook, Knight, Bishop) implements the abstracted operations:
- validMoves() - The valid movement for a Piece
- attackSquares() - The squares that a Piece can attack
- captureFreeMove - The squares that a Piece can move to without being captured.
- toBeCaptured() - The boolean indicates whether a Piece is going to be captured.
The validMoves() operation implements the movement rules. For example, the validMoves of a Pawn class ensures that the Pawn can only move in the direction towards the opponent side. A Pawn class has additional attributes of promoted and promotedTo, which describes the movement/conversion rule of a Pawn at reaching the end of an opponent side and at the conversion about the piece that a Pawn converted to.
A Game class controls the flow of a game. The class has attributes:
- playedMoves - Keep a record of moves
- turn - Indicate either it is a Black's turn or a White's turn
- players - Represent the two players, this can be Human/Human, Computer/Computer or Human/Computer
- result - Indicate the result of a game
- checkStatus - Indicate which side is being checked or checkmated
A Player class represents a Player. A Player has two attributes:
- pieceColor - The color that used by a Player
- engine - The engine that makes the moves. This can be a human or a computer