手游抽卡系统,用观察者模式举个例子
时间: 2023-11-22 08:54:40 浏览: 152
好的,假设你正在开发一款手游,其中有一个抽卡系统。抽卡系统中有多个角色,每个角色都有不同的稀有度和属性。现在,你想要实现一个观察者模式来让玩家在抽到不同的角色时获得不同的提示。
首先,你需要创建一个被观察者类 CardSystem,它包含了所有的角色信息和抽卡方法。当玩家抽到一个角色时,CardSystem 将会通知所有观察者。
```python
class CardSystem:
def __init__(self):
self.observers = []
self.characters = []
def add_observer(self, observer):
self.observers.append(observer)
def remove_observer(self, observer):
self.observers.remove(observer)
def notify_observers(self, character):
for observer in self.observers:
observer.update(character)
def add_character(self, character):
self.characters.append(character)
def draw_card(self):
character = random.choice(self.characters)
self.notify_observers(character)
```
然后,你需要创建一个观察者类 Observer,它包含了玩家抽到不同角色时的提示信息。在 Observer 类中,你需要实现一个 update 方法,用来接收通知并显示相应的提示。
```python
class Observer:
def __init__(self, name):
self.name = name
def update(self, character):
if character.rarity == 'SR':
print(f'{self.name}抽到了一个稀有度为SR的角色!')
elif character.rarity == 'R':
print(f'{self.name}抽到了一个稀有度为R的角色!')
elif character.rarity == 'N':
print(f'{self.name}抽到了一个稀有度为N的角色!')
```
最后,你需要在程序中实例化 CardSystem 和 Observer,并将 Observer 加入到 CardSystem 的观察者列表中。现在,每当玩家抽到一个角色时,所有观察者都会收到通知并显示相应的提示。
```python
card_system = CardSystem()
observer1 = Observer('玩家1')
observer2 = Observer('玩家2')
card_system.add_observer(observer1)
card_system.add_observer(observer2)
card_system.add_character(Character('角色1', 'SR', '属性1'))
card_system.add_character(Character('角色2', 'R', '属性2'))
card_system.add_character(Character('角色3', 'N', '属性3'))
card_system.draw_card() # 玩家1抽到了一个稀有度为R的角色! 玩家2抽到了一个稀有度为SR的角色!
```
阅读全文