我正在用Ruby编写一个简单的命令行棋盘游戏。我需要有主要的游戏代码,然后为两个球员的独立代码,将由两个不同的人或团队编写。因此,主游戏需要允许不同的玩家在不更改任何代码的情况下进行游戏。
我一直在想办法做到这一点,但这是我承担过的最大的编程项目,坦率地说,我还没有一个好主意。
两个玩家程序都应该定义一个主游戏调用的方法吗?我是否应该有一个Player类,并让player-Programms子类化它?我尝试了一些东西,但它似乎从来都不是我想要的,也不是什么可以被认为是像样的设计。
在Ruby (或任何其他语言,因为这是一个一般的编程问题)中,有什么好方法可以做到这一点呢?
我希望我能够正确地表达这个问题。
发布于 2011-12-31 07:41:25
我想说,子类方法听起来不错(在其他语言中,接口可能是更好的选择,但我不认为Ruby中存在接口)。每个player类必须实现的方法应该将包含整个游戏状态(例如棋子位置,如果您正在下棋)的对象作为参数。此对象必须是只读的,或者必须是游戏状态的副本,以便玩家类不能直接更改游戏状态。相反,player类必须实现的方法应该返回一些值,指示玩家希望做什么动作。我认为Ruby支持某种机制,根据类和文件的名称从另一个文件动态实例化一个类。您可以像这样启动游戏,使用参数来指示文件和类名:
ruby game.rb player1.rb Player1Class player2.rb Player2Class这个游戏可能看起来像这样的伪代码:
gameState = createObjectDescribingInitialGameState()
player1FileName = args[0]
player1ClassName = args[1]
player2FileName = args[2]
player2ClassName = args[3]
player1 = dynamicallyInstantiateClassFromFile(player1ClassName, player1FileName)
player2 = dynamicallyInstantiateClassFromFile(player2ClassName, player2FileName)
currentPlayer = player1
while not gameState.isGameOver():
move = currentPlayer.makeMove(gameState.createReadOnlyCopy())
gameState.peformMove(move)
currentPlayer = player2 if currentPlayer == player1 else player1使用这种方法,您只需编写一次核心游戏代码,即可使用任何一对player类启动它,而无需修改。
https://stackoverflow.com/questions/8684918
复制相似问题