public interface Game {

    /** title of the game */
    String getTitle();
    
    /** horizontal size of the board */
    int getHorizontalSize();

    /** vertical size of the board */
    int getVerticalSize();

    /** string representation of the position
     * useful for user interface
     */
    String getContent(Coordinate pos);

    /** record a move on a given position */
    void addMove(Coordinate pos);

    /** check if some player wins or it is a draw */
    void checkResult();

    /** returns true, if and only if, the position is free */
    boolean isFree(Coordinate pos);
    
    /** provide a user interface to the game */
    void setUserInterface(UserInterface ui);
    
    /** get a numerical status where 0 = draw, >0 is winning player, <0 is moving player */
    int getStatus();

    /** get a short description of the game status */
    String getStatusText(int status);
    
}
