As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center作为指导。
                            
                        
                    
                
                7年前关闭。
            
        

我目前正在学习Java的原因有很多,但主要的原因之一是它是一种非常面向OOP的语言,用Java编写代码确实可以帮助我理解OOP编程背后的核心概念。

但是,我很难定义班级之间的关系。我了解继承和组合之间的区别,但是我在查看整体情况以及我的所有类应该如何整体协同工作方面遇到一些困难。

我将如何使用OOP编写一个井字游戏的简单示例;


创建Game类-创建gameBoard类的实例,
决定谁先开始,跟踪获胜和失败的比赛,开始
并结束游戏。
创建gameBoard类-更新井字棋盘,
确定下一个玩家的回合(如果移动合法),以及
确定何时有赢家
创建一个抽象Player类-容纳玩家的方块(X或O),以及
包含一个以gameBoard实例为参数的方法,以及
将玩家的举动传递给实例引用
创建扩展Human类的Player类。包含
处理键盘输入的方法
创建扩展Computer类的Player类。有一个
gameBoard实例作为参数并进行分析的方法
在游戏板上进行获胜动作,盖帽动作或其他任何动作
先走后走


这就是我要采取的方法。但是,我在将所有类联系在一起时遇到了一些麻烦。在某些情况下,对于某些方法和字段应属于哪条线,似乎有些模糊。

编辑:修订的问题:

在为我的班级确定清晰,定义的角色而又不会太忙于尝试定义和封装程序的各个方面时,哪种方法好呢?我的很多对象都可以从其他类中调用以执行每个类具有的特定功能,即Player更新gameBoardgameBoard更新Game,但是我不知道这是否是一个好习惯,或者传递过多的对象引用将使代码僵化且难以维护。

最佳答案

马丁(Martyn),请尝试将问题中的每个关系归类为“是”或“具有”。这将使解决类关系变得更加容易。

例如,

Game has-a Gameboard
Human is-a Player
Computer is-a Player


接着

Game has-a Player1
Game has-a Player2


等等

看看如何进行,您将回答许多自己的问题。祝好运!

编辑:您写道:Player更新gameBoardgameBoard更新Game

您能这样做吗,使“游戏”在游戏控制中更重要?

Game asks player to select next move from GameBoard
Player looks on Gameboard to see possible legal moves
Player selects a legal move and returns it to Game
Game plays the move on the GameBoard
Game checks the Gameboard to see if any player has won
if not, Game ends the turn and goes to the next player
...

09-26 14:19