使用python怎么实现一个汉诺塔游戏

  介绍

本篇文章给大家分享的是有关使用python怎么实现一个汉诺塔游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一。汉诺塔

汉诺塔问题是一个经典的递归问题,对于这个问题,我们可以把它简单的去看成是如何用n - 1去表示n。
在A, B, C三个柱子上,我们先假设一个柱上只有两个盘子,那么很简单,只需要把最上面的那个盘子移到B柱上,再把一个柱上最下面的盘子移到C柱上,最后把B柱的盘子移到C柱就可以了。
假设我们有n个盘子,那么可以把最下面的盘子看成是第n个盘子,而我们要做的是把上面n - 1个盘子移到B柱上,再把第n个盘子移到C柱。我们可以把B柱视为主中转站。
在将n - 1个盘子移到B柱的过程中,我们需要借助C柱作为分中转站,当完成n - 1个盘子的移动时,此时B柱上存在n - 1个盘子,而我们接下来要做的,和之前类似,就是借助把2个盘子移动到柱,把第n - 1个盘子移动到C柱。在移动2个盘子到一个柱时,我们同样要借助C作为分中转站。

二。实例代码

import 海龟   class 堆栈:   自我,def  __init__ ():   时间=self.items 才能;[]   自我,def  isEmpty ():   return 才能len (self.items),==0   ,def 推动(自我,,项):   self.items.append才能(项)   ,def 流行(自我):   return 才能;self.items.pop ()   自我,def  peek ():   if 才能;not  self.isEmpty ():   ,,return  self.items (len (self.items),安康;1]   def 才能;大小(自我):   ,,return  len (self.items)   def  drawpole_3(): #画出汉诺塔的两极=,,t  turtle.Turtle ()   ,t.hideturtle ()   ,def  drawpole_1 (k):   t.up才能()   t.pensize才能(10)   t.speed才能(100)   t.goto才能(400 * (k - 1), 100)   t.down才能()   t.goto才能(400 * (k - 1), -100)   t.goto才能(400 * (k - 1) -20,, -100)   t.goto才能(400 * (k - 1) + 20, -100)   ,drawpole_1(0) #画出汉诺塔的波兰人[0]   ,drawpole_1(1) #画出汉诺塔的波兰人[1]   ,drawpole_1(2) #画出汉诺塔的波兰人[2]   def  creat_plates (n): #制造n个盘子   ,盘子=[turtle.Turtle (), for 小姐:拷贝范围(n))   ,for 小姐:拷贝范围(n):   盘子才能[我].up ()   盘子才能[我].hideturtle ()   盘子才能[我].shape (“square")   盘子才能[我].shapesize(我)   盘子才能[我].goto(-400、-90 + 20 *我)   盘子才能[我].showturtle ()   return 才能;盘子   def  pole_stack(): #制造波兰人的栈   堆栈,波兰人=[(),for 小姐:拷贝范围(3))   return 两极   def  moveDisk(盘子,波兰人、fp、tp): #把波兰人(fp)顶端的盘子板(mov)从两极(fp)移到极点(tp)   ,mov=波兰人(fp) .peek ()   ,盘子(mov) .goto ((fp-1) * 400150)   ,盘子(mov) .goto ((tp-1) * 400150)   (tp), l=波兰人.size() #确定移动到底部的高度(恰好放在原来最上面的盘子上面)   ,盘子(mov) .goto ((tp-1) * 400, -90 + 20 * l)   def  moveTower(板、两极、高度、fromPole, toPole,, withPole): #递归放盘子   ,if  height 祝辞=,1:   moveTower才能(盘子,波兰人,高度1、fromPole withPole, toPole)   moveDisk才能(盘子,波兰人,fromPole toPole)   波兰人(toPole)才能.push(波兰人[fromPole] .pop ())   moveTower才能(盘子,波兰人,高度1、withPole toPole, fromPole)   myscreen=turtle.Screen ()   drawpole_3 ()   n=int(输入(“请输入汉诺塔的层数并回车:\ n"))   盘子=creat_plates (n)   波兰人=pole_stack ()   for 小姐:拷贝范围(n):   ,波兰人[0].push(我)   moveTower(盘子,波兰人,n, 0、2、1)   myscreen.exitonclick ()

以上就是使用python怎么实现一个汉诺塔游戏,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

使用python怎么实现一个汉诺塔游戏