200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > python谁是卧底游戏流程图_用python实现谁是卧底小游戏

python谁是卧底游戏流程图_用python实现谁是卧底小游戏

时间:2024-05-22 19:27:09

相关推荐

python谁是卧底游戏流程图_用python实现谁是卧底小游戏

谁是卧底

谁是卧底也是深受很多人喜欢的游戏,起码要三人以上才能玩,大致分为几个阶段:

1.分配平民词语和卧底词语--->

2.玩家依次发言--->

3.根据发言投票认为谁是卧底--->

4.得到票数最多的玩家出局--->

5.出局玩家刚好是卧底则平民胜利,如果出局玩家是平民则被冤死并继续第2步,当剩下的平民只有1个时卧底胜利。

特殊情况是,出现两名或以上的玩家票数相同,则相同票数的玩家重新发言,然后全体针对这几个玩家投票。

设计思路

1、创建游戏类

2、创建玩家类

玩家类拥有名字,是否卧底,拥有票数的属性

3、玩家发言

4、玩家投票

5、判断出局

6、判断是否结束游戏

代码实现

import random

class Game:

""" 游戏类 """

game_list=[]

def __init__ (self):

""" 初始化类时加入列表 """

Game.game_list.append(self)

def wd_r ():

""" 随机一个卧底 """

random.choice(Game.game_list).wd=1

def speak (self,talk):

""" Function doc """

self.talk=talk

def vote_r (self,name):

""" 玩家投票 """

for i in Game.game_list:

if i.name==name:

i.vote+=1

def judge ():

""" 判决出局,判断是否结束游戏 """

vote=0

player=0

weather=0

#判断哪个玩家的票数最高

for i in Game.game_list:#判断最高票数玩家的票数

if i.vote>vote:

vote=i.vote

for i in Game.game_list:#选出最高票数玩家的对象

if i.vote==vote:

weather+=1#判断获得最高票数玩家的个数

player=i#取出最高票数玩家对象

if weather == 1:#判断最高票数玩家是否只有一个

print('玩家%s被出局'%player.name)

if player.wd == 1:#判断出局玩家是否卧底

print('卧底出局,平民胜,游戏结束')

return 0

else:

Game.game_list.remove(player)

if len(Game.game_list)<=2:#判断剩余玩家人数

print('卧底未出局,卧底胜,游戏结束')

return 0

print('卧底未出局,游戏继续')

return 1

else:

print('存在票数相同的玩家,游戏继续')

return 1

class Player(Game):

""" 玩家类 """

def __init__ (self,name,wd=0,vote=0):

""" 初始化玩家类 """

self.name=name

self.wd=wd

self.vote=vote

super().__init__()

if __name__=='__main__':

flag=1

while flag:#输入玩家数量

num=int(input('请输入玩家数量(至少3个):'))

if num>=3:

flag=0

else:

print('请输入正确人数')

n=num

names=locals()#动态创建玩家对象

for i in range(num):

n-=1

name=input('请输入第%d个玩家名字:'%(num-n))

names['player'+str(i)]=Player(name)

# ~ exec('player{} = {}'.format((num-n),Player(name)))

Game.wd_r()#随机将一个玩家变成卧底

flag=1

while flag:

for i in Game.game_list:#玩家发言

i.speak(input('请玩家%s发言:'%i.name))

for i in Game.game_list:#输出玩家发言

print('玩家%s发言:%s'%(i.name,i.talk))

for i in Game.game_list:#投票

i.vote_r(input('请玩家%s投票(玩家名):'%i.name))

flag=Game.judge()#判决出局

for i in Game.game_list:#票数清零

i.vote=0

总结

在实现过程中遇到了动态命名创建的对象难题,学习了新的方法:

names=locals()

names['player'+str(i)]=Player(name)

该方法通过python中字典的原理,利用键值结构实现了动态赋值变量名

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。