目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O11o_4o0] 石の色定義
連載の目次
Step [O11o_4o0] 石の色定義
石
を定義していないが、先に 石の色
を定義する
石の色の組み合わせを定義する。
石の色の組み合わせは以下の4通りある。これらの集合を Color
と名付けることにする
-
Color_None
- 隣接する連は1つもない -
Color_Black
- 黒石の連とだけ隣接する -
Color_White
- 白石の連とだけ隣接する -
Color_Mixed
- 黒石と白石の連の両方に隣接する
Step [O11o_4o1o0] ファイル作成 - color.go
👇 以下のファイルを新規作成してほしい
📂 kifuwarabe-uec14
├── 📂 kernel
👉 │ ├── 📄 color.mod
│ ├── 📄 go.mod
│ ├── 📄 kernel.go
│ └── 📄 logger.go
├── 📄 .gitignore
├── 📄 engine_config.go
├── 📄 engine.toml
├── 📄 go.mod
├── 📄 go.work
└── 📄 main.go
// BOF [O11o_4o1o0]
package kernel
import "fmt"
type Color uint
const (
Color_None Color = iota
Color_Black
Color_White
Color_Mixed
)
// String - 文字列化
func (c Color) String() string {
switch c {
case Color_None:
return ""
case Color_Black:
return "x"
case Color_White:
return "o"
case Color_Mixed:
return "xo"
default:
panic(fmt.Sprintf("unexpected color:%d", int(c)))
}
}
// GetAdded - 色の加算
func (c1 Color) GetAdded(c2 Color) Color {
switch c1 {
case Color_None:
return c2
case Color_Black:
switch c2 {
case Color_None:
return Color_Black
case Color_Black:
return Color_Black
case Color_White:
return Color_Mixed
case Color_Mixed:
return Color_Mixed
default:
panic(fmt.Sprintf("unexpected my_color:%s adds_color:%s", c1, c2))
}
case Color_White:
switch c2 {
case Color_None:
return Color_White
case Color_Black:
return Color_Mixed
case Color_White:
return Color_White
case Color_Mixed:
return Color_Mixed
default:
panic(fmt.Sprintf("unexpected my_color:%s adds_color:%s", c1, c2))
}
case Color_Mixed:
return Color_Mixed
default:
panic(fmt.Sprintf("unexpected my_color:%s adds_color:%s", c1, c2))
}
}
// GetOpponent - 色の反転
func (c Color) GetOpponent() Color {
switch c {
case Color_None:
return Color_Mixed
case Color_Black:
return Color_White
case Color_White:
return Color_Black
case Color_Mixed:
return Color_None
default:
panic(fmt.Sprintf("unexpected color:%d", int(c)))
}
}
// EOF [O11o_4o1o0]