• 热门专题

青蛙跳小游戏之python3解法

作者:  发布日期:2014-03-05 21:04:30
  • 青蛙跳小游戏是一个看似简单的智力游戏,游戏任务是让左右两边的青蛙互换位置。鼠标点击青蛙,它会跳到离它最近的一块空置的石头上。下图是游戏界面:

    我在4399上也找到了这个小游戏,链接http://www.4399.com/flash/7584.htm 。

    这个小游戏我尝试了好多次,太笨了,只能用代码搞起,就是深度搜索,找到一个解就OK。代码如下:

     

    pos=[0 for x in range(7)]
    for i in range(3):
    	pos[i]=-1
    for i in range(3):
    	pos[6-i]=1
    #print(pos)
    repos=pos[::-1]
    count=0
    
    def kltry():
    	global count,pos,repos
    
    	if pos==repos:
    		print('OK')
    		exit()
    	blank=pos.index(0)
    	if blank>=1 and pos[blank-1]<0:
    		pos[blank]=-1
    		pos[blank-1]=0
    		print(str(blank-1)+'->'+str(blank))
    		kltry()
    		pos[blank]=0
    		pos[blank-1]=-1
    		print('return')
    
    	if blank>=2 and pos[blank-2]<0:
    		pos[blank]=-1
    		pos[blank-2]=0
    		print(str(blank-2)+'->'+str(blank))
    		kltry()
    		pos[blank]=0
    		pos[blank-2]=-1
    		print('return')
    	
    	if blank<=5 and pos[blank+1]>0:
    		pos[blank]=1
    		pos[blank+1]=0
    		print(str(blank)+'<-'+str(blank+1))
    		kltry()
    		pos[blank]=0
    		pos[blank+1]=1
    		print('return')
    
    	if blank<=4 and pos[blank+2]>0:
    		pos[blank]=1
    		pos[blank+2]=0
    		print(str(blank)+'<-'+str(blank+2))
    		kltry()
    		pos[blank]=0
    		pos[blank+2]=1
    		print('return')
    
    kltry()

    输出结果如下:

     

     

    kl@kl-Latitude:~/桌面$ python3 jumpfrog.py 
    2->3
    1->2
    0->1
    return
    return
    0->2
    return
    2<-4
    3->4
    1->3
    0->1
    0<-2
    1->2
    return
    return
    return
    1<-2
    0->2
    0<-1
    return
    return
    return
    return
    3<-5
    4->5
    4<-6
    5->6
    return
    return
    return
    5<-6
    4->6
    4<-5
    return
    return
    return
    return
    return
    4<-5
    3->5
    1->3
    0->1
    0<-2
    1->2
    return
    2<-4
    3->4
    1->3
    1<-2
    return
    return
    return
    4<-6
    5->6
    3->5
    1->3
    1<-2
    2<-4
    3->4
    OK
    

    2->3就是从把第2个位置的青蛙跳到第3个位置(从0开始数的哈),return就是上一步走的不对,要返回上一级,但是游戏是不能悔棋的,只能重新开始,所以根据这样的结果也不好手工复现,于是我又写了如下的代码,之前,先把上面的输出结果重定向到log文件中,把上面数据处理一下:

     

     

    f=open('log','r')
    data=[]
    while True:
    	line=f.readline()
    	if line=='':
    		break
    	data.append(line[:-1])
    f.close()
    
    while 'return' in data:
    	n=data.index('return')
    	del data[n]
    	del data[n-1]
    print(data)

    这样,输出结果处理后变成:

     

     

    kl@kl-Latitude:~/桌面$ python3 showfog.py 
    ['2->3', '2<-4', '4<-5', '3->5', '1->3', '0->1', '0<-2', '2<-4', '4<-6', '5->6', '3->5', '1->3', '1<-2', '2<-4', '3->4', 'OK']
    

    这样就可以手工复现了,总共需要15步让左右两边的青蛙交换位置。周围好多人都可以分分钟甚至一把就通关,我还要代码搞起果然弱爆了。。。果然木有50W年薪了呢。。。

    转自http://blog.csdn.net/littlethunder/article/details/20525965

延伸阅读:

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规