Miniature/Development

Project status

 * 2009-11-08: First running example mimicking the "first realistic mockup".
 * 2009-11-07: Piece set committed, the same used by Wikipedia.
 * 2009-11-06: Code repository created: http://gitorious.org/miniature - source code exists since the beginning.
 * 2009-11-06: First post in the developer mailing list: https://garage.maemo.org/pipermail/chess-developer/
 * 2009-11-06: First realistic mockup for playing basic online chess (portrait).
 * 2009-11-04: Portrait mode gets priority to maximize board size + chats won't come till later.
 * 2009-11-03: Roadmapping started.
 * 2009-11-03: Plann for first phases started.
 * 2009-11-03: First concept of play + chat (landscape).
 * 2009-11-01: First mockup.
 * 2009-10-31: This wiki page created.
 * 2009-10-31: "Miniature" project name decided.
 * 2009-10-31: Garage project created: https://garage.maemo.org/projects/chess/
 * 2009-10-31: Talk thread created: Contributors needed: the killer free chess game for Maemo

Mockups
These are the current sketches.



Phase 1

 * 1) Setup development environment
 * 2) DONE: Miniature is hosted @ Gitorious. It uses the community port of Qt and autrotroll. Warning: Miniature uses the no_keyword switch since some of the Qt macros have very common names that can lead to wierd debug sessions. It's defensive programming, and not too bad, really.
 * 3) Implementing the Board. The Board represents the current state of the game and is equivalent to a real physical chess board. It has no knowledge of legal or illegal moves. For now it will only accept chess pieces. The board does not know about the future or the past, any logic will be in the Game.
 * 4) DONE: At least a rough version, using a FEN string as model and a board composed of QGraphicsItems. I imagine that we redraw the board whenever the position changes, so as of now the board is rather stateless (YAY!).
 * 5) Creating a basic GUI to display the Board and the pieces. A piece can be moved by tapping on it and then tapping on the destination.
 * 6) TODO: Decide between a full scene graph UI (= max flexibility to customize look and feel), or use more traditional widgets?
 * 7) Setup communication channels
 * 8) DONE: ML @ Garage:
 * 9) DONE: IRC channel @ freenode.net: #miniature @ irc.freenode.net

About setting up the environment
 * Preview of Qt for Maemo Developers Guide
 * Official Qt 4.6 port for Maemo 5, including mailing list for developer feedback.
 * A more comprehensive guide can be found here.
 * The Qt 4.6 packages are about to land in extras-devel

Phase 2

 * 1) Implement a basic chess Game adapter. The basic Game adapter knows the starting position of every piece and can determine if a move was legal. The concept of alternating player moves is also implemented here. It also recognizes checkmate, stalemate and threefold repetition thus ending the game.

Ideas for future phases
Proposals and plans for future phases.

Automatic login & logoff
In the first boot of the app we can offer a dialog offering to store the login & password, create a new account or "later" (which will will go to play offline). Once the app has login & password booting will imply logging in and the way to log out will be to simply close down the app.

Menu while not playing
(Seek player will be in the main screen, below the board - a mockup will come soon)
 * Settings
 * Highlight last move - default SQUARES. Also NO - ARROWS?
 * Show legal moves? - default NO.
 * Show coordinates - default NO.
 * Sounds - default NO.
 * Vibra on moves - default NO.
 * Board position - default RIGHT (to be implemented when landscape mode comes).
 * Customization (to be implemented when customization comes).
 * Piece sets selector.
 * Boards selector.

Menu while playing
Items in the application menu while playing a game:
 * Resign
 * Request draw
 * Abort
 * Adjourn
 * Promotion piece
 * When clicking the window shows all the figures with the Queen selected by default.
 * Settings
 * Same as while not playing

Technology selections
How to make the most from existing free projects avoiding forking and duplicated work as much as possible.


 * Qt 4.6 for UI layer. The goal is to have Maemo as primary development platform, aiming for straight ports to Symbian and other Qt compatible platforms.
 * Can we save work by looking at pacaq and Knights? Others? --qgil 06:22, 3 November 2009 (UTC)
 * What starting point to get the online chess features?
 * What starting point for chatting?
 * TP connection manager: http://telepathy.freedesktop.org/wiki/Components
 * Qt 4.6 wrapper (http://telepathy.freedesktop.org/wiki/TapiocaQt) might be a good idea to look at.
 * Rationale: I would like to see a "I play chess!" tag next to each contact I have. This information would of course have to come from a central server or such. Also, it would be great if we could just re-use the chat functionality that is already there with maemo5 (of course it needs a modified view to fit into our UI) --mikhas.
 * What starting point for game analysis?
 * Scid (see dependencies) would be nice by itself and as gateway to Crafty (see dependencies) and other engines.--qgil 06:22, 3 November 2009 (UTC)

Architecture
GUI:
 * Board
 * Chat
 * Player Cards
 * Online Play

Logic:
 * Game - the logic for a particular game, right now that would be just chess, but other board games could be possible too. (Chess based or other)
 * Pre-Game - How to find players, select a server or engine

Domain:
 * Board - Represents the data structure of the board (duh)
 * Player - information about the other player, like online status, skill level

Communication:
 * ICS
 * Bluetooth
 * Telepathy
 * Computer Chess Engine - an offline engine should be accessed the same way any online game is, the engine does not have to be in the same task