python尼姆游戏_python实现聪明的尼姆游戏(人机对战)
尼姆游戏是个著名的游戏,有很多变种玩法。两个玩家轮流从一堆物品中拿走一部分;在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家。拿走最后一个物品的玩家输掉游戏。
在聪明模式中,计算机每次拿走足够多的物品使得堆的大小是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实现聪明的尼姆游戏(人机对战)相关推荐
- SwiftUI 游戏源码大全之国际象棋Chess含人机对战GreedyBot和 CautiousBot Stockfish(教程含源码)
实战需求 SwiftUI 游戏源码大全之国际象棋Chess含人机对战GreedyBot和 CautiousBot 本文价值与收获 看完本文后,您将能够作出下面的界面 看完本文您将掌握的技能 这个应用程 ...
- python井字棋_python实现井字棋小游戏
本文为大家分享了python实现井字棋小游戏,供大家参考,具体内容如下 周五晚上上了python的选修课,本来以为老师是从python的基础语法开始的,没想到是从turtle画图开始,正好补上了我以前 ...
- python编的俄罗斯方块游戏_Python使用pygame模块编写俄罗斯方块游戏的代码实例
文章先介绍了关于俄罗斯方块游戏的几个术语. 边框--由10*20个空格组成,方块就落在这里面. 盒子--组成方块的其中小方块,是组成方块的基本单元. 方块--从边框顶掉下的东西,游戏者可以翻转和改变位 ...
- ai python 代码提示插件_Python 还能实现哪些 AI 游戏?附上代码一起来一把!
人工智能作为当前热门在我们生活中得到了广泛应用,尤其是在智能游戏方面,有的已经达到了可以和职业选手匹敌的效果. 而DQN算法作为智能游戏的经典选择算法,其主要是通过奖励惩罚机制来迭代模型,来达到更接近 ...
- python轰炸敌机小游戏_python实现飞机大战微信小游戏
0.前言 我学一种语言,可以说学任何东西都喜欢自己动手实践,总感觉自己动手一遍,就可以理解的更透彻,学python也一样,自己动手写代码,但更喜欢做点小东西出来,一边玩一边学.下面我就展示一下我最近做 ...
- python pygame字体设置_Python基于pygame实现的font游戏字体(附源码)
本文实例讲述了Python基于pygame实现的font游戏字体.分享给大家供大家参考,具体如下: 在pygame游戏开发中,一个友好的UI中,漂亮的字体是少不了的 今天就给大伙带来有关pygame中 ...
- python写推箱子_python写的推箱子小游戏
原标题:python写的推箱子小游戏 导语 Python 功能强大,可以写爬虫.服务器.数据分析.AI--当然,也可以写游戏. 用python写了个推箱子小游戏,在这里分享给大家,让我们愉快地开始吧~ ...
- 用python做一个坦克小游戏_Python制作经典坦克大战小游戏
image.png 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. ...
- python实现2048游戏_python实现一个简单的2048游戏
[Python]代码 # -*- coding: utf8 -*- import random data = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0 ...
最新文章
- MFC中的消息处理函数
- mysql5.7应该导什么包_立冬为什么要吃饺子?包饺子应该注意什么?怎么煮?看完你就明白...
- 你知道CSS实现水平垂直居中的第10种方式吗?
- Qt 编译时报错“退出,退出代码2”的原因
- Jenkins 流水线 获取git 分支列表_使用Jenkins Git参数实现分支标签动态选择
- python去重复元素_python 去除单个list中的重复元素
- 深入了解RabbitMQ工作原理及简单使用
- 利用钩子机制取得Windows的消息监控权
- OpenGL ES 加载3D模型
- 写一个简单的实时互动小游戏
- python支付程序源码_支付宝推出新活动,Python脚本能让你赚的更多!(附源码)...
- CentOS x86_64系统手动释放内存
- 在route-map中使用verify-availability确保路由可用性
- java商品名称_Java统计商品信息
- 密码输入页面的实现-模仿支付宝
- 学堂在线CPP笔记上(1-6章)
- Span 介绍及使用(二)
- 鸽巢排序(Pigeonhole sort)
- 运筹学-2-单纯形法的矩阵计算
- ti ds90ub953 与ds90ub954 、ds90ub933的调试总结
热门文章
- 2015年中央电大c语言,2015年电大 2015年电大小抄-中央电大2012春季c语言程序设计期末复习指导(本)资料.doc...
- 常见java异常英语词汇(一)
- BK7256,上海博通Wi-Fi6SOC芯片,高度集成-支持100w像素,详细资料
- 防火墙网络地址转换技术
- 360浏览器 自动跳转到https://g.csdnimg.cn/browser_upgrade/1.0.2/index.html你当前的浏览器版本过低,存在安全风险,请尽快升级浏览器,并设置新安装的
- Java实现最近点问题
- 安装compiz-fusion
- 可以把JPG图片转成PDF的格式转换器
- 期货股票自动交易下单接口怎么执行策略函数?
- 振荡次数计算机控制系统,计算机控制第四章.ppt