3

所以我正在开发一个基本的文字游戏,你会得到一个字母“手”(字典对象),你可以用它来创建单词并获得分数。

这个“手”用于许多功能的参数:计算玩家的分数,在玩家使用一个或多个字母后更新手牌中的字母数量,显示手牌,检查玩家的话的有效性,等等

从我读过的所有内容来看,我知道如果可以的话,我应该避免使用全局变量(尽管我仍然不完全确定为什么)。

那么对于许多使用“手”作为参数的函数,我可以使用什么其他通用方法呢?

4

2 回答 2

9

它被称为对象。创建一个具有共享状态的,以及共享该状态的函数。

这比全局变量更好的原因是它是同一概念的一个更受限制的版本 - 您可以清楚地看到哪些函数正在操纵这些变量,并记录(并强制执行)这些变量的预期不变量。使用全局变量,最终很容易拥有对共享变量的状态有不同期望的函数。

它还允许您拥有同一对象的多个副本,因此您不必将变量转换为集合并在集合成员之间进行关联,而是拥有一个对象集合,这使您的代码更简单。然后,只需通过您定义的函数来操作这些对象就很简单了

于 2012-09-18T17:45:16.963 回答
8

使用类封装...见下文...游戏知双手

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.

...虽然他们不是必需的。如果他们不这样做,他们会失去一些功能

于 2012-09-18T17:47:59.790 回答