本文实例为大家分享了android实现数独游戏机器人的具体代码,供大家参考,具体内容如下

针对该应用的数独机器人,填答案逻辑未完成,主要原因在于游戏响应触屏事件参数有待调整,简单的使用input tap,界面响应不正常。 

import sys
 
posinfo0={(0,0):8,
         (2,1):3,(3,1):6,
         (1,2):7,(4,2):9,(6,2):2,
         (1,3):5,(5,3):7,
         (4,4):4,(5,4):5,(6,4):7,
         (3,5):1,(7,5):3,
         (2,6):1,(7,6):6,(8,6):8,
         (2,7):8,(3,7):5,(7,7):1,
         (1,8):9,(6,8):4,
         }
maskmap={
1535553906:5,
2441400:7,
305175776:1,
2746585781:6,
1577050781:9,
2756722681:8,
1586816406:9,
2756351406:6,
2993066431:2,
2758694531:3,
1535569531:5,
2756738306:8,
1528222656:9,
1525882656:6,
2942285181:2,
1535944531:5,
1232906556:4,
2709863281:3,
1525882031:6,
2707910181:8,
1535960156:5,
1477441406:9,
2944238306:2,
1525878901:1,
2707910156:3,
1477050781:6,
2758691406:3,
3002832056:2,
2705941436:8,
1242672181:4,
1535647656:5,
2705957686:8,
1479394531:9,
1487191406:3,
2707894556:8,
502832031:2,
2705941431:8,
}         
def ocr(img):
    global posinfo0, maskmap
    posinfo0={}
    for x in xrange(0,9):
        for y in xrange(0,9):            
            x0=(x/3)*(257-26) (x%3)*(96-26) 26
            y0=(y/3)*(432-179) (y%3)*(255-179) 179
            x1=x0 (88-26)
            y1=y0 (240-179)
            dig=img.crop((x0,y0,x1,y1))
            throd=100
            res=0
            for marg_left in xrange(0,dig.size[0]/2 2):
                for t in xrange(0,dig.size[1]):
                    if dig.getpixel((marg_left, t))[0]<throd:
                        break
                if t!=dig.size[1]-1:break
            for marg_right in xrange(dig.size[0]-1, dig.size[0]/2, -1):
                for t in xrange(0,dig.size[1]):
                    if dig.getpixel((marg_right, t))[0]<throd:
                        break
                if t!=dig.size[1]-1:break
            for marg_top in xrange(0,dig.size[1]/2 2):
                for t in xrange(0,dig.size[0]):
                    if dig.getpixel((t,marg_top))[0]<throd:
                        break
                if t!=dig.size[0]-1:break
            for marg_bottom in xrange(dig.size[1]-1, dig.size[1]/2, -1):
                for t in xrange(0,dig.size[0]):
                    if dig.getpixel((t,marg_bottom))[0]<throd:
                        break
                if t!=dig.size[0]-1:break
            if marg_left>=marg_right:
                #print "(%d,%d):%d"%(x,y,res)
                continue
 
            mask=0
            bitcnt=1
            dig=dig.crop((marg_left,marg_top,marg_right,marg_bottom))
            olddirect=0
            direct=0
            
            for digy in xrange(dig.size[1]/8,dig.size[1], dig.size[1]/8):
                cnt=0
                for digx in xrange(0,dig.size[0]-1):
                    if dig.getpixel((digx, digy))[0]>throd and dig.getpixel((digx 1, digy))[0]<=throd:
                        cnt =1
                mask =cnt*bitcnt
                bitcnt*=5
            for digx in xrange(dig.size[0]/6,dig.size[0], dig.size[0]/6):
                cnt=0
                for digy in xrange(0,dig.size[1]-1):
                    if dig.getpixel((digx, digy))[0]>throd and dig.getpixel((digx, digy 1))[0]<=throd:
                        cnt =1
                mask =cnt*bitcnt
                bitcnt*=5
            if mask not in maskmap:
                dig.save("tmp/%d_%d_%d.png"%(mask,x,y))
                val=raw_input("%d:"%mask)
                maskmap[mask]=int(val)
            if mask in maskmap:
                #print "(%d,%d):%d"%(x,y,maskmap[mask])
                posinfo0[(x,y)]=maskmap[mask]
                
#484 677
    
def scan():
    os.system("adb shell screencap /mnt/sdcard/shudu.png")
    os.system("adb pull /mnt/sdcard/shudu.png")
    img=Image.open("shudu.png")
    ocr(img)
 
from copy import deepcopy
from time import clock
 
posb0={}
 
def init(posb, posinfo):
    for i in xrange(0,9):
        for j in xrange(0,9):
            if (i,j) not in posinfo:
                posb[(i,j)]=[n for n in xrange(1,10)]
    for pos in posinfo:
        cleanother(0,pos[0],pos[1],posinfo[pos],posb,posinfo)
 
