使用golang怎么實(shí)現(xiàn)一個(gè)五子棋預(yù)測(cè)算法

本篇文章為大家展示了使用golang怎么實(shí)現(xiàn)一個(gè)五子棋預(yù)測(cè)算法,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)建站專注于伊犁網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供伊犁營(yíng)銷(xiāo)型網(wǎng)站建設(shè),伊犁網(wǎng)站制作、伊犁網(wǎng)頁(yè)設(shè)計(jì)、伊犁網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造伊犁網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供伊犁網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。

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{         //最后一個(gè)下標(biāo)說(shuō)明無(wú)法對(duì)比
      return false
    }
    if tmp[k]-1 == tmp[k]{   //說(shuō)明值是連續(xù)數(shù)字
      i++
      if i == point{     //如果達(dá)到連續(xù)數(shù)就返回
        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{    //最后一個(gè)下標(biāo)說(shuō)明無(wú)法對(duì)比
      return false
    }
    if cv+1 == tmp[ck+1] {   //說(shuō)明值是連續(xù)數(shù)字
      i++
      if i == point{     //如果達(dá)到連續(xù)數(shù)就返回
        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("沒(méi)有連成")
    return 
  }
  fmt.Println("連成point顆")
  return 

}

上述內(nèi)容就是使用golang怎么實(shí)現(xiàn)一個(gè)五子棋預(yù)測(cè)算法,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁(yè)題目:使用golang怎么實(shí)現(xiàn)一個(gè)五子棋預(yù)測(cè)算法
分享地址:http://muchs.cn/article6/ihijig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、虛擬主機(jī)、網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司