Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 游戏实现的设计模式_Design Patterns - Fatal编程技术网

Design patterns 游戏实现的设计模式

Design patterns 游戏实现的设计模式,design-patterns,Design Patterns,对不起,通用的标题,如果有人在阅读下面有一个更好的,请更改它 我正在用python实现一个流行的棋盘游戏。一个游戏功能包括五堆代币,玩家可以从中取出。我很难想出一种用代码表示这一点的好方法。我当前的实现看起来有点像这样(简化后): 职业游戏: 定义初始化(自): ... self.tokens=num_tokens 职业球员: def take_令牌(自我,游戏): 游戏.令牌[令牌]-=1 self.tokens[token]+=1 return game#更新后的游戏实例

对不起,通用的标题,如果有人在阅读下面有一个更好的,请更改它

我正在用python实现一个流行的棋盘游戏。一个游戏功能包括五堆代币,玩家可以从中取出。我很难想出一种用代码表示这一点的好方法。我当前的实现看起来有点像这样(简化后):

职业游戏:
定义初始化(自):
...        
self.tokens=num_tokens
职业球员:
def take_令牌(自我,游戏):
游戏.令牌[令牌]-=1
self.tokens[token]+=1
return game#更新后的游戏实例
对我来说,这显然是一个糟糕的想法,因为我正在将游戏状态传递给
Player
,只是为了操纵它,然后将它发送回。。。应该有一种更简洁的方式来表示这一点。问题是我喜欢将每个对象的数据存储在
self
下,因为这似乎是将数据绑定到对象的好方法。有人能帮我确定合适的设计模式吗?

怎么样

职业游戏:
定义初始化(自):
...        
self.tokens=num_tokens
def给_令牌(自身,令牌):
如果game.tokens[token]>0:
游戏.令牌[令牌]-=1
返回1
其他:
返回0
职业球员:
def take_令牌(自我,游戏):
self.tokens[token]+=game.give_token(token)

由于这是一个基于设计的问题,我想说的是,您将更多的责任交给了单个类(在您的情况下是玩家),而不是要求的。 要编写更独立的代码,必须遵循“单一责任原则” 您必须按照前面的答案中的建议编写松散耦合的代码


在这个链接中有一个很好的读物:

经过一些讨论,我们决定在保持相关属性的对象所有权的同时保持封装的最佳方法是通过错误传播的getter和setter:

职业游戏:
定义初始化(自):
...        
self.tokens=num_tokens
def take_令牌(自身):
如果self.tokens≤ 0:
引发运行时错误(“尝试从空堆中提取”)
self.tokens-=1
返回真值
职业球员:
def take_令牌(自我,游戏):
如果是游戏。请获取令牌()
self.tokens[token]+=1

这样,每个对象都可以进行自己的记帐,同时为内部数据保留适当的边界。

谢谢。我很好奇你对我们得出的解决方案有什么看法(见下面我的答案)。@eykanal是的,你把责任交给了游戏班,坚持这个原则