鱼C论坛

 找回密码
 立即注册
查看: 6072|回复: 7

[技术交流] 汉诺塔游戏及攻略的代码

[复制链接]
发表于 2017-6-6 03:15:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
之前,做了个汉诺塔的文字化游戏,还不知道怎么将他从简单的模块程序加工到真正意义上可实现游戏的图像交互
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=[x,[],[]]
    print("level=%d\nx=%s   y=%s    z=%s\nstep=%d"%(level,list1[0],list1[1],list1[2],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[ord(gbegin)-120].pop()
        list1[ord(gend)-120].append(mid)
        step+=1
        print("level=%d\nx=%s   y=%s    z=%s\nstep=%d"%(level,list1[0],list1[1],list1[2],step))
        if list1[2]==answer:
            print("Good Job!")
            break

评分

参与人数 2鱼币 +4 收起 理由
小甲鱼 + 1
康小泡 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-8 15:47:14 | 显示全部楼层
能把你这个里面用到的一些知识点,你的想法详细的讲解一下。会让你的笔记更加的出色。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-8 19:44:26 | 显示全部楼层
谢谢你的意见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-27 17:03:12 | 显示全部楼层
哇,楼主你这个厉害了!   
和你一样,我当时也想到了通过列表的形式来展示每次移动后的状态。这样真的很直观!
楼主的人机交互更厉害! 更能体现出一种游戏的过程! 可以选择自己移,也可以选择打印后面的所有步骤。
我的是直接显示每次移动后的列表状态。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[0]);x1.pop(0)
        i1 += 1
        print('结果:',x1,y1,z1,'\n')
        
    if x=='Y'and z=='X':
        x1.insert(0,y1[0]);y1.pop(0)
        i2 += 1
        print('结果:',x1,y1,z1,'\n')
        
    if x=='X'and z=='Z':
        z1.insert(0,x1[0]);x1.pop(0)
        i3 += 1
        print('结果:',x1,y1,z1,'\n')
        
    if x=='Z'and z=='X':
        x1.insert(0,z1[0]);z1.pop(0)
        i4 += 1
        print('结果:',x1,y1,z1,'\n')
        
    if x=='Y'and z=='Z':
        z1.insert(0,y1[0]);y1.pop(0)
        i5 += 1
        print('结果:',x1,y1,z1,'\n')
        
    if x=='Z'and z=='Y':
        y1.insert(0,z1[0]);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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-15 13:20:44 | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-22 18:27:58 | 显示全部楼层
都是些大神,膜拜,各位的python是怎么学的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-19 17:05:08 | 显示全部楼层
楼主这个汉诺塔有意思,值得研究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 05:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表