dnf外挂教程(dnf脚本制作教程)

最近刷了一段时间提灯与地下城这个游戏,太肝了,毛都干没了,于是想制作一个替我刷图的脚本,说干就干,总结下思路。

总思路是 识别当前地图 –> 与地图中可以交互的点交互 —>识别当前地图。

当然这种是比较简单的思路,后期可以拓展。

准备

思路是使用opencv识别人物,道具和怪物等元素,但是考虑到怪物种类不一而足,素材收集也非一日之功,于是转换思路,从小地图入手,小地图的图标是种类固定的,像这样:

使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手
buff

使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手
怪物

使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手
出口

使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手
青蛙

使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手
宝石

使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手
金币

这里注意,采集到的图标需要和手机或者模拟器的图标一一对应。小地图的图片可以通过adb screencap命令获取或者minicap也是可以的。

首先观察小地图的长框可以发现是275 x 275,进一步观察可以发现分为11*11的格子,然而上面两格比较容易匹配出错,所以我们可以用一个11×9的整数数组来表示地图分布:

使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手
地图等分

func GetDevidedCentralPoint(piecesX ,piecesY int,src gocv.Mat)[][]int{

	//formed up a vector of (11-2)*11

  //use line to devide the map picture into 9x11 pieces

	width:=src.Cols()

	height:=src.Rows()

	lgr.Debug("width:%v height:%v",width,height)

	WPP:=width/piecesY

	HPP:=height/piecesX

	res:=make([][]int,piecesX)

	green := color.RGBA{0, 255, 0, 0}

	for i:=0;i<piecesX;i++{

		resInY:=make([]int,piecesY)

		

		for j:=0;j<piecesY;j++{

			Img,err:=src.ToImage()

			if err!=nil{

				lgr.Debug("Transform to image failed,err:",err)

			}else{

				colour:=Img.At(WPP*j+WPP/2,HPP*i+HPP/2)

				pt:=image.Point{WPP*j+WPP/2,HPP*i+HPP/2}

				str:=fmt.Sprintf("%v",j)

				gocv.PutText(&src,str,pt,gocv.FontHersheySimplex,0.5,green,1)

				r,g,b,_:=colour.RGBA()

				

				if (uint8(r)>20 && uint8(g)>20 && uint8(b)>20){

					//lgr.Debug("current point(%v,[%d,%v,%v]) color is : %v",pt,uint8(r),uint8(g),uint8(b),colour)

					//gocv.Circle(&src,pt,2,green,1)

					resInY[j]=1

					

				}else{

					resInY[j]=0

				}

				

			}

			

			}

			res[i]=resInY

	}

	return res

}

然后再分别匹配上面收集的图标,匹配到就将地图数组中对应的位置改为相应的数字,定义如下:


使用golang gocv制作提灯与地下城的自动刷图脚本,解放双手

 

/*-1 for store, 0 for unknow status, 1 for path, 2 for hero,3 for exit,4 for gold,5 for pet ,6 for enermys ,7 for iron box,8 for red box,9 for buff , 13 for frog,-2 for goldbox,-3 for temple, */

const heroImg= "./asset/hero.jpg"

const enermyImg= "./asset/enermy.jpg"

const exitImg= "./asset/exit.jpg"

const goldImg= "./asset/gold.jpg"

const gemImg= "./asset/gem.jpg"

const redboxImg= "./asset/redbox.jpg"

const templeImg= "./asset/temple.jpg"

const IronboxImg= "./asset/Ironbox.jpg"

const buffImg= "./asset/buff.jpg"

const petImg= "./asset/pet.jpg"

const pet1Img= "./asset/pet1.jpg"

const pet2Img= "./asset/pet2.jpg"

const pet3Img= "./asset/pet3.jpg"

const frogImg= "./asset/frog.jpg"

const selectorImg= "./asset/selector.jpg"

const storeImg= "./asset/store.jpg"

const goldboxImg= "./asset/goldbox.jpg"

const canceImg= "./asset/cancel.jpg"

const piecesX=9

const piecesY=11

然后,将采集到的地图元素与当前地图一一匹配,使用的方法是之前提过的gocv.MatchTemplate()方法,然后使用gocv.MinMaxLoc()得到可信度和对应的坐标,代码如下:

