用go写的五子棋预测算法的实现
详细请看Github:https://github.com/shanhuijie/GoWatch/tree/master/fiveinarow
fiveinarow(五子棋成功预测)
从横、纵、左斜升、左斜降四个角度判断
const( matrix=50*50 point=3 ) typeCoordinatstruct{ xint yint } typeAllinatstruct{ key[]Coordinat } funcInArray(needCoordinat,needArr[]Coordinat)bool{ for_,v:=rangeneedArr{ ifneed==v{ returntrue } } returnfalse } funcinverted(tmp[]int)bool{//倒序检查 variint fork:=len(tmp)-1;k>=0;k--{ ifk==0{//最后一个下标说明无法对比 returnfalse } iftmp[k]-1==tmp[k]{//说明值是连续数字 i++ ifi==point{//如果达到连续数就返回 returntrue } }else{ returnfalse } } returnfalse } funcpostive(tmp[]int)bool{//正序检查 variint forck,cv:=rangetmp{ ifck==len(tmp)-1{//最后一个下标说明无法对比 returnfalse } ifcv+1==tmp[ck+1]{//说明值是连续数字 i++ ifi==point{//如果达到连续数就返回 returntrue } }else{ returnfalse } } returnfalse } funcSlope(inat*Allinat,coorCoordinat)bool{ var( Xmax,Xminint=coor.x+4,coor.x-4 Ymax,Yminint=coor.y+4,coor.y-4 j,pint lrise,lfallCoordinat //tmp[]int ) ifXmin<0{ Xmin=0 } ifYmin<0{ Ymin=0 } fori:=Xmin;i<=Xmax;i++{ Xmin=Xmin+1 Ymin=Ymin+1 lrise.x=Xmin lrise.y=Ymin ifInArray(lrise,inat.key){ j++ //fmt.Println(lrise,j) ifj==point{ returntrue } } ifYmin==Ymax{ break } } forii:=Xmax;ii>=Xmin;ii--{ Xmax=Xmax-1 Ymin=Ymin+1 lfall.x=Xmax lfall.y=Ymin ifInArray(lfall,inat.key){ p++ //fmt.Println(lfall,p) ifp==point{ returntrue } } ifYmin==Ymax{ returnfalse } } returnfalse } funclengthways(inat*Allinat,coorCoordinat)bool{ var( max,minint=coor.x+4,coor.x-4 tmp[]int ) ifmin<0{ min=0 } for_,c:=rangeinat.key{ if(max>=c.x&&c.y==coor.y)||(min>=c.x&&c.y==coor.y){ tmp=append(tmp,c.x) } } sort.Ints(tmp) if(inverted(tmp)==true)||(postive(tmp)==true){ returntrue } returnfalse } funccrosswise(inat*Allinat,coorCoordinat)bool{ var( max,minint=coor.y+4,coor.y-4 tmp[]int ) for_,c:=rangeinat.key{ if(max>=c.y&&c.x==coor.x)||(min>=c.y&&c.x==coor.x){ tmp=append(tmp,c.y) } } sort.Ints(tmp) if(inverted(tmp)==true)||(postive(tmp)==true){ returntrue } returnfalse } funcIsFive(inat*Allinat,coorCoordinat)bool{ ok:=crosswise(inat,coor) ok2:=lengthways(inat,coor) ok3:=Slope(inat,coor) //slope(inat) ifok==true||ok2==true||ok3==true{ returntrue } returnfalse } func(inat*Allinat)AddCoordinat(coorCoordinat){ for_,coslice:=rangeinat.key{ ifcoslice==coor{ return } } c:=IsFive(inat,coor) fmt.Println(c,"*****",coor) ifc==false{//notfinishfive inat.key=append(inat.key,coor) fmt.Println("没有连成") return } fmt.Println("连成point颗") return }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。