2015-01-09 16 views
2

我正在用Java编写一个国际象棋游戏,它已经设置了一个Board类,它有一个2d的Square对象数组。每个正方形都有一个高度和宽度(0到7之间)。我要写一个方法,它需要一个方形对象,一个垂直偏移量和一个水平偏移量。例如:如果我打电话给getNearbySquare(mySquare,3,2),它应该返回棋盘上的方形对象,它位于mysquare的上方3,mySquare的右边2。爪哇国际象棋:应该找到附近的广场是方形或板类的方法吗?

我最初在Square类中将它写成实例方法,它只是在垂直和水平偏移量中。问题是,我正在创建并返回一个新的方形对象,而不是我的Board类中的2d数组中的正确对象。

我看到两个选项:

1)使在Square类的实例方法,该方法在一局对象,垂直偏移量和水平偏移量。我将找到调用此方法的方形对象的当前高度和宽度,添加垂直和水平偏移量以获取所需平方的Board中的新位置,然后使用Board [newHeight] [newWidth]访问它。

2)在Board类中创建一个实例方法做同样的事情,但不要求我像在1)中那样传递Board对象。相反,我需要传入方形对象。

只要做出这些决定,是否有一个普遍接受的做法?

感谢您的帮助, Mariogs

+0

董事会需要了解的广场,没有那么多的相反。这应该是董事会类的一种方法。 – 2015-01-09 22:33:40

回答

5

从一个非常简单的视点它更有意义的getNearbySquare()方法是为Board,而不是从正方形,因为该方法需要亲密信息的实例方法关于板的布局和布局,这将更容易从Board实例中进行(并保持封装/松散耦合)。

Square实例上使用方法意味着给方块对象访问有关应该可能是私有的板的信息。

相关阅读;

+0

尽管如此:当用户点击一个方块时,我将要访问该板(如您所建议的那样调用getNearbySquare())。但我没有提到董事会,除非我把它变成一个Square的领域......但是Square知道它的董事会...... – bclayman 2015-01-09 23:09:58

+0

@Mariogs - 只是为了反映Leandro的观点,只要董事会拥有自己的内部组件(领域),它就可以参考它所属的董事会。 – 2015-01-10 09:38:31

1

这是罚款的方知道它所属的广场外,董事会并不孤立。否则,广场不知道它的位置是没有意义的。当用户点击Square时,Square可能会将该事件传达给其董事会,董事会将根据Square的位置对用户行为做出反应。鉴于董事会也应该知道它的方格,它很容易计算出哪一方会成为下一步行动的目标。

参见OOP Design for Chess Game in Java (Trouble with Piece/Board Interaction)