00001 /* gameManager.h 00002 */ 00003 #ifndef GAMEPLAYING_GAMEMANAGER_H 00004 #define GAMEPLAYING_GAMEMANAGER_H 00005 #include "osl/misc/carray.h" 00006 #include "osl/game_playing/timeKeeper.h" 00007 #include "osl/move.h" 00008 #include <boost/scoped_ptr.hpp> 00009 00010 namespace osl 00011 { 00012 class Sennichite; 00013 namespace game_playing 00014 { 00015 class GameState; 00016 class CsaLogger; 00017 class ComputerPlayer; 00018 class MoveWithComment; 00019 00020 class GameManager 00021 { 00022 protected: 00023 CArray<ComputerPlayer*,2> players; 00024 CArray<bool,2> computers; 00025 boost::scoped_ptr<GameState> state; 00026 boost::scoped_ptr<CsaLogger> logger; 00027 TimeKeeper time_keeper; 00028 private: 00029 int byoyomi; 00030 00031 ComputerPlayer *player(Player turn) const 00032 { 00033 return players[playerToIndex(turn)]; 00034 } 00035 public: 00036 struct EndGame {}; 00041 GameManager(ComputerPlayer *black, ComputerPlayer *white, CsaLogger *logger); 00042 virtual ~GameManager(); 00043 void load(const char *csa_filename, bool verbose=false); 00044 void setTimeLeft(int black_time, int white_time); 00045 void setByoyomi(int seconds) { byoyomi = seconds; } 00046 00047 void resetLogger(CsaLogger *l); 00048 00049 void setComputerPlayer(Player turn, bool is_computer); 00050 bool isComputer(Player turn) const 00051 { 00052 return computers[playerToIndex(turn)] && player(turn); 00053 } 00054 00058 const MoveWithComment computeMove(int& consumed); 00059 int eval(Player turn, Move m); 00060 protected: 00061 const Sennichite pushMove(const MoveWithComment&, int seconds); 00062 void popMove(); 00063 }; 00064 00065 } // namespace game_playing 00066 } // namespace osl 00067 00068 #endif /* _GAMEMANAGER_H */ 00069 // ;;; Local Variables: 00070 // ;;; mode:c++ 00071 // ;;; c-basic-offset:2 00072 // ;;; End: