python汉诺塔游戏_Python实战:搭建汉诺塔小游戏,快和小伙伴一起玩玩吧
汉诺塔游戏:看谁能在短时间内将排好顺序的圈,按同样的顺放在另一根柱子上,每次只能动一个。
今天用python搭建汉诺塔小游戏(简约版)
代码亲测有效!源代码如下:
#左中右塔用一个列表存储
left = list
center = list
right = list
"""
初始化函数
"""
def init:
size = input("(请友善输入整数,未写判断!)请输入层数:")
#初始化塔列表,如5层 左边塔放 1-3-5-7-9,中间和右边放5个-1
for i in range(1,int(size) + 1):
left.append(i*2-1)
center.append(-1)
right.append(-1)
return int(size)
"""
打印样式函数
"""
def printStyling(i,size,ta):
if ta[i] != -1:
# 打印前空格
for kong in range(int(size - (ta[i] - 1) / 2)):
print(" ", end="")
# 打印塔元素
for le in range(ta[i]):
print("X", end="")
# 打印后空格
for kong in range(int(size - (ta[i] - 1) / 2)):
print(" ", end="")
# 左塔这一层为空格
else:
# 打印前面空格
for kong in range(size):
print(" ", end="")
# 打印中间的棒棒
print("|", end="")
# 打印后面的空格
for kong in range(size):
print(" ", end="")
"""
控制台打印结果
"""
def show(size):
#修饰
print("-"*35)
#循环层数等于size
for i in range(size):
# 打印左边塔
printStyling(i,size,left)
# 打印中间塔
printStyling(i,size,center)
# 打印右边塔
printStyling(i,size,right)
#每行打印一个换行
#修饰
print("-" * 35)
"""
判断可不可以移动
takeOff减少,putOn增加,size层数,tSize和pSize剩余空间
"""
def judge(takeOff,putOn,size,tSize,pSize,count):
# 如果左塔的剩余空间等于size,就是空的,就没有元素可移动
if tSize == size:
print("操作无效!")
return 0
# 如果中塔为空,可以移动
if pSize == size:
# 中间的最后一个元素赋上左塔的第一个元素的值
putOn[pSize - 1] = takeOff[tSize]
# 左塔的第一个元素赋值-1
takeOff[tSize] = -1
# 左塔的剩余空间+1
tSize += 1
# 中塔的剩余空间-1
pSize -= 1
#步数+1
count += 1
#移动成功,返回剩余空间和步数
return tSize,pSize,count
# 如果中塔最上方元素比左塔最上方元素大,即可以移动
elif putOn[pSize] > takeOff[tSize]:
# 中塔当前最上方元素的再上一个元素(-1)赋上左塔最上方元素的值
putOn[pSize - 1] = takeOff[tSize]
# 左塔最上方元素赋值-1
takeOff[tSize] = -1
# 左塔剩余空间+1
tSize += 1
# 中塔剩余空间-1
pSize -= 1
#步数+1
count += 1
# 移动成功,返回剩余空间和步数
return tSize,pSize,count
# 否则不可以移动
else:
print("操作无效!")
return 0
"""
主要运行函数
"""
def main:
#初始化游戏
size = init
# 存放最初的盘剩余空间 lSize左塔 cSize中塔 rSize右塔
lSize = 0
cSize = size
rSize = size
#存放操作步数
count = 0
#打印游戏介绍
print("将左塔完整地移到右塔就是胜利!")
print("左-1 中-2 右-3 退出请输入:quit")
print('例如输入:"1-2"就是将左塔的最上元素放到中塔')
print("%d层的最佳步数是%d"%(size,pow(2,size)-1))
#游戏进行
while True:
print("当前移动了%d步"%(count))
#显示当前塔的状态
show(size)
#判断右塔是否没有剩余空间,没有即胜利,并退出游戏
if rSize == 0:
if count == pow(2,size)-1:
print("恭喜你使用最少步数完成汉诺塔!")
else:
print("恭喜你只移动了%d步完成汉诺塔小游戏!"%(count))
break
#获取玩家操作
select = input("请操作:")
#左塔移中塔
if select == "1-2":
result = judge(left,center,size,lSize,cSize,count)
if result == 0:
continue
else:
lSize,cSize,count = result
#左塔移右塔,下面同样
elif select == "1-3":
result = judge(left, right, size, lSize, rSize,count)
if result == 0:
continue
else:
lSize, rSize,count = result
elif select == "2-1":
result = judge(center, left, size, cSize, lSize,count)
if result == 0:
continue
else:
cSize, lSize,count = result
elif select == "2-3":
result = judge(center, right, size, cSize, rSize,count)
if result == 0:
continue
else:
cSize, rSize,count = result
elif select == "3-1":
result = judge(right, left, size, rSize, lSize,count)
if result == 0:
continue
else:
rSize, lSize,count = result
elif select == "3-2":
result = judge(right, center, size, rSize, cSize,count)
if result == 0:
continue
else:
rSize, cSize ,count= result
#输入quit退出游戏
elif select == "quit":
break
#如果输入的是其他不识别的文字,就拜拜
else:
print("操作有误!")
continue
main
输出结果:(文本输出)
python汉诺塔游戏_Python实战:搭建汉诺塔小游戏,快和小伙伴一起玩玩吧相关推荐
- python掷骰子猜大小_python摇骰子猜大小的小游戏
#小游戏,摇筛子押大小的小游戏 import random #定义摇筛子的函数: def roll_dice(number = 3,points = None): print ('<<&l ...
- python实现消消乐游戏_Python制作宝石消消乐小游戏
开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 图片来由于网络 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原 ...
- python逢7跳过_python实现逢七拍腿小游戏的思路详解
逢七拍腿游戏 几个小朋友在一起玩逢七拍腿的游戏,从1开始数数,当数到7的倍数或者尾号是7时,拍一下腿.现在从1数到99,假设每个人都没有错,计算一下共要拍腿几次? 第一种实现思路:通过在for循环语句 ...
- python实现2048小游戏_python—手把手教你实现2048小游戏
相信2048这个游戏对大家来说一定不陌生,下面这篇文章就主要给大家介绍了怎么用Python实现2048小游戏,文中通过注释与示例代码介绍的很详细,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的 ...
- python连连看小游戏_python递归法实现简易连连看小游戏
问题:简单版连连看小游戏 一个分割成w*h个正方格子的矩形板上,每个正方格子可以有游戏卡,也可以没有游戏卡 两个游戏卡之间有一条路径相连需满足以下三个条件: 1.路径只包含水平和垂直的直线段 2.路径 ...
- python实现简单小游戏_python实现简单井字棋小游戏
#Tic-Tac-Toe 井字棋游戏 #全局常量 X="X" O="O" EMPTY=" " #询问是否继续 def ask_yes_no( ...
- python开发飞机小游戏_Python开发的飞机打外星人小游戏
importsysfrom time importsleepimportpygamefrom bullet importBulletfrom alien importAlien#响应键盘按下事件 de ...
- Python-项目实战-《外星人入侵》Pygame小游戏-阶段二:外星人来了
来源于<Python编程从入门到实践>的13章外星人来了. 此为第二阶段: Python-项目实战-<外星人入侵>Pygame小游戏-阶段一:武装飞船(含教程)_Kox233的 ...
- Python跳跳兔小游戏源代码,兔年必玩小游戏,兔年大吉
Python跳跳兔小游戏源代码,兔年必玩小游戏,兔年大吉,小兔子跳跳,按空格键向上跳跃,按键盘方向键进行左右移动,以避开飞弹,以防被炸,还可以捡到火箭道具哦. 完整程序下载地址:Python跳跳兔小游 ...
- Java实战项目:新手入门小游戏——连连看超详细教程
小伙伴们应该都玩过连连看吧,今天呢叫大家用Java制作一个属于自己的连连看小游戏! 众所周知,想要学好Java光看视频或看书是不行的,一定要动手实践才可以,而且在面试中,面试官也会问你做过些什么项目? ...
最新文章
- Git创建本地分支并关联远程分支
- Python模块-创建和执行程序(或者脚本)
- button组件 untiy_Unity自定义Button组件Transition
- [软件架构]基于PluginRT的插件编程
- 48V自动启停的Stateflow应用
- matlab文件编辑器,matlab写出两种打开M文件编辑器的方法
- 【Pix4d精品教程】Pix4DMapper 4.4.10/4.4.12/4.5.6经典手把手图文安装教程(附安装包下载)
- 傅里叶变换、拉普拉斯变换、Z 变换的联系是什么?为什么要进行这些变换?
- 精彩收集的303个透明flash代码
- 创业圣经《从0到1》读书笔记合集
- 【人在运维囧途_08】淘宝内部大量使用的开源系统监控工具--Tsar
- VS2017调用Matlab2016b进行绘图
- Cookie被禁用,如何传递session id?
- 蓝鲸CMP:跳出云管看云管
- BT种子文件格式和Bencoding编码
- 朋友圈被公司“无偿征用”,该怎么办?
- python 并行执行_python 串行执行和并行执行实例
- 大顶堆及小顶堆求最大或最小K个数
- 使用ffmpeg转码m3u8并播放及跨域问题
- 使用Tushare接口做中证500基差图
热门文章
- S/4HANA生产订单增强WORKORDER_UPDATE方法BEFORE_UPDATE参数分析
- Python删除list里面的重复元素的俩种方法
- The way of Webpack learning (II.) -- Extract common code(多页面提取公共代码)
- EOS绑定以太坊地址
- hdu 5903 Square Distance
- Xamarin+vs2010部署错误:error MSB6004: 指定的任务可执行文件位置\sdk\\tools\zipalign.exe”无效...
- Menu [D3D9 Source]
- As3回调函数的使用方法
- 41.虚拟存储器以及相关算法
- Fedora14 yum 安装源的地址配置到官方归档地址