• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    用go写的五子棋预测算法的实现
    POST TIME:2021-10-18 17:28

    详细请看 Github:https://github.com/shanhuijie/GoWatch/tree/master/fiveinarow

    five in a row (五子棋成功预测)

    从横、纵、 左斜升、 左斜降 四个角度判断

    const( 
      matrix = 50*50 
      point = 3 
    ) 
      type Coordinat struct{
        x  int
        y  int
      }
    
    type Allinat struct{
      key   []Coordinat
    }
    
    func InArray(need Coordinat, needArr []Coordinat) bool {
      for _,v := range needArr{
        if need == v{
          return true
        }
      }
      return false
    }
    
    func inverted(tmp []int) bool {   //倒序检查
      var i int
      for k := len(tmp)-1; k>=0;k--{
        if k == 0{         //最后一个下标说明无法对比
          return false
        }
        if tmp[k]-1 == tmp[k]{   //说明值是连续数字
          i++
          if i == point{     //如果达到连续数就返回
            return true
          }
        }else{
          return false
        }
      }
      return false
    }
    
    func postive(tmp []int) bool {   //正序检查
      var i int
      for ck, cv := range tmp {
        if ck == len(tmp)-1{    //最后一个下标说明无法对比
          return false
        }
        if cv+1 == tmp[ck+1] {   //说明值是连续数字
          i++
          if i == point{     //如果达到连续数就返回
            return true
          }
        }else{
          return false
        }
      }
      return false
    }
    
    func Slope(inat *Allinat,coor Coordinat) bool {
      var (
        Xmax,Xmin int = coor.x+4,coor.x-4
        Ymax,Ymin int = coor.y+4,coor.y-4
        j,p   int
        lrise,lfall Coordinat
        //tmp []int
      )
      if Xmin  0 {
        Xmin = 0
      }
      if Ymin  0 {
        Ymin = 0
      }
      for i:=Xmin; i=Xmax; i++{
        Xmin = Xmin+1
        Ymin = Ymin+1
        lrise.x = Xmin
        lrise.y = Ymin
        if InArray(lrise,inat.key) {
          j++
          //fmt.Println(lrise,j)
          if j == point{
            return true
          }
        }
    
        if Ymin == Ymax {
          break
        }
      }
      for ii := Xmax; ii>=Xmin; ii--{
        Xmax = Xmax-1
        Ymin = Ymin+1
        lfall.x = Xmax
        lfall.y = Ymin
    
        if InArray(lfall,inat.key) {
          p++
          //fmt.Println(lfall,p)
          if p == point{
            return true
          }
        }
        if Ymin == Ymax {
          return false
        }
      }
      return false
    
    }
    
    func lengthways(inat *Allinat,coor Coordinat) bool {
      var (
        max,min int = coor.x+4,coor.x-4
        tmp []int
      )
      if min  0 {
        min = 0
      }
      for _,c := range inat.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) {
        return true
      }
      return false
    }
    
    func crosswise(inat *Allinat,coor Coordinat) bool {
      var (
        max,min int = coor.y+4,coor.y-4
        tmp []int
      )
      for _,c := range inat.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) {
        return true
      }
      return false
    }
    
    func IsFive(inat *Allinat,coor Coordinat) bool {
      ok := crosswise(inat,coor)
      ok2 := lengthways(inat,coor)
      ok3 := Slope(inat,coor)
      //slope(inat)
      if ok == true || ok2 == true || ok3 == true{
        return true
      }
      return false
    }
    
    func (inat *Allinat)AddCoordinat(coor Coordinat){
      for _,coslice := range inat.key{
        if coslice == coor {
          return 
        }
      }
      c := IsFive(inat,coor)
      fmt.Println(c,"*****",coor)
      if c == false{   //not finish five
        inat.key = append(inat.key,coor)
        fmt.Println("没有连成")
        return 
      }
      fmt.Println("连成point颗")
      return 
    
    }
    
    

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

    您可能感兴趣的文章:
    • python使用minimax算法实现五子棋
    • AI算法实现五子棋(java)
    • 基于C++实现五子棋AI算法思想
    • Java实现五子棋AI算法
    • VC实现五子棋游戏的一个算法示例
    • Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
    上一篇:详解golang中发送http请求的几种常见情况
    下一篇:Go使用defer函数要注意的几个点
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信