回顾我的设计:使用面向对象方法的Tic tac toe游戏

时间:2011-07-04 13:30:37

标签: java oop class-design

这是一个面试问题。

使用面向对象的原则设计一个tic tac toe。采访者说他对逻辑不感兴趣,他只想要设计。我给出了如下设计,但我并不完全满意。如果有任何建议/改进,请告诉我。

面试官非常关注两件事

  1. 游戏可以播放n x n个方格。
  2. 游戏规则应与应用程序的其他部分分开。
  3. 我的方法:

    1. Tic tac toe是一款棋盘游戏(游戏对象,棋盘对象)
    2. Board由一组Squares(Square object)
    3. 组成
    4. 正方形可以标记为X或O。
    5. 两名玩家玩游戏(人类和计算机类实现玩家界面)
    6. 放置X或O后,GameEngine(GameEngine对象)决定游戏是否   结束(平局或玩家赢了)或者它仍然在
    7. 如果游戏仍然开启,则另一位玩家轮到他了。
    8. 对于电脑播放器,GameEngine会找出下一张电影的位置。
    9. 课程的粗略草图。

       interface Player {
          Player takeTurn();
        void markNextBox();
        }
      

       public class TicTacToeGameEngine implements GameRule{
      @Override
      public Boolean isWinner(Game game) {
              // Check winner logic
              return false;
      }
      
      @Override
      public Square locateSquareToMark(Game game) {
          List<Square> squares= game.getBoard().getFilledSquares();
          //go through the list of squares and figure out a square to mark
          return square;
          }
       }
      

        public class Computer implements Player {
      GameRule g = new TicTacToeGameEngine();
      @Override
      public void markNextBox() {
          g.locateSquareToMark(game);
      }
      @Override
      public Player takeTurn() {
          // TODO Auto-generated method stub
          return null;
      }
       }
      

       public interface GameRule {
          Boolean isWinner(Game game);
          Square locateSquareToMark(Game game);
           }
      

      //人类

      的类似实现

      现在我在这个设计中遇到的困难是

      1. 玩家是否需要了解GameEngine?
      2. 如果游戏仍然开启,如何将控制传递给下一位玩家。 (如何实现takeTurn())
      3. 我最初认为Game对象应该保持状态。如果你看一下Computer类,我将游戏对象传递给GameEngine。这样做好吗?我觉得可以做些更好的事情。
      4. 任何缺陷,设计的改进都将受到赞赏。

0 个答案:

没有答案