python 小游戏 之 汉诺塔
来源:互联网 发布:粤贵银分析软件 编辑:程序博客网 时间:2024/06/07 03:27
一,题目:
汉诺塔游戏程序 <1> 问题描述:在平面上有三个位置A、B、C,
在A位置上有n个大小不等的圆盘、小盘压在大盘上形成圆盘堆。
要求将A位置的N个圆盘通过B位置移动到C位置上,并按同样的顺序叠放。
移动圆盘时必须遵循以下规则:
1. 每一次只能移动一个圆盘 2. 圆盘可以放在A、B、C任何一个塔座上 3. 任何时刻都不能将大圆盘压在小圆盘上
二,问题分析:
当只有一个盘子的时候,只需要从将A塔上的一个盘子移到C塔上。
当A塔上有两个盘子是,先将A塔上的1号盘子(编号从上到下)移动到B塔上,2 * 2 -1
再将A塔上的2号盘子移动的C塔上,最后将B塔上的小盘子移动到C塔上。
当A塔上有3个盘子时,先将A塔上编号1至2的盘子(共2个)移动到B塔上(需借助C塔),
然后将A塔上的3号最大的盘子移动到C塔,最后将B塔上的两个盘子借助A塔移动到C塔上。
当A塔上有n个盘子是,先将A塔上编号1至n-1的盘子(共n-1个)移动到B塔上(借助C塔),
然后将A塔上最大的n号盘子移动到C塔上,最后将B塔上的n-1个盘子借助A塔移动到C塔上。
综上所述,除了只有一个盘子时不需要借助其他塔外,其余情况均一样(只是事件的复杂程度不一样)
##----------------创建游戏----------------------#游戏列表columns = [[],[],[]]gameSize = -1def getGameSize(): #创建列表 global gameSize while gameSize== -1 : #判断是否是数字 try: value = int(raw_input('请输入 2 到 9 的整数:')) # 判断是否在2到9之间 if value >= 2 and value <= 9: gameSize = value # 将数列添加到columns的子列表中 for d in range(0, gameSize): columns[0].append(d + 1) except TypeError: # 不是一个数字。再试一次. gameSize = -1 print columns##--------------移动圆盘----------------------#游戏结束条件EjectNum = True#移动的步数turn = 0def doMove(fromCol, toCol): global EjectNum global columns global turn #将字符转成整数方便计算 iFrom = ord(fromCol) - ord('a') iTo = ord(toCol) - ord('a') # 判断该位置是否有圆盘(取) if len(columns[iFrom]) == 0: print '%s上没有圆盘 '%fromCol.upper() return # 判断该位置是否有圆盘(放) if len(columns[iTo]) > 0: sizeFrom = columns[iFrom][0] sizeTo = columns[iTo][0] if sizeTo < sizeFrom: print '大盘不能放在小盘上' return # 移动圆盘 disk = columns[iFrom].pop(0) # 弹出选中列的第一个圆盘 columns[iTo].insert(0, disk) # 将弹出的原盘加入到目标列 turn += 1 # 步数加一 print columns,'走%d步'%turn if len(columns[0])==0 and len(columns[1])==0: print '恭喜你已经过关了,共用了%d步'%(turn) EjectNum = False#命令def doInput(): print '输入要移动的列a,b,c ', command = raw_input().lower() if command == 'a' or command == 'b' or command == 'c': doMoveFrom(command)def doMoveFrom(command): print '移动到哪? ', to = raw_input().lower() if to == command: print "你放回了原来的位置" elif to == 'a' or to == 'b' or to == 'c': doMove(command, to)#执行getGameSize()while EjectNum: doInput()
阅读全文
0 0
- python 小游戏 之 汉诺塔
- python编程之bomb catcher 小游戏
- python的一个小游戏之五子棋
- 四、python笔记之改进小游戏
- #Python 初学之二编写一个小游戏#
- 二、python笔记之用python做一个小游戏
- Python之闭包应用小游戏Tic Tac Toe
- Java小游戏之控制台小游戏
- Python小游戏--扫雷
- 扫雷小游戏-python
- 一个python 小游戏
- python小游戏实现代码
- Pygame开发Python小游戏
- 用Python做小游戏
- Python小游戏--扫雷
- Python 猜数字 小游戏
- 零基础Python小游戏
- python 小游戏 代码存档
- java i++和++i的区别
- Java NIO 详解(一)
- IDEA提示Multi-catches are not supported at this language level的解决办法
- LINUX的IIC从这开始(一)
- there are no resources that can be add
- python 小游戏 之 汉诺塔
- Servlet 中文乱码解决方案
- android运行报错:"com.android.ide.common.process.ProcessException: Return code 1 for dex process"
- 搭建SVN服务端,客户端(一)
- 【自动化测试】测试分工的一点思考与测试价值
- leetcode 49. Group Anagrams
- 诗歌二 未知来生相见否,陌上逢却在少年。
- css动画之关键帧动画
- WKWebView