python编程实验,模拟聪明版的尼姆游戏设计原理

实验原理与内容:

本实验完成一个模拟聪明版的尼姆游戏功能:

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

        在聪明模式中,计算机每次拿走足够多的物品使得堆的大小是2 的幂次方减1——也就是3,7,15,31 63。除了堆的大小已经是的幂次方减1,在其他情况下这样走都是符合游戏规则的。在那种情况下,计算机就按游戏规则随机拿走一些。

编写程序,模拟聪明版本的尼姆游戏。

本实验中主要涉如下过程。

1.游戏分析与算法设计

2.使用Python编写游戏程序

3.编写Python源文件

4.编译/调试程序

5.运行程序

实现代码:

from random import randint,choice
def everyStep(n):
    half = n/2
    m = 1
    # 所有可能满足的取法
    possible = []
    while True:
        # 机器取走剩下后的数量
        rest = 2**n - 1
        if rest >= n:
            break
        # 剩下的数量大于一半,则取走的不超过一半
        if rest >= half:
            possible.append(n-rest)
        m = m + 1
    #     如果至少存在一种取法使得剩下物品数量为 2*n-1
    if possible:
        return choice(possible)
    # 无法使得剩余物品数量为 2*n-1,随机取走一些
    return randint(1,int(half))

def smartMinGame(n):
    while n>1:
        # 人类玩家先走
        print("现在到你了,我们还有{0}步".format(n))
        # 确保人类玩家输入合法整数值
        while True:
            try:
                num = int(input("你想走多少步:"))
                assert 1<= num <=n//2
                break
            except:
                print("错误,必须在1到{0}".format(n//2))
        n-=num
        if n==1:
            return '我(计算机)输了'
        # 计算机玩家拿走一些
        n -= everyStep(n)
    if n == 1:
        return '你输了'

print(smartMinGame(randint(1,100)))

运行演示:

python编程实验,模拟聪明版的尼姆游戏设计原理_第1张图片

你可能感兴趣的:(Python,python,游戏,开发语言)