关于用python 去解决 ‘狼人杀游戏’

摘要:
        题目来源于LeetCode的一道竞赛题

(链接:https://leetcode-cn.com/circle/article/EJf9yW/)

1.分析题目:

   

题目描述
小李的同事们很喜欢玩狼人杀,每次都找他当法官。小李觉得很累,决定写一个程序来跑出狼人杀的结果。

狼人杀是一个桌游。常见局由 12 名玩家和 1 名法官组成。12 名玩家坐成一个圈。每个玩家在游戏开始时随机抽取一张角色卡牌,只能知道自己的身份。 玩家分为两个阵营,狼人和村民。

狼人的胜利条件是 狼人阵营的玩家数 >= 村民阵营的玩家数
村民的胜利条件是 所有狼人出局
游戏过程

游戏分为夜晚和白天。

(夜晚) 拿到狼人身份的玩家睁眼,其他人闭眼。狼人们商量后选择一名玩家击杀;
(白天) 所有人睁眼;
法官宣布昨晚出局的玩家,以及熊是否咆哮了;
出局的玩家离开游戏,发动技能(如果有);
法官检查胜利条件,如果任何一个满足则结束游戏;
在场玩家进行一轮发言,并票选最可疑的玩家出局;
被选中的玩家离开游戏,发动技能(如果有);
法官检查胜利条件,如果任何一个满足则结束游戏;
重复 1;
游戏角色

【村民阵营】x8

村民(villager, 下称"vil") x5:没有特殊技能
猎人("hunter") x1:技能是在出局时(被投票或被狼人击杀)可以向所有人亮出底牌选择带走一名玩家
白痴("idiot") x1:技能是在白天被投票出局后自动亮出底牌并且不出局
驯熊人(bear tamer, 下称"bear") x1:(简称熊)每天夜里,如果相邻两名存活玩家有任何一个是狼人,熊会发出咆哮。如果驯熊人已经死亡,则这一局熊不再咆哮。驯熊人如果当晚被杀,熊也不会咆哮。(相邻指向左找第一名存活玩家和向右找第一名存活玩家,当晚被杀的玩家也视为死亡)
【狼人阵营】x4

狼人(werewolf, 下称"ww") x4:可以知道同伴,但不知道好人的具体角色。
对于所有人:

白天可以投票
除了发言的环节,玩家不能发言或者交换信息
模拟器设定
我们用 c 来模拟每名玩家在游戏开始时在他人眼中的可信度。0 < c < 100 。越小则越像狼人
狼人只击杀非狼人,并且在场玩家知晓这点
在投票环节,c 最低的玩家出局。如果有多个目标,则座位号小号出局。
狼人优先击杀熊,其他时候击杀 c 最高的好人(村民阵营),如果有多个目标,则击杀座位号小号。
玩家的 c 变成 0 或者 100 表示已知身份: 铁狼 或者 铁好人
玩家的 c 会根据大家获取到的信息发生改变, 所有人看到的可信度 c 一起更新。注意,改变的时机需要遵守游戏过程:
猎人出局或白痴被投票出局时一定发动技能,使 ta 的 c 变为 100;猎人会射杀 c 最低的玩家,如果有多个目标,则射杀座位号小号
第一天发言时,如果驯熊人依然存活,驯熊人会公布身份,使 ta 的 c 变为 100(在模拟器中狼不会假装自己是熊)
如果熊咆哮了,人们开始怀疑其左右的未知身份玩家,这使他们的 c 变为原来的一半 (向下取整, 如果原来是 1 则不变 )
如果熊咆哮了且左右的在局一方为铁好人,则另一方成为铁狼;如果其中一方后来被发现是铁好人,人们也会更新另一方的 c
如果熊在场且没有咆哮,则左右的在场玩家成为铁好人
如果驯熊人在第一次发言前死亡,则场上玩家不知道其位置,也无法利用熊的咆哮信息
如果玩家在夜间死亡,则该离场的玩家也被认为是铁好人

(1)首先得要有一个(‘全局’)数组,里面包含游戏中的角色(我是由外界输入,命名a1_all)

def __init(self,*args):
     self.a1_all = args

(2)其次要完成角色中的各个功能:
(2.1)判断输赢(黑夜,白天):

(2.2)熊的功能(作为一个新手懒的截图,直接复制代码):

def xiongren(self):
    import time
    if 'wolf' in self.a1_all:
        time.sleep(2)
        print('熊咆啸了')

(2,3)女巫功能:

def nvwu(self,per):
    methor = str(input('是否使用解药或者毒药(use_j_or_d_or_n ):  '))
    if methor == 'j':
       self.a1_all.append(per)
    elif methor =='d' :
       print(self.a1_all)
       per_one = str(input('请选择谁:  '))
       self.a1_all.remove(per_one)
    else:
        self.baitian()

(2.4)猎人功能:

def lieren(self):
    print(self.a1_all)
    per_one = str(input('请选择谁:  '))
    self.a1_all.remove(per_one)

(3)场景分析(白天,晚上):

def baitian(self):
    day = 1
    print('今天是第{}天'.format(day))
    day += 1
    import random
    per_two = random.choice(self.a1_all)
    print('今天放逐的人{}'.format(per_two))
    if 'xiong' in self.a1_all:
        self.xiongren()
    else:
        print('熊没有咆哮')
    if per_two == 'lieren':
        self.lieren()
    self.a1_all.remove(per_two)
    self.panduan_baitian()
    print('进入夜晚!!!!',end ='\n')
    self.heyei()
def heyei(self):
    print(self.a1_all)
    methor_one = str(input('要杀谁:   '))
    if methor_one =='lieren':
        self.lieren()
    self.a1_all.remove(methor_one)
    self.nvwu(methor_one)
    self.panduan_heyei()

(4)游戏运行

def jiance(self):
    self.baitian()
langrensha(la()).jiance()

(5)数据怎么来了??? ,别急, ----》Mysql

# coding=gbk
"""
hbahahahhahahah
"""
def la():
    import pymysql
    conn = pymysql.connect(host ='localhost',
                           user='root',
                           password='123',
                           database='zhang',
                           charset='utf8')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    sql1 = "use langrensha;"
    cursor.execute(sql1)
    sql = "select * from lang;"
    cursor.execute(sql)
    ret1 = cursor.fetchall()
    # print(ret1)
    ac = []
    for x in ret1:
        # print(x['xingming'])
        ac.append(x['xingming'])
    return ac

(6)ok!!!! 大工完成,看一下运行结果吧

(7)总结自己出错的类别吧,

(7.1)

SyntaxError: Non-UTF-8 code starting with '\xa3' in file

原因:中文问题

解决办法:开头前加一个

# coding=gbk

(7。2)mysql密码忘记怎么办???

解决办法:别急,先输入‘mysqld --skip-grant-tables ’,目的强制进入mysql,在输入mysql就可以了(管理员权限)

(8)(番外!!!!)

(作者)注:本来原本是这样

def __init__(self,a1_all):
    self.a1_all = a1_all

我想改为这样

def  __init__(self,*args):
      self.a1_all =  args

目的为了想传更多的参数,是游戏更加可变玩性,哪知道,args的格式为tuple类型的,着实给我当头一棒,但是对于我!!!!(一个新手菜鸟玩家),怎么难得了我!!!哼,我直接把tuple 改为 list 类型 !!!!!,成功!!!!!(附截图)

(9)最后!!!!,我想说,最近由于疫情的原因,大家还是少出门,少聚会,武汉加油!!!!!,中国加油!!!!!

这就是我写的(原创),望大家谅解!!!!有时间点个赞!!!,作者不胜感激!!!!!!!

    

 

 

发布了1 篇原创文章 · 获赞 5 · 访问量 62

猜你喜欢

转载自blog.csdn.net/yq5201314520/article/details/104252940
今日推荐