我将使用Java(或其他OO语言)开发Tic-Tac-Toe游戏。现在我脑海里想到了一般设计。
接口: 玩家,然后我将能够根据我想要对手的方式实现几个玩家类,例如随机玩家,智能玩家等。
类: Board类,带有二维整数数组,0表示打开,1表示我,-1表示对手。评估函数也将在这里,根据当前的电路板安排返回下一个最佳移动,并且轮到它。
裁判类,它将创建董事会实例和两个玩家实例,然后开始游戏。
这是我的OO设计的粗略概念。请问有人批评我吗?我发现这真的很有益。非常感谢你。
答案 0 :(得分:8)
当我想到对象结构时,我认为我的方法是做两件事之一:
1)向'对象'询问问题
2)命令'对象'做某事
话虽如此,对我来说,询问“董事会”下一步最佳举措是没有意义的。董事会应该只是持有价值并告诉你它的状态。
我可能会有一个专门用于确定给定“情报”的最佳下一步行动的对象。我们称之为'move_brain'。然后你可以说,“嘿move_brain,鉴于这个板块和这个级别的情报,下一个最好的举动是什么?”
您已经概述的董事会课程现在有许多职责:持有州,允许用户移动,以及考虑如何移动下一步。这太重要了。
毕竟,我会这样说:鉴于这个程序不是很大,几乎任何解决方案都可以。
祝你好运!
答案 1 :(得分:5)
我定义了3个接口:
以下是每个班级的简要概述:
游戏:
IP层:
您可以运行如下代码:
IPlayer meAsAPlayer = new UserPlayer(); //you'd have to implement this
//as an "empty" class that would let the user
//specify the actions
IPlayer AIPlayer = new AIPlayer(); //one AI class you'd have implemented
Game game = new Game(meAsAPlayer, AIPlayer);
game.start(); //this would run one game to the end
game.start(); //this would be the second game already
这将是游戏类决定哪些游戏是正确的,哪些不会。如果玩家试图进行不正确的游戏,它会阻止它并再次调用该玩家的OnTurn()事件。
或者不是定义IPlayer接口,您可以定义一个APlayer抽象类,它只允许您进行正确的移动。
答案 2 :(得分:1)
我会说使用我和对手进行球员动作并不是很正确。它应该是Xs和Os或者第一和第二个玩家。除此之外,你有一个开始。输入将在何处处理?裁判或在董事会广场或其他地方?另外,在1场比赛之后存在的统计跟踪怎么样?
只是一些想法。
答案 3 :(得分:1)
一般的想法应该是尽可能使对象成为自包含和单一的对象。 这样可以让您更快更紧凑地设计。
另外,不要害怕将最小的作品建模为自己的类实体。如果您可以直接从一开始就从高级建模,那么交互就会简单得多。
答案 4 :(得分:1)
对于其中一个,您需要使用一些符号值(如枚举或常量)来表示电路板中插槽的状态。