欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python实现尼姆游戏

程序员文章站 2022-06-15 10:29:51
题目尼姆游戏,这是一个著名的游戏,有很多变种玩法。两个玩家轮流从一堆物品中拿走一部分。在每一步中,玩家可以*选择拿走多少物品,但是必须拿走一部并且最多只能拿走一半物品,然后轮到下一个玩家。拿走最后一...

题目

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

代码运行效果

python实现尼姆游戏

python实现尼姆游戏

python实现尼姆游戏

python实现尼姆游戏

python实现尼姆游戏

python实现尼姆游戏

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 尼姆游戏