python实现尼姆游戏

 更新时间:2021年12月02日 09:05:23   作者:梦幻精灵_cq  
这篇文章通过详细的python代码实现尼姆游戏,小编觉得挺不错的。现在分享给大家,也给大家做个参考,需要的朋友可以收藏下。一起跟随小编过来看看吧

题目

尼姆游戏,这是一个著名的游戏,有很多变种玩法。两个玩家轮流从一堆物品中拿走一部分。在每一步中,玩家可以自由选择拿走多少物品,但是必须拿走一部并且最多只能拿走一半物品,然后轮到下一个玩家。拿走最后一个物品的玩家输掉游戏。先手随机。

代码运行效果

python代码

#/sur/bin/nve python
# coding: utf-8
import os #用os.system(r'clear')清屏
import random #用random.randint()随机取数



def clear():
    '''#Linux清屏'''
    clear = os.system(r'clear')


def optimal(n):
    '''机器最优拿法'''
    if n in (1, 2, 3, 4):
        return 1
    take = int(n/2)
    m = 1
    for i in range(take):
        if m>take:
            break
        m *= 2
    take = n-m+1
    if take>int(n/2):
        take = random.randint(1, int(n/2))
    return take


def common(n):
    '''机器一般拿法'''
    while True:
        if n==1:
            return 1
        return random.randint(1, int(n/2))


def effect(first, take, n):
    '''结果输出'''
    cl()
    print('\n'*6)
    flag_s = ('简单', '困难')[flag-1]
    print('%s\n'%('【%s】'%flag_s).rjust(20))
    print('﹊'*21)
    print(' '*4, end='')
    print('%s已取走%s。物品堆物品还剩%s。'%(first, take, n))
    print('﹊'*21)


def show_error():
    '''报错信息打印'''
    print('\n\n%s'%error)
    print('输入错误!请重试。'.rjust(20))
    print('﹊'*21)
    input('任意键继续……'.rjust(20))


#Main Codes
cl = clear
s = '''
      尼姆游戏,这是一个著名的游戏,
  有很多变种玩法。
      两个玩家轮流从一堆物品中拿走
  一部分。在每一步中,玩家可以自由
  选择拿走多少物品,但是必须拿走一个
  并且最多只能拿走一半物品,然后轮到
  下一个玩家。
      拿走最后一个物品的玩家输掉游戏。
      先手随机。
'''
#规则打印
cl()
print('\n\n%s'%'“尼姆”游戏规则'.rjust(20))
print()
print('﹊'*21)
print(s)
print('﹊'*21)
input('任意键继续……'.rjust(20))
#难度选择
while True:
    cl()
    print('\n'*6)
    print('\n%s'%'【难度选择】'.rjust(20))
    print()
    print('﹊'*21)
    print('1. 简单  2. 困难'.rjust(24))
    print('﹊'*21)
    try:
        flag = int(input('请选择:'.rjust(12)))
        if flag not in (1, 2):
            error()
            continue
        break
    except Exception as error:
        show_error()

#开始游戏
p = '小可爱'
cl()
print('\n'*6)
while True:
    try:
        c = input('给对手命名:'.rjust(12))
        break
    except Exception as error:
        error()
        continue
if flag==2:
    n = random.randint(1, 500)
else:
    n = random.randint(1, 100)
cl()
print('\n'*6)
print('﹊'*21)
print('%s\n'%'【本局游戏物品堆】'.rjust(21))
print(('%s:%3d'%('物品总数', n)).rjust(22))
print('﹊'*21)
input('任意键继续……'.rjust(20))
#随机先手选择
first = random.choice((c, p))
while n>0:
    #机器取
    if flag==2 and first==c:
        take = optimal(n)
        n = n-take
    if flag==1 and first==c:
        take = common(n)
        n = n-take
    if first==c:
        effect(first, take, n)
    if n==0:
        break
    first = p #转换玩家先手
    #玩家取
    if first==p:
        while True:
            try:
                take = int(input('\n%s'%'您取物:'.rjust(12)))
                if take==1 and (n in (1, 2, 3)):
                    break
                if take>int(n/2) or take<1:
                    error()
                    continue 
                break
            except Exception as error:
                show_error()
        n = n-take
    if first==p:
        effect('您', take, n)
        input('任意键继续……'.rjust(20))
    if n==0:
        break
    first = c #转换机器先手
    
#结果输出
if first==p:
    first = '您'
cl()
print('\n'*6)
print('﹊'*21)
print(('%s输了!'%first).rjust(20))
print('﹊'*21)

到此这篇关于python实现尼姆游戏的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

相关文章

  • python批量生成身份证号到Excel的两种方法实例

    python批量生成身份证号到Excel的两种方法实例

    这篇文章主要给大家介绍了关于python批量生成身份证号到Excel的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • python中print的不换行即时输出的快速解决方法

    python中print的不换行即时输出的快速解决方法

    下面小编就为大家带来一篇python中print的不换行即时输出的快速解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考
    2016-07-07
  • python导出requirements.txt的几种方法以及环境配置详细流程

    python导出requirements.txt的几种方法以及环境配置详细流程

    这篇文章主要给大家介绍了关于python导出requirements.txt的几种方法以及环境配置详细流程,requirements.txt 文件是一个文本文件,用于列出你的Python项目所依赖的软件包及其版本,需要的朋友可以参考下
    2023-11-11
  • django项目中使用云片网发送短信验证码的实现

    django项目中使用云片网发送短信验证码的实现

    这篇文章主要介绍了django项目中使用云片网发送短信验证码的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Python实现RabbitMQ6种消息模型的示例代码

    Python实现RabbitMQ6种消息模型的示例代码

    这篇文章主要介绍了Python实现RabbitMQ6种消息模型的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Python利用Turtle绘制Technoblade的示例代码

    Python利用Turtle绘制Technoblade的示例代码

    国外一位在YouTube拥有上千万粉丝的我的世界游戏主播Technoblade因癌症与世长辞,为了纪念他,特地写了这篇文章,教大家用Turtle绘制出Technoblade,快跟随小编一起学习一下吧
    2023-01-01
  • python 元组的使用方法

    python 元组的使用方法

    这篇文章主要介绍了python 元组的使用方法,文中讲解非常细致,代码帮助大家更好的参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • 分享Pandas库中的一些宝藏函数transform()

    分享Pandas库中的一些宝藏函数transform()

    Pandas具有很多强大的功能,transform就是其中之一,利用它可以高效地汇总数据且不改变数据行数,transform是一种什么数据操作?如果熟悉SQL的窗口函数,就非常容易理解了
    2021-09-09
  • selenium WebDriverWait类等待机制的实现

    selenium WebDriverWait类等待机制的实现

    这篇文章主要介绍了selenium WebDriverWait类等待机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Macbook air m1安装python/anaconda全过程(图文)

    Macbook air m1安装python/anaconda全过程(图文)

    这篇文章主要介绍了Macbook air m1安装python/anaconda全过程(图文),文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论