Design a two-player chess game using the following process:

  1. Define context and modes of use
    • Illustrate the operational context using a context model
    • Illustrate the top-level functions using a use case diagram
  2. Design the system architecture
    • Recommend an appropriate software architecture
  3. Identify the principal objects
    • Model an object-oriented design using a class diagram
  4. Develop design models
    • Model interactions among objects using a sequence diagram
    • Model event-driven behavior using a state machine diagram
  5. Specify object interfaces

For the principal objects, include a ChessBoard class and an abstract ChessPiece class with subclasses for each type of chess piece.

As part of the design model, create a UML sequence diagram for how messages (i.e., method calls) flow between classes and a UML state machine diagram for how moves are specified with one click to pick up a piece and one to drop it.