python汉诺塔游戏_Python实战:搭建汉诺塔小游戏,快和小伙伴一起玩玩吧
漢諾塔游戲:看誰能在短時(shí)間內(nèi)將排好順序的圈,按同樣的順放在另一根柱子上,每次只能動一個(gè)。
今天用python搭建漢諾塔小游戲(簡約版)
代碼親測有效!源代碼如下:
#左中右塔用一個(gè)列表存儲
left = list
center = list
right = list
"""
初始化函數(shù)
"""
def init:
size = input("(請友善輸入整數(shù),未寫判斷!)請輸入層數(shù):")
#初始化塔列表,如5層 左邊塔放 1-3-5-7-9,中間和右邊放5個(gè)-1
for i in range(1,int(size) + 1):
left.append(i*2-1)
center.append(-1)
right.append(-1)
return int(size)
"""
打印樣式函數(shù)
"""
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="")
"""
控制臺打印結(jié)果
"""
def show(size):
#修飾
print("-"*35)
#循環(huán)層數(shù)等于size
for i in range(size):
# 打印左邊塔
printStyling(i,size,left)
# 打印中間塔
printStyling(i,size,center)
# 打印右邊塔
printStyling(i,size,right)
#每行打印一個(gè)換行
#修飾
print("-" * 35)
"""
判斷可不可以移動
takeOff減少,putOn增加,size層數(shù),tSize和pSize剩余空間
"""
def judge(takeOff,putOn,size,tSize,pSize,count):
# 如果左塔的剩余空間等于size,就是空的,就沒有元素可移動
if tSize == size:
print("操作無效!")
return 0
# 如果中塔為空,可以移動
if pSize == size:
# 中間的最后一個(gè)元素賦上左塔的第一個(gè)元素的值
putOn[pSize - 1] = takeOff[tSize]
# 左塔的第一個(gè)元素賦值-1
takeOff[tSize] = -1
# 左塔的剩余空間+1
tSize += 1
# 中塔的剩余空間-1
pSize -= 1
#步數(shù)+1
count += 1
#移動成功,返回剩余空間和步數(shù)
return tSize,pSize,count
# 如果中塔最上方元素比左塔最上方元素大,即可以移動
elif putOn[pSize] > takeOff[tSize]:
# 中塔當(dāng)前最上方元素的再上一個(gè)元素(-1)賦上左塔最上方元素的值
putOn[pSize - 1] = takeOff[tSize]
# 左塔最上方元素賦值-1
takeOff[tSize] = -1
# 左塔剩余空間+1
tSize += 1
# 中塔剩余空間-1
pSize -= 1
#步數(shù)+1
count += 1
# 移動成功,返回剩余空間和步數(shù)
return tSize,pSize,count
# 否則不可以移動
else:
print("操作無效!")
return 0
"""
主要運(yùn)行函數(shù)
"""
def main:
#初始化游戲
size = init
# 存放最初的盤剩余空間 lSize左塔 cSize中塔 rSize右塔
lSize = 0
cSize = size
rSize = size
#存放操作步數(shù)
count = 0
#打印游戲介紹
print("將左塔完整地移到右塔就是勝利!")
print("左-1 中-2 右-3 退出請輸入:quit")
print('例如輸入:"1-2"就是將左塔的最上元素放到中塔')
print("%d層的最佳步數(shù)是%d"%(size,pow(2,size)-1))
#游戲進(jìn)行
while True:
print("當(dāng)前移動了%d步"%(count))
#顯示當(dāng)前塔的狀態(tài)
show(size)
#判斷右塔是否沒有剩余空間,沒有即勝利,并退出游戲
if rSize == 0:
if count == pow(2,size)-1:
print("恭喜你使用最少步數(shù)完成漢諾塔!")
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
輸出結(jié)果:(文本輸出)
總結(jié)
以上是生活随笔為你收集整理的python汉诺塔游戏_Python实战:搭建汉诺塔小游戏,快和小伙伴一起玩玩吧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 主键自增函数_oracle
- 下一篇: avue form提交变为不可编辑_教程