/* $Id$ Copyright (C) 2006-2007 by David Cotton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package fr.free.jchecs.core; import static fr.free.jchecs.core.Constants.FILE_COUNT; import static fr.free.jchecs.core.Constants.RANK_COUNT; /** * Version modifiable d'une description d'état du jeu. * <p> * Attention : cette classe a pour unique but de faciliter l'initialisation d'une première instance * immuable de l'état. Elle ne dispose volontairement pas d'une implémentation pour les méthodes * indispensables aux moteurs d'IA. * </p> * * @author David Cotton */ final class MutableBoard extends AbstractBoard { /** Identifiant de la classe pour la sérialisation. */ private static final long serialVersionUID = -3845129626288554731L; /** Description du plateau. */ private final Piece [][] _pieces = new Piece [ FILE_COUNT ] [ RANK_COUNT ]; /** * Crée une nouvelle instance de description modifiable d'état de jeu. */ MutableBoard() { // Rien de spécifique... } /** * Renvoi l'éventuelle pièce présente sur la case indiquée. * * @param pCase Case à tester. * @return Pièce présente sur la case (ou null si aucune). */ public Piece getPieceAt(final Square pCase) { assert pCase != null; return getPieceAt(pCase.getFile(), pCase.getRank()); } /** * Renvoi l'éventuelle pièce présente sur la case dont les coordonnées sont indiquées. * * @param pColonne Colonne de la case à tester (de 0 à 7). * @param pLigne Ligne de la case à tester (de 0 à 7). * @return Pièce présente sur la case (ou null). */ public Piece getPieceAt(final int pColonne, final int pLigne) { assert (pColonne >= 0) && (pColonne < FILE_COUNT); assert (pLigne >= 0) && (pLigne < RANK_COUNT); return _pieces[pColonne][pLigne]; } /** * Alimente une case avec une (éventuelle) pièce. * * @param pPiece Pièce à mettre dans la case (ou null si aucune). * @param pCase Cellule cible. */ void setPieceAt(final Piece pPiece, final Square pCase) { assert pCase != null; _pieces[pCase.getFile()][pCase.getRank()] = pPiece; } }