2005-08-16 00:20:20 +02:00
|
|
|
/* Eliot */
|
|
|
|
/* Copyright (C) 1999 Antoine Fraboulet */
|
|
|
|
/* */
|
|
|
|
/* This file is part of Eliot. */
|
|
|
|
/* */
|
|
|
|
/* Eliot 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. */
|
|
|
|
/* */
|
|
|
|
/* Eliot 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 */
|
2005-10-23 16:53:42 +02:00
|
|
|
/* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
|
2005-08-16 00:20:20 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* \file history.h
|
|
|
|
* \brief Game history system
|
|
|
|
* \author Antoine Fraboulet
|
|
|
|
* \date 2005
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _HISTORY_H
|
|
|
|
#define _HISTORY_H
|
|
|
|
|
|
|
|
#include <vector>
|
2005-12-26 16:33:15 +01:00
|
|
|
|
|
|
|
class Turn;
|
|
|
|
class PlayedRack;
|
|
|
|
class Round;
|
2005-08-16 00:20:20 +02:00
|
|
|
|
2005-12-26 20:19:42 +01:00
|
|
|
/**
|
|
|
|
* History stores all the turns that have been played
|
|
|
|
* This class is used many times in the game
|
|
|
|
* - one for the complete game
|
|
|
|
* - one for each of the players
|
|
|
|
*
|
|
|
|
* A History is never empty (getSize() can be used as the is the current turn
|
|
|
|
* number for the complete game history). The top of the history is an empty
|
|
|
|
* Turn until it has been filled and game is up to a new round.
|
|
|
|
*
|
|
|
|
* getCurrentRack() can/should be used to store the current played rack.
|
|
|
|
* setCurrentRack must be called whenever the current played rack is
|
|
|
|
* modified.
|
|
|
|
*
|
|
|
|
* History owns the turns that it stores. Do not delete a turn referenced by History
|
|
|
|
*/
|
|
|
|
|
2005-08-16 00:20:20 +02:00
|
|
|
class History
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
History();
|
2005-12-26 16:33:15 +01:00
|
|
|
virtual ~History();
|
2005-11-04 21:00:05 +01:00
|
|
|
|
2005-08-16 00:20:20 +02:00
|
|
|
/// get the size of the history
|
2005-12-26 16:33:15 +01:00
|
|
|
int getSize() const;
|
2005-08-16 00:20:20 +02:00
|
|
|
|
2005-11-04 21:00:05 +01:00
|
|
|
/// Get the (possibly incomplete) rack
|
2005-12-26 16:33:15 +01:00
|
|
|
const PlayedRack& getCurrentRack() const;
|
2005-08-16 00:20:20 +02:00
|
|
|
|
|
|
|
/// Set the current rack
|
2005-12-26 16:33:15 +01:00
|
|
|
void setCurrentRack(const PlayedRack &iPld);
|
2005-11-04 21:00:05 +01:00
|
|
|
|
2005-08-16 00:20:20 +02:00
|
|
|
/// Get the previous turn
|
2005-12-26 16:33:15 +01:00
|
|
|
const Turn& getPreviousTurn() const;
|
|
|
|
|
|
|
|
/// Get turn 'n'
|
|
|
|
const Turn& getTurn(unsigned int) const;
|
2005-08-16 00:20:20 +02:00
|
|
|
|
2005-12-26 16:33:15 +01:00
|
|
|
/// Update the "history" with the given round and complete the turn.
|
|
|
|
/// A new turn is created with the remaining letters in the rack
|
2005-08-16 00:20:20 +02:00
|
|
|
void playRound(int player, int turn, const Round& round);
|
|
|
|
|
|
|
|
/// Remove last turn
|
|
|
|
void removeLastTurn();
|
2005-11-04 21:00:05 +01:00
|
|
|
|
2005-12-26 16:33:15 +01:00
|
|
|
/// String handling
|
2005-08-16 00:20:20 +02:00
|
|
|
std::string toString() const;
|
|
|
|
|
|
|
|
private:
|
2005-12-26 16:33:15 +01:00
|
|
|
std::vector < Turn* > m_history;
|
2005-08-16 00:20:20 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
2005-12-26 16:33:15 +01:00
|
|
|
|
2005-08-16 00:20:20 +02:00
|
|
|
/// Local Variables:
|
2005-12-26 20:19:42 +01:00
|
|
|
/// mode: c++
|
2005-08-16 00:20:20 +02:00
|
|
|
/// mode: hs-minor
|
|
|
|
/// c-basic-offset: 4
|
|
|
|
/// End:
|