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