首页 文章 Go语言基础 Go / Golang 五子棋 胜利
0
0
0
13

Go / Golang 五子棋 胜利

五子棋 Golang Go

关键点:同一个方向连续五子,获得胜利

普通做法:

var qipan [][]int

func luozi(x, y, color int) bool {

	qipan[x][y] = color

	for i := range direct {
		count := 0
		for j := 0; j < 5; j++ {
			if judgeValid(x+direct[i][0], y+direct[i][1], color) {
				count++
				continue
			}
			break
		}
		if count == 5 {
			return true
		}
	}

	return false
}

var direct = [][]int{{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}}

func judgeValid(x, y, color int) bool {
	if x < 0 || x >= len(qipan) || y < 0 || y >= len(qipan[0]) {
		return false
	}

	if qipan[x][y] == color {
		return true
	}

	return false
}

并发做法:

var qipan [][]int
var result = make([]bool, 0, 0)

func showQipan(){
	for i := 0; i<len(qipan); i++{
		for j := 0; j< len(qipan[0]);j++{
			fmt.Printf("%d ", qipan[i][j])
		}
		fmt.Println()
	}
}

func luozi(x, y, color int) {

	var wg sync.WaitGroup
	qipan[x][y] = color

	showQipan() //调试打印

	for i := range direct{
		wg.Add(1)
		go func(d []int){
			v := worker(x,y,color, 0, d,judgeValid)
			result = append(result, v)
			wg.Done()
		}(direct[i])
	}

	wg.Wait()
}

func main(){
	qipan = [][]int{
		{0,0,0,0,0,0,0,0},
		{0,0,0,0,0,0,0,0},
		{0,0,0,1,0,0,0,0},
		{0,0,0,0,1,0,0,0},
		{0,0,0,0,0,1,0,0},
		{0,0,0,0,0,0,1,0},
		{0,0,0,0,0,0,0,0},
		{0,0,0,0,0,0,0,0},
	}

	luozi(1, 2, 1)
	fmt.Println(result)
}


var direct = [][]int{{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}}
var num int = 5

func worker(x, y, color, level int,direct []int,f func(x, y, color int) bool) bool{

	if level == num {
		return true
	}

	if !f(x, y, color){
		return false
	}

	return  worker(x+direct[0], y+direct[1], color, level + 1,direct, f)
}


func judgeValid(x, y, color int) bool {
	if x < 0 || x >= len(qipan) || y < 0 || y >= len(qipan[0]) {
		return false
	}

	if qipan[x][y] == color {
		return true
	}

	return false
}

到此这篇关于“Go / Golang 五子棋 胜利”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持Go语言编程网!

相关文章

创建博客

开始创作
写作能提升自己能力,也能为他人分享知识。

在线教程

查看更多
  • Go入门指南

    Go入门指南

  • Go语言高级编程

    Go语言高级编程

  • Go Web 编程

    Go Web 编程

  • GO专家编程

    GO专家编程

  • Go语言四十二章经

    Go语言四十二章经

  • 数据结构和算法(Golang实现)

    数据结构和算法(Golang实现)

Go语言编程网

微信扫码关注订阅号


博客 资讯 教程 我的