Chess engine:
From non coding perspective, want:
- A chessboard
- The ability to play games
- The ability to load games
- The ability to play vs ai and vs people
- Rule checking in game
- Ability to store repertoire
- The ability to save a game
- Timer for play
- Have separate profiles for each player
From coding perspective need:
Front end:
- all chess piece graphics
- all visual components (load game, save game, new game)
- various sub screens (new game should open up its own screen)
- allow drag + click interactivity with chess pieces
- “fancy features” (highlighting possible moves?, board themes?) - do last
- allow user to choose user profile
Backend:
- all chess rules coded in
- conversion of game states into strings (PGN/FEN, probably both)
- building a half decent ai
- save/load locations
- Repertoire structure
- load user profile
Classes needed:
Backend:
- Piece superclass/interface
- Pawn, knight, bishop, rook, queen, king
- methods: move, capture
- state: location, color
- Board
- methods: initialize, toString
- state: players, timer, Position
- Position
- methods: toFEN
- state: 2d array of Squares
- Square
- methods: toString
- state: row, column
- Game
- methods: load and save
- state: Player1, Player2, List of Turns
- Half-Turn (hierarchy: subclasses whitehalfturn and blackhalfturn)
- methods: toString
- state: move, prePosition, postPosition
- Full turn
- methods: toString
- state: whitehalfturn, blackhalfturn
- Repertoire (Serializable?)
- methods: add(repertoire), returnChildren
- stateL halfTurn stored, List of repertoires
- Move
- state: piece, source, destination, capture (boolean), enpasssant (boolean), castling (boolean)
- User
- methods: load/save
- state: list of games
Frontend:
- Start screen (for new game)
- main screen
- Menu (With save/load/etc… buttons)
- Displays (for timer, pgn/fen)
To compile, follow https://javabook.bloomu.edu/setupjavafx.html if using Intellij. Equivalent guides can be found for other IDEs.