def checkpos(posb, posinfo): 
    posb1=posb.copy()
    posinfo1=posinfo.copy()
    ret=0
    for pos in posb:
        if len(posb1[(pos[0],pos[1])])==1:
            addinfo(pos[0],pos[1],posb1[(pos[0],pos[1])][0],posb1,posinfo1)
            ret=1
            break
            
        elif len(posb1[(pos[0],pos[1])])==0:
            ret=2
            break
    posb=posb1
    posinfo=posinfo1
    return ret
 
def cleanother(mod,x,y,v,posb,posinfo):
    posb1=posb.copy()
    x0=x/3*3
    y0=y/3*3
    
    for ii in xrange(0,3):
        for jj in xrange(0,3):
            if (x0 ii,y0 jj) in posb: 
                if v in posb1[(x0 ii,y0 jj)]:
                    posb1[(x0 ii,y0 jj)].remove(v)
                    
    for ii in xrange(0,9):
        if (ii,y) in posb: 
            if v in posb1[(ii,y)]:
                posb1[(ii,y)].remove(v)
                
    for jj in xrange(0,9):
        if (x,jj) in posb: 
            if v in posb1[(x,jj)]:
                posb1[(x,jj)].remove(v)
    ret=0
    if posb1!=posb:
        ret = checkpos(posb1,posinfo)
        posb=posb1
    return ret
 
 
def findmin(posb):
    minv=9
    minpos=(0,0)
    for key,val in posb.items():
        if minv>len(val):
            minv=len(val)
            minpos=key
    return (minv,minpos)
 
def outputInfo(posinfo):
    print "\n   %s"%" ".join(str(v) for v in xrange(0,9))
    print "-----------"*2
    for i in xrange(0,9):
        print "%d|"%i,
        for j in xrange(0,9):
            if (j,i) in posinfo: 
                print posinfo[(j,i)],
            else:
                print " ",
        print
    print "==========="*2
    
def addinfo(x,y,v,posb,posinfo):
    if (x,y) in posinfo:return 
    #print "addinfo",x,y,v
    if (x,y) in posb: 
        del posb[(x,y)]
    posinfo[(x,y)]=v
    clearallinfo(posb,posinfo)
    #outputInfo(posinfo)
    
def clearallinfo(newposb, newposinfo):
    newposinfo2=newposinfo.copy()
    for pos in newposinfo:
        cleanother(0,pos[0],pos[1],newposinfo[pos],newposb,newposinfo2)
    if newposinfo2==newposinfo: return
    newposinfo=newposinfo2
    #print "newposinfo"
    #outputInfo(newposinfo)
    clearallinfo(newposb, newposinfo)
    
def clickscreen(pos0, lastpos):
    for i in xrange(0,9):
        print "%d|"%i,
        for j in xrange(0,9):
            if (j,i) in lastpos and (j,i) not in pos0:
                
                
                print lastpos[(j,i)],
 
                x0=(j/3)*(257-26) (j%3)*(96-26) 26
                y0=(i/3)*(432-179) (i%3)*(255-179) 179
                x1=x0 (88-26)/2
                y1=y0 (240-179)/2
                
                #os.system("adb shell input tap %d %d"%(x1,y1))                
                #raw_input("press...")
                #time.sleep(0.1)
                #os.system("adb shell input tap %d %d"%(lastpos[(j,i)]*80-40,980)) 
                #time.sleep(0.1)
                #raw_input("press...")
            else:
                print " ",
        print
        
def tryonestep(minpos, posb, posinfo, layer):
    global tic
    for posbv in posb[minpos]:
        newposb=deepcopy(posb)
        newposinfo=posinfo.copy()
        addinfo(minpos[0],minpos[1],posbv,newposb,newposinfo)
        minv2,minpos2=findmin(newposb)
        if minv2==0:
            #print "impossible!!!", layer
            continue
        if len(newposb)==0:
            print "Got it!!!"
            outputInfo(newposinfo)
            clickscreen(posinfo0, newposinfo)
            exit(0)
        tryonestep(minpos2, newposb, newposinfo, layer 1)
        
scan()
    
init(posb0, posinfo0) 
minv,minpos=findmin(posb0)    
print "start===>"
outputInfo(posinfo0)
newposb=posb0.copy()
newposinfo=posinfo0.copy()
tryonestep(minpos, newposb, newposinfo, 0)
print "No answer!!"  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持Devmax。