func MatchTarget(imgTempl,imgSrc ,imgSrc1 gocv.Mat,type_ int ,res [][]int){  

    

    result:=gocv.NewMat()

    defer result.Close()

    m :=gocv.NewMat()

    

    blue := color.RGBA{0, 0, 255, 0}

    gocv.MatchTemplate(imgTempl,imgSrc,&result,gocv.TmCcoeffNormed,m)

    //gocv.MatchTemplate(imgTempl,imgSrc,&result,1,m)

    m.Close()

    minValue,maxConfidence,_,maxLoc :=gocv.MinMaxLoc(result)

    if maxConfidence < 0.9 {

        lgr.Debug("Max confidence of %f is too low. MatchTemplate could not find template in scene.", maxConfidence)

        return

    }

	

    width:=imgSrc.Cols()

	height:=imgSrc.Rows()

	

	WPP:=width/piecesY

	HPP:=height/piecesX

	

	

    for {

        //lgr.Debug("The most possible location is : %v,value is : %v",maxLoc,maxConfidence)

        rect:=image.Rect(maxLoc.X,maxLoc.Y,maxLoc.X+imgTempl.Cols(),maxLoc.Y+imgTempl.Rows())

		indx:=(maxLoc.X+imgTempl.Cols()/2)/WPP

		indy:=(maxLoc.Y+imgTempl.Rows()/2)/HPP

        pt:=image.Pt(indy,indx)

        lgr.Debug("x:%v ,y:%v  %v,type:%v",indy,indx,maxLoc,type_)

        if type_==2{

            HeroPosition=pt

        }

		res[indy][indx]=type_

        if type_==3{

			ExitPosition=pt

            Dtm:=time.Since(starttime)

            wtm:=time.Duration(10)*time.Minute

            kc:=40

            if killedCnt<kc&&Dtm<wtm&&!IsFirstFloor{

                res[indy][indx]=0

            }

        }

        if type_==-1{

            IsFirstFloor=true

        }

        gocv.Rectangle(&imgSrc1, rect, blue, 1)

        //lgr.Debug("outer result adress:%v",result)

        maxLoc,maxConfidence=GetNextMaxLoc(result,maxLoc,minValue,imgTempl.Cols(),imgTempl.Rows())

		

        if maxConfidence<0.9{

            break

        }

    

    }

    

   

  }

  

func GetNextMaxLoc(result gocv.Mat,maxLoc image.Point,minValue float32,templateW,templateH int)(image.Point,float32){

    startX:=maxLoc.X-templateW

    startY:=maxLoc.Y-templateH

    endX :=maxLoc.X + templateW

    endY :=maxLoc.Y + templateH

    //lgr.Debug("Inner result adress:%v",result)

    

    if startX<0 || startY <0 {

        startX = 0

        startY = 0

    }

    if endX >result.Cols()-1 || endY > result.Rows()-1{

        endX=result.Cols()-1

        endY=result.Rows()-1

    }

    

    for y:=startY;y<endY;y++{

        for x:=startX;x<endX;x++{

            //ret:=result.GetFloatAt(y,x)

            //lgr.Debug("Get point (%v,%v) to %v",x,y,ret)

        

            result.SetFloatAt(y,x,minValue)

            //ret:=result.GetFloatAt(y,x)

            //lgr.Debug("set point (%v,%v) to %v",x,y,ret)

        }

    }

    

    _,maxConfidence,_,maxLoc :=gocv.MinMaxLoc(result)

    lgr.Debug("the point %v is max confidence point %v",maxLoc,maxConfidence)

    return maxLoc,maxConfidence

}

对每一个地图元素,调用MatchTarget 方法来刷新当前地图数组[][]rest,最后就得到了当前的地图元素。

然后就是寻路的算法,我自己使用的是A*算法,大家有兴趣的可以自己去实现一下.

本文来自投稿,不代表展天博客立场,如若转载,请注明出处:https://www.me900.com/14724.html

赞 (0)

