用python写一个狼人杀
时间: 2023-06-11 16:06:51 浏览: 49
狼人杀是一款非常流行的桌面游戏,它的规则比较复杂,需要考虑到各种不同的情况。在Python中,我们可以使用面向对象的编程方式来实现这个游戏。
首先,我们需要定义一些角色类,包括狼人、村民、预言家、女巫等等。每个角色类都需要有自己的属性和方法,比如说狼人需要有杀人的能力,女巫需要有救人和毒人的能力等等。
接下来,我们需要定义一个游戏类,用来管理整个游戏的流程。游戏类需要有一些方法,比如说开始游戏、分配角色、指定第一个发言的人等等。游戏类还需要有一个状态变量,用来记录当前游戏的状态,比如说是白天还是黑夜,是否有人死亡等等。
最后,我们需要编写一个主程序,用来启动游戏。主程序需要创建一个游戏对象,并调用游戏对象的方法来开始游戏。
下面是一个简单的代码示例,实现了狼人杀游戏的基本功能:
```python
import random
class Player:
def __init__(self, name):
self.name = name
class Werewolf(Player):
def __init__(self, name):
super().__init__(name)
self.role = 'Werewolf'
def kill(self, players):
# 选择一名玩家杀害
victim = random.choice(players)
print(f'{self.name} killed {victim.name}.')
return victim
class Villager(Player):
def __init__(self, name):
super().__init__(name)
self.role = 'Villager'
class Seer(Player):
def __init__(self, name):
super().__init__(name)
self.role = 'Seer'
def check(self, players):
# 选择一名玩家查验身份
target = random.choice(players)
print(f'{self.name} checked {target.name}, who is a {target.role}.')
class Witch(Player):
def __init__(self, name):
super().__init__(name)
self.role = 'Witch'
self.poisoned = False
self.saved = False
def poison(self, players):
# 选择一名玩家毒死
victim = random.choice(players)
print(f'{self.name} poisoned {victim.name}.')
victim.poisoned = True
def save(self, victim):
# 救治一名玩家
print(f'{self.name} saved {victim.name}.')
victim.saved = True
class Game:
def __init__(self, players):
self.players = players
self.werewolves = [p for p in players if p.role == 'Werewolf']
self.villagers = [p for p in players if p.role != 'Werewolf']
self.seer = [p for p in players if p.role == 'Seer'][0]
self.witch = [p for p in players if p.role == 'Witch'][0]
self.dead = []
self.day = 1
self.state = 'Night'
def start(self):
print('Game start! Assigning roles...')
for p in self.players:
print(f'{p.name} is a {p.role}.')
print('First night falls. Werewolves, please wake up and choose a victim...')
victim = self.werewolves[0].kill(self.villagers)
self.check_status(victim)
def check_status(self, victim=None):
if victim:
self.dead.append(victim)
if victim.role == 'Werewolf':
self.werewolves.remove(victim)
else:
self.villagers.remove(victim)
print(f'{victim.name} is dead.')
if len(self.werewolves) == 0:
print('Villagers win!')
return
if len(self.werewolves) >= len(self.villagers):
print('Werewolves win!')
return
if self.seer in self.dead:
print('Seer is dead.')
self.seer = None
if self.witch in self.dead:
print('Witch is dead.')
self.witch = None
if self.state == 'Night':
self.night()
else:
self.day += 1
self.state = 'Night'
print(f'Night {self.day} falls. Werewolves, please wake up and choose a victim...')
def night(self):
victim = self.werewolves[0].kill(self.villagers)
self.check_status(victim)
if self.seer:
self.seer.check(self.players)
if self.witch:
if not self.witch.saved and victim.poisoned:
# 如果女巫没有救人且有玩家被毒死,则女巫不能再使用毒药
print('Witch cannot use poison again.')
else:
self.witch.poison(self.villagers)
if not self.witch.saved:
# 如果女巫没有救人,则可以使用解药救人
self.witch.save(victim)
if self.witch and not self.witch.saved:
# 如果女巫没有救人,则可以使用解药救自己
self.witch.save(self.witch)
self.state = 'Day'
print(f'Day {self.day} starts. Please discuss and vote.')
```
使用示例:
```python
# 创建玩家
p1 = Werewolf('Wolf1')
p2 = Werewolf('Wolf2')
p3 = Villager('Villager1')
p4 = Villager('Villager2')
p5 = Seer('Seer1')
p6 = Witch('Witch1')
# 创建游戏
game = Game([p1, p2, p3, p4, p5, p6])
# 开始游戏
game.start()
```
这段代码只是一个简单的示例,只实现了基本的狼人杀游戏规则。你可以根据需要进行扩展和修改,加入更多的角色和游戏规则,让游戏更加有趣。
相关推荐















