Guest User

Untitled

a guest
Jun 25th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.89 KB | None | 0 0
  1.  
  2. typedef enum {NONE,BLACK,WHITE} Color;
  3.  
  4. class GameCompleted : std::exception
  5. {
  6.     Color result;
  7. public:
  8.     void print();
  9. };
  10.  
  11. class Game;
  12.  
  13. /// Доска. Обеспечивает постановку фишек согласно правилам, может выдавать сигнал завершения игры
  14. class Desk
  15. {
  16. public:
  17.     static const int size=15;
  18.     void clearForNewGame();
  19.     void makeMove(int x,int y,Color t) throw(GameCompleted);
  20.     void print();
  21.     Color at(int x,int y) const {return cell[x][y];}; ///< состояние ячейки доски. Вообще-то x и у можно объединить в объект позицию.
  22. private:
  23.     Color cell[size][size];
  24. };
  25.  
  26. /// Игрок может принимать участие в игре и делать ходы. Игформацию о ситуации получает через интерфейсы игры и доски.
  27. class Player
  28. {
  29.     Color color;
  30.     Game* game;
  31. public:
  32.     void takePart(Game* game_,Color color_){game=game_;color=color_;};
  33.     void makeMove();
  34. };
  35. class HumanPlayer : public Player {}; ///< Человек. Класс выводит состояние и запрашивает ход с консоли.
  36. class RobotPlayer : public Player {}; ///< Робот. Опрашивает доску, вычисляет наилучший ход, ходит.
  37.  
  38. /// Одна партия.
  39. class Game
  40. {
  41.     Desk desk;
  42.     Player p1,p2;
  43.  
  44. public:
  45.     Game(Desk& desk_,Player&p1_,Player&p2_):desk(desk_),p1(p1_),p2(p2_){};
  46.     void run()
  47.     {
  48.         desk.clearForNewGame();
  49.         p1.takePart(this,BLACK);
  50.         p2.takePart(this,WHITE);
  51.  
  52.         try
  53.         {
  54.             while(true)
  55.             {
  56.                 p1.makeMove();
  57.                 p2.makeMove();
  58.             }
  59.         }catch(GameCompleted result)
  60.         {
  61.             result.print();
  62.         }
  63.     }
  64.  
  65.     Desk& getDesk(){return desk;};
  66. };
  67.  
  68.  
  69. void runOneGame()
  70. {
  71.     RobotPlayer robot1,robot2;
  72.     Desk desk1;
  73.     Game game(desk1,robot1,robot2);
  74.     game.run();
  75. }
Add Comment
Please, Sign In to add comment