您好,登錄后才能下訂單哦!
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() #修飾 print("-" * 35) """ 判斷可不可以移動 takeOff減少,putOn增加,size層數,tSize和pSize剩余空間 """ def judge(takeOff,putOn,size,tSize,pSize,count): # 如果左塔的空間空的,就是沒有元素可移動 if takeOff == 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實現一個漢諾塔小游戲問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。