Chroniques d'un gnou libre

 
Waoc is Another Online Chessboard

Waoc is Another Online Chessboard

WaoC is a free and opensource online chessboard.

  • status : proof-of-concept

4. Démonstration

5. Références

Client (web)

1. Affichage

L'interface c'est simplement un <div> du plateau (css = '#squareboard') qui contient d'autres <div> qui sont les cases (css = '.square'). qui sont générés par deux boucles imbriquées dans un fichier php (index.php).

Chacun des <div> possède un nom (attribut id), que je peux récupérer lors d'un clic dessus (onClick=“fonction_qui_traite_le_clic(this)”).

Les id en question ne sont pas choisis au hasard, il contiennent les coordonnées X et Y de chaque case (genre case_X_Y). La premiere tâche de la fonction qui traite le clic est donc de découper le nom de telle sorte qu'elle puisse récupérer les X et Y sous forme de 'int', pour pouvoir ensuite faire des calculs dessus.

Pour faire apparaitre des trucs dans les cases (couleurs de fond ou piece de jeu) c'est simple, à partir d'un X, Y, on reconstruit le nom “case_X_Y”, et on fait un document.getElementById(…). Ce qui renvoie un pointeur vers le <div> correspondant.

A partir de là, il suffit de modifier les attributs du <div> monDiv par un:

monDiv.setAttribute('style',"classeX classeY");
// ou bien monDiv.style["border-color"]=red;
// je sais plus lequel, l'un des deux pose un probleme de synchro.

ou d'ajouter d'autres objets dedans:

e=document.createElement("img");
e.setAttribute("src", "http://machintruc/chose.png");
monDiv.appendChild(e);

2. Déplacement des pièces

Au chargement de la page (onload), un objet de la classe Chessboard est construit, avec les positions initiales de chaque piece.

J'ai créé pour chaque piece une classe du même nom (en anglais), elle héritent toute de la classe Piece.

Le Chessboard fournit les méthodes nécessaires pour savoir si une case est vide ou non.

Chaque classe héritant de Piece redéfinit le nom de la piece, et quelques méthode permettant de gérer les déplacements définis sur un objet Move agrémenté de quelques paramètres.

Le déplacement en temps que tel et géré par une classe Move donc, qui est donc le “père” de deux classes ”“MoveLinear”” et ”“MoveJump””.

”“MoveLinear”” gère les déplacement rectilignes horizontaux/verticaux/diagonaux (et refuse le mouvement s'il y a un obstacle sur la ligne en moins de X cases).

”“MoveJump”” indique si un saut de X,Y cases est possible.

Donc chaque piece utilise un Move* avec les bonnes restrictions (longueur du déplacement, déplacement vers l'avant, diagonales, etc…) pour fournir ses infos de déplacement sur l'échiquier.

Serveur

Structures de données (BDD ou autres)

Player

Attributs

# identifiant: email du joueur (key)
idPlayer : string 

# LastName & FirstName )
name : string 

# md5sum()
password : string  

# Ancienneté du joueur (=> calcul du score)
creation_stamp : date 

# goodie: souhaiter anniversaire ?
birthdate : date 

# goodie: affichage de l'heure (<= country/city)
timezone : int 

Méthodes

register : id:string -> name:string -> password:string -> birthdate:date -> timezone:int -> unit 

unregister : id:string, password:string -> unit       

connect : id:string -> password:string -> unit

disconnect : unit -> unit

Position

Attributs

x : unsigned int
y : unsigned int

Méthodes

  * **getX** : unit -> unsigned int
  * **getY** : unit -> unsigned int
  * **setX** : unsigned int -> unit
  * **setY** : unsigned int -> unit
  * **setXY** : unsigned int -> unsigned int -> unit

Piece

  • idPiece : unsigned int identifiant arbitraire de la piece (key)
  • type : piece_type PIECE_TYPE_ROOK, PIECE_TYPE_QUEEN, PIECE_TYPE_KING, etc…
  • color : piece_color PIECE_COLOR_WHITE | PIECE_COLOR_BLACK
  • moveType : piece_move MOVE_TYPE_LINEAR | MOVE_TYPE_JUMP
  • position : position
  • updatePosition : position:position → unit

Move

  • UInt idMove : identifiant du mouvement (key)
  • Piece pieceMoved : pièce qui effectue le mouvement (foreign key)
  • Piece pieceKilled : pièce prise durant le mouvement (foreign key)
  • Bool isValid : TRUE ⇒ le coup est valide, FALSE sinon
  • UInt fromX :
  • UInt fromY :
  • UInt toX :
  • UInt toY :

}

Games

  • (key) UInt Game : identifiant (nombre autoincrémenté)
  • Player initiator : joueur initiateur de la partie
  • Player guest : joueur invité (ou réservé)
  • Enum status : GAME_STATUS_OPEN | GAME_STATUS_RESERVED | GAME_STATUS_WAIT_ALL | GAME_STATUS_WAIT_WHITE | GAME_STATUS_WAIT_BLACK | GAME_STATUS_PLAY_WHITE | GAME_STATUS_PLAY_BLACK | GAME_STATUS_FINISHED
  • Date gameStart : goodie: date de début du jeu
  • Date gameEnd : goodie: date de fin du jeu
  • Array of Move moves : les coups, valides ou non
  • Array of Piece board : l'état de la grille au dernier coup
  • Array of Piece killed : listes des pieces prises
  • registerPlayer
  • move(PlayerColor color, Position pos);

}

 
project/waoc.txt · Last modified: 2010/10/01 14:07 by glennrolland
[unknown button type]
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki