阅读 303

python实现尼姆游戏

这篇文章通过详细的python代码实现尼姆游戏,小编觉得挺不错的。现在分享给大家,也给大家做个参考,需要的朋友可以收藏下。一起跟随小编过来看看吧

题目

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

代码运行效果


python代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#/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实现尼姆游戏的文章就介绍到这了

原文链接:https://blog.csdn.net/m0_57158496/article/details/121645399


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