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

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

1 # 聪明的尼姆游戏。

2 import random

3

4

5 class Game():

6 def __init__(self, num):

7 self.number = num

8 self.flag = 1

9

10 def computer_turn(self):

11 if self.number & (self.number + 1) == 0: # 如果是2的幂次方-1个物品

12 if int(self.number / 2) <= 1:

13 self.number -= 1

14 print('电脑回合,拿走%d个物品,剩余%d个物品' % (1, self.number))

15 else:

16 temp = random.randint(1, int(self.number / 2))

17 self.number -= temp

18 print('电脑回合,拿走%d个物品,剩余%d个物品' % (temp, self.number))

19 else:

20 temp = self.number

21 while self.number & (self.number + 1) != 0: # 变成2的幂次方-1

22 self.number -= 1

23 temp = temp - self.number

24 print('电脑回合,拿走%d个物品,剩余%d个物品' % (temp, self.number))

25 if self.number == 0:

26 print('Game over!玩家获胜!')

27 self.flag = 0

28

29 def player_turn(self):

30 temp = int(input('玩家回合,剩余%s个物品,请输入拿取物品的个数:' % self.number))

31 if self.number == 1:

32 self.number -= 1

33 elif temp > int(self.number) / 2:

34 temp = int(input('拿去物品数量超过规则限制,请重新输入:'))

35 else:

36 self.number -= temp

37 if self.number == 0:

38 print('Game over!电脑获胜!')

39 self.flag = 0

40

41 def begin(self):

42 print('初始总共%d个物品' % self.number)

43 while True:

44 if self.flag == 0:

45 break

46 self.computer_turn()

47 if self.flag == 0:

48 break

49

50 self.player_turn()

51

52

53 # g1=Game(17)

54 g1 = Game(15)

55 g1.begin()

标签:python,self,flag,number,拿走,尼姆,对战,Game,物品

python尼姆游戏_python实现聪明的尼姆游戏(人机对战)相关推荐

  1. SwiftUI 游戏源码大全之国际象棋Chess含人机对战GreedyBot和 CautiousBot Stockfish(教程含源码)

    实战需求 SwiftUI 游戏源码大全之国际象棋Chess含人机对战GreedyBot和 CautiousBot 本文价值与收获 看完本文后,您将能够作出下面的界面 看完本文您将掌握的技能 这个应用程 ...

  2. python井字棋_python实现井字棋小游戏

    本文为大家分享了python实现井字棋小游戏,供大家参考,具体内容如下 周五晚上上了python的选修课,本来以为老师是从python的基础语法开始的,没想到是从turtle画图开始,正好补上了我以前 ...

  3. python编的俄罗斯方块游戏_Python使用pygame模块编写俄罗斯方块游戏的代码实例

    文章先介绍了关于俄罗斯方块游戏的几个术语. 边框--由10*20个空格组成,方块就落在这里面. 盒子--组成方块的其中小方块,是组成方块的基本单元. 方块--从边框顶掉下的东西,游戏者可以翻转和改变位 ...

  4. ai python 代码提示插件_Python 还能实现哪些 AI 游戏?附上代码一起来一把!

    人工智能作为当前热门在我们生活中得到了广泛应用,尤其是在智能游戏方面,有的已经达到了可以和职业选手匹敌的效果. 而DQN算法作为智能游戏的经典选择算法,其主要是通过奖励惩罚机制来迭代模型,来达到更接近 ...

  5. python轰炸敌机小游戏_python实现飞机大战微信小游戏

    0.前言 我学一种语言,可以说学任何东西都喜欢自己动手实践,总感觉自己动手一遍,就可以理解的更透彻,学python也一样,自己动手写代码,但更喜欢做点小东西出来,一边玩一边学.下面我就展示一下我最近做 ...

  6. python pygame字体设置_Python基于pygame实现的font游戏字体(附源码)

    本文实例讲述了Python基于pygame实现的font游戏字体.分享给大家供大家参考,具体如下: 在pygame游戏开发中,一个友好的UI中,漂亮的字体是少不了的 今天就给大伙带来有关pygame中 ...

  7. python写推箱子_python写的推箱子小游戏

    原标题:python写的推箱子小游戏 导语 Python 功能强大,可以写爬虫.服务器.数据分析.AI--当然,也可以写游戏. 用python写了个推箱子小游戏,在这里分享给大家,让我们愉快地开始吧~ ...

  8. 用python做一个坦克小游戏_Python制作经典坦克大战小游戏

    image.png 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. ...

  9. python实现2048游戏_python实现一个简单的2048游戏

    [Python]代码 # -*- coding: utf8 -*- import random data = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0 ...

最新文章

  1. MFC中的消息处理函数
  2. mysql5.7应该导什么包_立冬为什么要吃饺子?包饺子应该注意什么?怎么煮?看完你就明白...
  3. 你知道CSS实现水平垂直居中的第10种方式吗?
  4. Qt 编译时报错“退出,退出代码2”的原因
  5. Jenkins 流水线 获取git 分支列表_使用Jenkins Git参数实现分支标签动态选择
  6. python去重复元素_python 去除单个list中的重复元素
  7. 深入了解RabbitMQ工作原理及简单使用
  8. 利用钩子机制取得Windows的消息监控权
  9. OpenGL ES 加载3D模型
  10. 写一个简单的实时互动小游戏
  11. python支付程序源码_支付宝推出新活动,Python脚本能让你赚的更多!(附源码)...
  12. CentOS x86_64系统手动释放内存
  13. 在route-map中使用verify-availability确保路由可用性
  14. java商品名称_Java统计商品信息
  15. 密码输入页面的实现-模仿支付宝
  16. 学堂在线CPP笔记上(1-6章)
  17. Span 介绍及使用(二)
  18. 鸽巢排序(Pigeonhole sort)
  19. 运筹学-2-单纯形法的矩阵计算
  20. ti ds90ub953 与ds90ub954 、ds90ub933的调试总结

热门文章

  1. 2015年中央电大c语言,2015年电大 2015年电大小抄-中央电大2012春季c语言程序设计期末复习指导(本)资料.doc...
  2. 常见java异常英语词汇(一)
  3. BK7256,上海博通Wi-Fi6SOC芯片,高度集成-支持100w像素,详细资料
  4. 防火墙网络地址转换技术
  5. 360浏览器 自动跳转到https://g.csdnimg.cn/browser_upgrade/1.0.2/index.html你当前的浏览器版本过低,存在安全风险,请尽快升级浏览器,并设置新安装的
  6. Java实现最近点问题
  7. 安装compiz-fusion
  8. 可以把JPG图片转成PDF的格式转换器
  9. 期货股票自动交易下单接口怎么执行策略函数?
  10. 振荡次数计算机控制系统,计算机控制第四章.ppt