所以我正在开发一个基本的文字游戏,你会得到一个字母“手”(字典对象),你可以用它来创建单词并获得分数。
这个“手”用于许多功能的参数:计算玩家的分数,在玩家使用一个或多个字母后更新手牌中的字母数量,显示手牌,检查玩家的话的有效性,等等
从我读过的所有内容来看,我知道如果可以的话,我应该避免使用全局变量(尽管我仍然不完全确定为什么)。
那么对于许多使用“手”作为参数的函数,我可以使用什么其他通用方法呢?
所以我正在开发一个基本的文字游戏,你会得到一个字母“手”(字典对象),你可以用它来创建单词并获得分数。
这个“手”用于许多功能的参数:计算玩家的分数,在玩家使用一个或多个字母后更新手牌中的字母数量,显示手牌,检查玩家的话的有效性,等等
从我读过的所有内容来看,我知道如果可以的话,我应该避免使用全局变量(尽管我仍然不完全确定为什么)。
那么对于许多使用“手”作为参数的函数,我可以使用什么其他通用方法呢?
它被称为对象。创建一个具有共享状态的类,以及共享该状态的函数。
这比全局变量更好的原因是它是同一概念的一个更受限制的版本 - 您可以清楚地看到哪些函数正在操纵这些变量,并记录(并强制执行)这些变量的预期不变量。使用全局变量,最终很容易拥有对共享变量的状态有不同期望的函数。
它还允许您拥有同一对象的多个副本,因此您不必将变量转换为集合并在集合成员之间进行关联,而是拥有一个对象集合,这使您的代码更简单。然后,只需通过您定义的函数来操作这些对象就很简单了。
使用类封装...见下文...游戏知双手
class Hand:
def __init__(self):
num_cards = 7
self.cards = ["a" for i in range(num_cards)]
class Game:
def __init__(self,num_hands=2):
self.hands = [Hand() for i in range(num_hands)]
self.current_turn = 0
def play(self):
self.hands[self.current_turn].play()
self.current_turn = (self.current_turn+1)%len(self.hands)
这是 Python 3 代码;Python 2 中的类应该派生自object
.
...虽然他们不是必需的。如果他们不这样做,他们会失去一些功能