Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef enum {NONE,BLACK,WHITE} Color;
- class GameCompleted : std::exception
- {
- Color result;
- public:
- void print();
- };
- class Game;
- /// Доска. Обеспечивает постановку фишек согласно правилам, может выдавать сигнал завершения игры
- class Desk
- {
- public:
- static const int size=15;
- void clearForNewGame();
- void makeMove(int x,int y,Color t) throw(GameCompleted);
- void print();
- Color at(int x,int y) const {return cell[x][y];}; ///< состояние ячейки доски. Вообще-то x и у можно объединить в объект позицию.
- private:
- Color cell[size][size];
- };
- /// Игрок может принимать участие в игре и делать ходы. Игформацию о ситуации получает через интерфейсы игры и доски.
- class Player
- {
- Color color;
- Game* game;
- public:
- void takePart(Game* game_,Color color_){game=game_;color=color_;};
- void makeMove();
- };
- class HumanPlayer : public Player {}; ///< Человек. Класс выводит состояние и запрашивает ход с консоли.
- class RobotPlayer : public Player {}; ///< Робот. Опрашивает доску, вычисляет наилучший ход, ходит.
- /// Одна партия.
- class Game
- {
- Desk desk;
- Player p1,p2;
- public:
- Game(Desk& desk_,Player&p1_,Player&p2_):desk(desk_),p1(p1_),p2(p2_){};
- void run()
- {
- desk.clearForNewGame();
- p1.takePart(this,BLACK);
- p2.takePart(this,WHITE);
- try
- {
- while(true)
- {
- p1.makeMove();
- p2.makeMove();
- }
- }catch(GameCompleted result)
- {
- result.print();
- }
- }
- Desk& getDesk(){return desk;};
- };
- void runOneGame()
- {
- RobotPlayer robot1,robot2;
- Desk desk1;
- Game game(desk1,robot1,robot2);
- game.run();
- }
Add Comment
Please, Sign In to add comment