用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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。