Messj 发表于 2017-6-6 03:15:43

汉诺塔游戏及攻略的代码

之前,做了个汉诺塔的文字化游戏,还不知道怎么将他从简单的模块程序加工到真正意义上可实现游戏的图像交互def hanoi(n,x,y,z):
    if(n==1):
      print(x,'-->',z)
    else:
      hanoi(n-1,x,z,y)#将前n-1个盘子从x移到y上
      print(x,'-->',z)#将第n个盘子从x移到z上
      hanoi(n-1,y,x,z)#将y上盘子移动到z上


level=int(input("请输入级别:"))
if level<=0:
    print ("级别要求大于0")
else:
    answer=list(range(1,level+1))
    answer.reverse()
    step=0
    x=answer[:]
    list1=,[]]
    print("level=%d\nx=%s   y=%s    z=%s\nstep=%d"%(level,list1,list1,list1,step))
    while 1:
      ghelp=int(input('是否需要帮助?(1 or 0?)'))
      if ghelp==1:
            hanoi(level,'x','y','z')
            print("下次努力!!!")
            break
      gbegin=input("输入初始地:")
      gend=input("输入目的地:")
      mid=list1.pop()
      list1.append(mid)
      step+=1
      print("level=%d\nx=%s   y=%s    z=%s\nstep=%d"%(level,list1,list1,list1,step))
      if list1==answer:
            print("Good Job!")
            break

康小泡 发表于 2017-6-8 15:47:14

能把你这个里面用到的一些知识点,你的想法详细的讲解一下。会让你的笔记更加的出色。

Messj 发表于 2017-6-8 19:44:26

谢谢你的意见

bravsheng 发表于 2021-7-27 17:03:12

哇,楼主你这个厉害了!   
和你一样,我当时也想到了通过列表的形式来展示每次移动后的状态。这样真的很直观!
楼主的人机交互更厉害! 更能体现出一种游戏的过程! 可以选择自己移,也可以选择打印后面的所有步骤。
我的是直接显示每次移动后的列表状态。

bravsheng 发表于 2021-7-27 17:07:21

我也想要分享一下,我的运行后也很直观!
n = int(input('请输入汉诺塔的层数:'))
list1 = list(range(1,n+1))
x1 = list1.copy(); y1 = []; z1 = []
print('\n初始:',x1,y1,z1,'\n')
i = 0;i1 = 0;i2 = 0;i3 = 0;i4 = 0;i5 = 0;i6 = 0

def state_print(n,x,y,z):
    global i,i1,i2,i3,i4,i5,i6
    if x=='X'and z=='Y':
      y1.insert(0,x1);x1.pop(0)
      i1 += 1
      print('结果:',x1,y1,z1,'\n')
      
    if x=='Y'and z=='X':
      x1.insert(0,y1);y1.pop(0)
      i2 += 1
      print('结果:',x1,y1,z1,'\n')
      
    if x=='X'and z=='Z':
      z1.insert(0,x1);x1.pop(0)
      i3 += 1
      print('结果:',x1,y1,z1,'\n')
      
    if x=='Z'and z=='X':
      x1.insert(0,z1);z1.pop(0)
      i4 += 1
      print('结果:',x1,y1,z1,'\n')
      
    if x=='Y'and z=='Z':
      z1.insert(0,y1);y1.pop(0)
      i5 += 1
      print('结果:',x1,y1,z1,'\n')
      
    if x=='Z'and z=='Y':
      y1.insert(0,z1);z1.pop(0)
      i6 += 1
      print('结果:',x1,y1,z1,'\n')
    i = i1+i2+i3+i4+i5+i6
   
def hanoi(n, x='X', y='Y', z='Z'):
    global i
    list1 = list(range(1,n+1))

    if n == 1:
      print('第%d步:'%(i+1),x, ' --> ', z)
      state_print(n,x,y,z)
    else:   
      hanoi(n-1, x, z, y)
      print('第%d步:'%(i+1),x, ' --> ', z)
      state_print(n,x,y,z)
      hanoi(n-1, y, x, z)

hanoi(n)

17761204429 发表于 2021-9-15 13:20:44

厉害
{:10_256:}{:10_256:}

python梦 发表于 2021-10-22 18:27:58

都是些大神,膜拜,各位的python是怎么学的

hl521t 发表于 2022-4-19 17:05:08

楼主这个汉诺塔有意思,值得研究
页: [1]
查看完整版本: 汉诺塔游戏及攻略的代码