0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O12o_1o0] 盤定義(盤面走査)

Last updated at Posted at 2022-10-12

目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O12o_1o0] 盤定義(盤面走査)

連載の目次

📖 目指せ!第14回UEC杯コンピューター囲碁大会<本編>

Step [O12o_1o0] 盤定義(盤面走査)

Step [O12o0] ファイル作成 - board_area.go

👇 以下のファイルを新規作成してほしい

  	📂 kifuwarabe-uec14
	├── 📂 kernel
👉  │	├── 📄 board_area.go
  	│	├── 📄 o12o__11o1o0_board.go
	│	├── 📄 go.mod
 	│	├── 📄 kernel.go
 	│	├── 📄 logger.go
 	│	└── 📄 stone.go
    ├── 📄 .gitignore
 	├── 📄 engine_config.go
  	├── 📄 engine.toml
    ├── 📄 go.mod
  	├── 📄 go.work
 	└── 📄 main.go
// BOF [O12o0]

package kernel

// Init - 盤面初期化
func (b *Board) Init(width int, height int) {
	// 盤面のサイズが異なるなら、盤面を作り直す
	if b.coordinate.memoryWidth != width || b.coordinate.memoryHeight != height {
		b.resize(width, height)
	}

	// 枠の上辺、下辺を引く
	{
		var y = 0
		var y2 = b.coordinate.memoryHeight - 1
		for x := 0; x < b.coordinate.memoryWidth; x++ {
			var i = b.coordinate.GetPointFromXy(x, y)
			b.cells[i] = Stone_Wall

			i = b.coordinate.GetPointFromXy(x, y2)
			b.cells[i] = Stone_Wall
		}
	}
	// 枠の左辺、右辺を引く
	{
		var x = 0
		var x2 = b.coordinate.memoryWidth - 1
		for y := 1; y < b.coordinate.memoryHeight-1; y++ {
			var i = b.coordinate.GetPointFromXy(x, y)
			b.cells[i] = Stone_Wall

			i = b.coordinate.GetPointFromXy(x2, y)
			b.cells[i] = Stone_Wall
		}
	}
	// 枠の内側を空点で埋める
	{
		var height = b.coordinate.GetHeight()
		var width = b.coordinate.GetWidth()
		for y := 1; y < height; y++ {
			for x := 1; x < width; x++ {
				var i = b.coordinate.GetPointFromXy(x, y)
				b.cells[i] = Stone_Space
			}
		}
	}
}

// ForeachCellWithoutWall - 枠や改行を含めない各セルの番地
func (bc *BoardCoordinate) ForeachCellWithoutWall(setLocation func(Point)) {
	var height = bc.memoryHeight - 1
	var width = bc.memoryWidth - 1
	for y := 1; y < height; y++ {
		for x := 1; x < width; x++ {
			var i = bc.GetPointFromXy(x, y)
			setLocation(i)
		}
	}
}

// ForeachPayloadLocationOrderByYx - 枠や改行を含めない各セルの番地。筋、段の順
func (bc *BoardCoordinate) ForeachPayloadLocationOrderByYx(setLocation func(Point)) {
	var height = bc.memoryHeight - 1
	var width = bc.memoryWidth - 1
	for x := 1; x < width; x++ {
		for y := 1; y < height; y++ {
			var i = bc.GetPointFromXy(x, y)
			setLocation(i)
		}
	}
}

// ForeachNeumannNeighborhood - [O13o__10o0] 隣接する4方向の定義
func (b *Board) ForeachNeumannNeighborhood(here Point, setAdjacent func(Cell_4Directions, Point)) {
	// 東、北、西、南
	for dir := Cell_4Directions(0); dir < 4; dir++ {
		var p = here + b.coordinate.cell4Directions[dir] // 隣接する交点

		// 範囲外チェック
		if p < 0 || b.coordinate.GetMemoryArea() <= int(p) {
			continue
		}

		// 枠チェック
		if b.GetStoneAt(p) == Stone_Wall {
			continue
		}

		setAdjacent(dir, p)
	}
}

// EOF [O12o0]

Step [O12o1o0] カレントディレクトリーを移動

👇 以下のコマンドをコピーして、ターミナルに貼り付けてほしい

cd kernel

Step [O12o2o0] tidy

👇 以下のコマンドをコピーして、ターミナルに貼り付けてほしい

Input:

go get -u
go mod tidy

Step [O12o3o0] カレントディレクトリーを戻す

👇 以下のコマンドをコピーして、ターミナルに貼り付けてほしい

cd ..

Step [O12o4o0] リモートリポジトリにプッシュ

がんばって git などを使い、 github.com/muzudho/kifuwarabe-uec14/kernel モジュールの各パッケージのソースを
リモートリポジトリにプッシュしてほしい

Step [O12o5o0] tidy

👇 以下のコマンドをコピーして、ターミナルに貼り付けてほしい

Input:

go get -u

Output:

go: downloading github.com/muzudho/kifuwarabe-uec14/kernel v0.0.0-20220911114704-f68bc2cc5ece
go: upgraded github.com/muzudho/kifuwarabe-uec14/kernel v0.0.0-20220911112135-f237cc5d1832 => v0.0.0-20220911114704-f68bc2cc5ece

Input:

go mod tidy
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?