相关推荐

  • 问卷调查有没有用,问卷调查做实证研究

    为什么用问卷调查法做实证研究? 实证研究是用定量分析验证理论假设。一般来说,社会科学的实证研究都可以用到问卷调查,实证比理论的学术性弱一些,对本科生来说更友好,查重和答辩也更容易过。 问卷可谓是收集数据的最快、最有效的方法,比起其他一手数据获取起来更简单。而且发在线调查的话,就更方便了。不需要你手动录入数据,降低了数据收集中的人工错误,而且不需要和被试直接接…

    2022-04-18
  • 凡客诚品的商品来源于哪里(凡客诚品商品来源渠道)

    凡客诚品的商品来源于哪里(凡客诚品商品来源渠道)凡客诚品的商品来源于哪里(凡客诚品商品来源渠道)凡客诚品的商品来源于哪里(凡客诚品商品来源渠道)凡客诚品的商品来源于哪里(凡客诚品商品来源渠道)

    说到凡客诚品,很多人可能想起了凡客诚品的T恤和帆布鞋,凡客诚品曾经在一段时间深受年轻人追捧,一度火遍全国。   凡客诚品,由卓越网的陈年创办,他和雷军一起搭档创办了卓越网,后来两个人一个办了小米,一个办了凡客诚品。凡客诚品创办于2007年,靠着便宜的价格,和货到付款、当面试穿、不满意30天无理由退货,获得了大量客户。凡客诚品的t恤价格普遍在19,2…

    2021-12-15 • 投稿
  • 计算机技术与科学,计算机技术与科学专业就业方向

    计算机技术与科学,计算机技术与科学专业就业方向计算机技术与科学,计算机技术与科学专业就业方向计算机技术与科学,计算机技术与科学专业就业方向计算机技术与科学,计算机技术与科学专业就业方向

    计算机科学与技术也叫做CS专业,顾名思义,是学习计算机相关的科学原理和专业技术的一门学科。 那么它和其他计算机专业,如软件工程、网络工程、信息管理与系统专业等有什么不同呢? 我自己也是计算机科学与技术专业的,所以我深有体会在踏入这个专业之前,大家的一些疑惑,下面我就为大家解答心中的疑惑。 为什么要叫计算机科学? 科学意味着研究,意味着科研,意味着理论原理,也…

    2022-04-22 • 投稿
  • 可以赚美金的中国网站(手机赚美元的平台)

    可以赚美金的中国网站(手机赚美元的平台)可以赚美金的中国网站(手机赚美元的平台)可以赚美金的中国网站(手机赚美元的平台)可以赚美金的中国网站(手机赚美元的平台)

    坐标洛杉矶,一名专注互联网赚钱和shopify跨境电商的老司机。 上一篇博文给大家介绍了 如何利用fiverr众包平台,在家轻松抠图赚美金 ,在国内一提到互联网兼职大家就会想“这个东西是不是骗人的”等等,这里需要解释一下,因为中国大陆的大环境不是很好,像这种零成本(当然了您还是需要一台能上网的电脑)互联网创业,在发达国家早就已经很成熟了,目前大陆却只有极少数…

    2022-01-05 • 投稿
  • 上海檀香皂怎么样,上海檀香皂的作用和用途

    上海檀香皂怎么样,上海檀香皂的作用和用途上海檀香皂怎么样,上海檀香皂的作用和用途上海檀香皂怎么样,上海檀香皂的作用和用途上海檀香皂怎么样,上海檀香皂的作用和用途

    肤如凝脂”是美人的标配。凝脂就是色匀且湿润、光滑。亚洲人想要皮肤白皙有一定的困难,但肤色匀称、滋润、光滑,努努力还是可以做到的。     清洁 洗脸的东西说一千道一万无非两种:香皂和洗面奶。二者最大的区别其实就是:一个是液体,一个是固体,并没有太多酸性呀碱性呀、保湿呀美白呀上的区别,那么多的说道,只是商家的营销策略。商家又衍生出来一些卸妆…

    2023-06-29 • 投稿
  • 十大公认最好用的洗发产品(国内洗发水十大排行榜)

    现在对洗发水的要求越来越高了 也不仅仅是清洁干净那么简单了 如果你还只知道海飞丝icon,飘柔这些 那么你就out了,掉发不在少数 国货正当前,自从换了国货洗发水掉头发也没几根了 这些好用的洗发水,你的洗发水上榜了吗?  

    2022-03-03
  • 梦幻西游房屋风水,梦幻造房子风水有什么技巧

    梦幻西游房屋风水,梦幻造房子风水有什么技巧梦幻西游房屋风水,梦幻造房子风水有什么技巧梦幻西游房屋风水,梦幻造房子风水有什么技巧梦幻西游房屋风水,梦幻造房子风水有什么技巧

    1、要建造一个庭院首先你得有个房子,房子因人而异,看你自己选择,因为小二也测试过福祉盈门、宜家宜业、紫气东来的风水,吃果实得东西并没有太大的不同。有了个房子后就开始庭院建造,具体的建造过程小二就不过度叙述了,网上小白文很多,按部就班照的弄就可以了。当然了,我们的目标是大型庭院。 2、有了庭院后需要花圃和花盆,大型庭院的话可以放6个花圃、13个花盆。花圃、花盆…

    2023-07-11 • 投稿
  • 河南移动梦网最新优惠信息 助您实现梦想

    #天南地北大拜年#如今,手机已经成了几乎所有成年中国人的必备品,每天都离不开的心头好。 如今的手机,使用最多的,恐怕就是刷视频、玩游戏、社交沟通了。 可在20年前,不是这样的。 我是2004年秋,第一次用手机上网的,那时候能够上网的手机,里面都固定了一个“移动梦网”的上网链接图标, 固化到手机里的移动梦网 里面内容丰富, 移动梦网里面就是这样的界面 初次手机…

    2023-06-03
  • 药妆品牌哪个最好用?比较好的药妆护肤品牌

    药妆品牌哪个最好用?比较好的药妆护肤品牌药妆品牌哪个最好用?比较好的药妆护肤品牌药妆品牌哪个最好用?比较好的药妆护肤品牌药妆品牌哪个最好用?比较好的药妆护肤品牌

    现在的女孩子对护肤品都是十分讲究的,尤其是一些大牌的护肤品,更是受到了众多爱美女孩子的青睐。 很多人都逐渐了解到,大牌护肤品从各方面的护肤效果都比较好,毕竟年轻有光泽的肌肤,谁不想要呢? 在众多的大牌护肤品当中,海蓝之谜、cpb、赫莲娜是万众瞩目的贵妇品牌。那么,同为贵妇品牌,到底哪个好呢?今天我们就这个问题来做一番讨论。 首先,我们先来了解一下海蓝之谜、C…

    2023-01-16 • 投稿
  • 花式冰淇淋怎么摆盘(各种点心的花样摆盘)

    花式冰淇淋怎么摆盘(各种点心的花样摆盘)花式冰淇淋怎么摆盘(各种点心的花样摆盘)花式冰淇淋怎么摆盘(各种点心的花样摆盘)花式冰淇淋怎么摆盘(各种点心的花样摆盘)

    刺身多宝鱼片 陈皮红小豆冰棍 香芒带子卷 酿皮三文鱼 蟹肉白芦笋冷汤 自制酸奶桑葚布丁 拔丝苹果 洞庭湖鲜莲花螺 姜汁撞奶 黑鱼籽配“酥不腻”鸭酥皮 桑葚饭 咸肉炖卤水老豆腐 鲜带子刺身 春韭炒桂花蚌 七月香杏配湘莲 慢烤三文鱼配油鸡枞菌小嫩豆 杏仁豆腐配豌豆绿 虾子茭白 麦葱烧海参 绿豆饭咸蛋黄 豆浆冰激凌 姜汁酱薄壳米小嫩豆 辣鱼片刺身 烤松茸和豌豆小时…

    2022-05-12 • 投稿
  • 现在什么平台引流效果比较好

    流量越来越贵,已经成为共识,无须赘述。 但是在过去的2021年,线上流量突然呈现出2个罕见特点,不知各位有无发现?1、2021年以前,我们做公域流量直接转化,在运营得当的情况下,ROI能做到3,甚至更高。但是2021年,在公域流量里直接转化,能做到1就很不错了。什么意思呢?就是说2021年以前,你写篇文章或拍个视频,在文章或视频里直接放购物车,内容爆了,ro…

    2022-06-03
  • 蓝莓有籽吗(蓝莓的籽是什么样的)

    蓝莓有籽吗(蓝莓的籽是什么样的)蓝莓有籽吗(蓝莓的籽是什么样的)蓝莓有籽吗(蓝莓的籽是什么样的)蓝莓有籽吗(蓝莓的籽是什么样的)

    种子处理 吃剩下的蓝莓种子放在清水中漂洗,去掉浮在水面的瘪粒和残留在种子上的果肉,蓝莓种子一旦离开果实就会进入休眠状态,所以要低温春化。用湿布袋把种子装好放在0至4度冰箱冷藏,可以把布袋装在塑料盒子里保湿。30天左右从冰箱取出来,在太阳下晒一天即可催芽。 蓝莓的育苗一般都是在春季,最佳育苗时间是2月至4月。到了育苗的时期,将种子用赤霉素(九二0)溶液浸泡,打…

    2022-05-10 • 投稿