forked from openkylin/bovo
119 lines
3.0 KiB
C++
119 lines
3.0 KiB
C++
/*******************************************************************
|
|
*
|
|
* Copyright 2007 Aron Boström <c02ab@efd.lth.se>
|
|
*
|
|
* Bovo 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, or (at your option)
|
|
* any later version.
|
|
*
|
|
* Bovo 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 Bovo; see the file COPYING. If not, write to
|
|
* the Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301, USA.
|
|
*
|
|
********************************************************************/
|
|
|
|
/** @file move.h declares Move */
|
|
|
|
#ifndef BOVO_MOVE_H
|
|
#define BOVO_MOVE_H
|
|
|
|
#include "common.h"
|
|
#include "coord.h"
|
|
|
|
/** namespace for game engine */
|
|
namespace bovo
|
|
{
|
|
|
|
/**
|
|
* @brief class representing a move (a Coord and a Player id)
|
|
* @description this class represents a game move, that is a player id (Player)
|
|
* and a coordinate (Coord).
|
|
*
|
|
* @code
|
|
* Move illegalMove(); // represents the move "-1", i.e. the move before the
|
|
* // first move in the game
|
|
* Move myMove(X, Coord(x, y));
|
|
* Move identicalMove(myMove.player(), myMove.x(), myMove.y());
|
|
* illegalMove.valid() == false;
|
|
* myMove.valid == true; // if Coord(x, y) is in range
|
|
* @endcode
|
|
*/
|
|
class Move
|
|
{
|
|
public:
|
|
/**
|
|
* @brief constructs Move
|
|
* @description creates a Move with a Player and a coordinate
|
|
* @param player player
|
|
* @param col x-coordinate
|
|
* @param row y-coordinate
|
|
*/
|
|
explicit Move(Player player = No, int col = -1, int row = -1);
|
|
|
|
/**
|
|
* @brief constructs Move
|
|
* @description creates a Move with a Player and a coordinate
|
|
* @param player player
|
|
* @param coord coordinate
|
|
*/
|
|
Move(Player player, const Coord &coord);
|
|
|
|
/**
|
|
* @brief constructs Move
|
|
* @description copy constructor for Move
|
|
*/
|
|
Move(const Move &m);
|
|
|
|
~Move();
|
|
|
|
/**
|
|
* @brief returns the Coord
|
|
* @return the coordinate
|
|
*/
|
|
Coord coord() const;
|
|
|
|
/**
|
|
* @brief returns the Player
|
|
* @return the player
|
|
*/
|
|
Player player() const;
|
|
|
|
/**
|
|
* @brief returns whether this is a valid move
|
|
* @description tells if the player of this move is X or O and the coord
|
|
* is within the playing board limits.
|
|
* @return \c true if move is valid, \c false otherwise
|
|
*/
|
|
bool valid() const;
|
|
|
|
/**
|
|
* @brief x-coordinate
|
|
* @return the x-coordinate
|
|
*/
|
|
usi x() const;
|
|
|
|
/**
|
|
* @brief y-coordinate
|
|
* @return the y-coordinate
|
|
*/
|
|
usi y() const;
|
|
|
|
private:
|
|
/* the coordinate */
|
|
Coord m_coord;
|
|
|
|
/* the player */
|
|
Player m_player;
|
|
};
|
|
|
|
} /* namespace gui */
|
|
|
|
#endif // BOVO_MOVE_H
|