怎么样用Python制作简单的尼姆游戏,代码是什么
Admin 2022-06-20 群英技术资讯 472 次浏览
尼姆游戏,这是一个著名的游戏,有很多变种玩法。两个玩家轮流从一堆物品中拿走一部分。在每一步中,玩家可以自由选择拿走多少物品,但是必须拿走一部并且最多只能拿走一半物品,然后轮到下一个玩家。拿走最后一个物品的玩家输掉游戏。先手随机。
#/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)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了使用python获取cpu每秒的使用率,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
这篇文章主要介绍了pandas实现按行选择的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
这篇文章主要介绍了解决Python保存文件名太长OSError: [Errno 36] File name too lon问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
这篇文章主要介绍了numpy.mean() 计算矩阵均值方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
这篇文章主要分享的是用python实现各种数据结构,快速排序、选择排序、插入排序、归并排序、堆排序heapq模块等相关资料,感兴趣的小伙伴可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008