android实现数独游戏机器人的更多相关文章

  1. html5 canvas合成海报所遇问题及解决方案总结

    这篇文章主要介绍了html5 canvas合成海报所遇问题及解决方案总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Html5 video标签视频的最佳实践

    这篇文章主要介绍了Html5 video标签视频的最佳实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  3. HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题

    HTML5在微信内置浏览器下,在右上角菜单的调整字体导致页面显示错乱的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

  4. ios – containerURLForSecurityApplicationGroupIdentifier:在iPhone和Watch模拟器上给出不同的结果

    我使用默认的XCode模板创建了一个WatchKit应用程序.我向iOSTarget,WatchkitAppTarget和WatchkitAppExtensionTarget添加了应用程序组权利.(这是应用程序组名称:group.com.lombax.fiveminutes)然后,我尝试使用iOSApp和WatchKitExtension访问共享文件夹URL:延期:iOS应用:但是,测试NSURL

  5. Ionic – Splash Screen适用于iOS,但不适用于Android

    我有一个离子应用程序,其中使用CLI命令离子资源生成的启动画面和图标iOS版本与正在渲染的启动画面完美配合,但在Android版本中,只有在加载应用程序时才会显示白屏.我检查了config.xml文件,所有路径看起来都是正确的,生成的图像出现在相应的文件夹中.(我使用了splash.psd模板来生成它们.我错过了什么?这是config.xml文件供参考,我觉得我在这里做错了–解决方法在config.xml中添加以下键:它对我有用!

  6. ios – 无法启动iPhone模拟器

    /Library/Developer/CoreSimulator/Devices/530A44CB-5978-4926-9E91-E9DBD5BFB105/data/Containers/Bundle/Application/07612A5C-659D-4C04-ACD3-D211D2830E17/ProductName.app/ProductName然后,如果您在Xcode构建设置中选择标准体系结构并再次构建和运行,则会产生以下结果:dyld:lazysymbolbindingFailed:Symbol

  7. Xamarin iOS图像在Grid内部重叠

    heyo,所以在Xamarin我有一个使用并在其中包含一对,所有这些都包含在内.这在Xamarin.Android中看起来完全没问题,但是在Xamarin.iOS中,图像与标签重叠.我不确定它的区别是什么–为什么它在Xamarin.Android中看起来不错但在iOS中它的全部都不稳定?

  8. xcode-server – Xcode服务器在哪里存储机器人?如何将机器人转移到另一台机器上?

    我使用Xcode和Xcode服务器创建了多个机器人.我想备份这些机器人并将其转移到另一台机器上.如何才能做到这一点?

  9. ios – Xcode服务:选择Git Branch

    我开始在小牛身上建立新的Xcode服务.我创建了一个新的机器人–但是我没有要求它应该构建的分支机构?我不仅要建立主人,而且要建立不同的分支.解决方法在当前版本中,当您在Xcode中创建机器人时,它将链接到当前活动的分支.您可以轻松地验证它从Web界面,当您浏览到机器人–>Bot设置.或者,您可以通过Web界面创建机器人,您可以在其中指定分支名称纯文本.

  10. 在iOS上向后播放HTML5视频

    我试图在iPad上反向播放HTML5视频.HTML5元素包括一个名为playbackRate的属性,它允许以更快或更慢的速率或相反的方式播放视频.根据Apple’sdocumentation,iOS不支持此属性.通过每秒多次设置currentTime属性,可以反复播放,而无需使用playbackRate.这种方法适用于桌面Safari,但似乎在iOS设备上的搜索限制为每秒1次更新–在我的情况下太慢了.有没有办法在iOS设备上向后播放HTML5视频?解决方法iOS6Safari现在支持playbackRat

随机推荐

  1. Flutter 网络请求框架封装详解

    这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Android单选按钮RadioButton的使用详解

    今天小编就为大家分享一篇关于Android单选按钮RadioButton的使用详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

  3. 解决android studio 打包发现generate signed apk 消失不见问题

    这篇文章主要介绍了解决android studio 打包发现generate signed apk 消失不见问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  4. Android 实现自定义圆形listview功能的实例代码

    这篇文章主要介绍了Android 实现自定义圆形listview功能的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. 详解Android studio 动态fragment的用法

    这篇文章主要介绍了Android studio 动态fragment的用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. Android用RecyclerView实现图标拖拽排序以及增删管理

    这篇文章主要介绍了Android用RecyclerView实现图标拖拽排序以及增删管理的方法,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

  7. Android notifyDataSetChanged() 动态更新ListView案例详解

    这篇文章主要介绍了Android notifyDataSetChanged() 动态更新ListView案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

  8. Android自定义View实现弹幕效果

    这篇文章主要为大家详细介绍了Android自定义View实现弹幕效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. Android自定义View实现跟随手指移动

    这篇文章主要为大家详细介绍了Android自定义View实现跟随手指移动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. Android实现多点触摸操作

    这篇文章主要介绍了Android实现多点触摸操作,实现图片的放大、缩小和旋转等处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部