帮我用go写一个五子棋
时间: 2023-07-20 22:11:22 浏览: 125
用js写的一个五子棋
5星 · 资源好评率100%
好的,以下是使用Go语言编写的五子棋游戏示例代码:
```
package main
import (
"fmt"
"strings"
)
const (
boardSize = 15
none = 0
black = 1
white = 2
)
type Board struct {
grid [boardSize][boardSize]int
current int
}
func (b *Board) String() string {
var sb strings.Builder
for _, row := range b.grid {
for _, piece := range row {
switch piece {
case none:
sb.WriteString(". ")
case black:
sb.WriteString("X ")
case white:
sb.WriteString("O ")
}
}
sb.WriteString("\n")
}
return sb.String()
}
func (b *Board) Play(row, col int) error {
if row < 0 || row >= boardSize || col < 0 || col >= boardSize {
return fmt.Errorf("Position out of bounds: (%d, %d)", row, col)
}
if b.grid[row][col] != none {
return fmt.Errorf("Position already occupied: (%d, %d)", row, col)
}
b.grid[row][col] = b.current
b.current = 3 - b.current
return nil
}
func (b *Board) Winner() int {
for i := 0; i < boardSize; i++ {
for j := 0; j < boardSize; j++ {
if b.grid[i][j] == none {
continue
}
if i+4 < boardSize && b.grid[i][j] == b.grid[i+1][j] && b.grid[i][j] == b.grid[i+2][j] && b.grid[i][j] == b.grid[i+3][j] && b.grid[i][j] == b.grid[i+4][j] {
return b.grid[i][j]
}
if j+4 < boardSize && b.grid[i][j] == b.grid[i][j+1] && b.grid[i][j] == b.grid[i][j+2] && b.grid[i][j] == b.grid[i][j+3] && b.grid[i][j] == b.grid[i][j+4] {
return b.grid[i][j]
}
if i+4 < boardSize && j+4 < boardSize && b.grid[i][j] == b.grid[i+1][j+1] && b.grid[i][j] == b.grid[i+2][j+2] && b.grid[i][j] == b.grid[i+3][j+3] && b.grid[i][j] == b.grid[i+4][j+4] {
return b.grid[i][j]
}
if i+4 < boardSize && j-4 >= 0 && b.grid[i][j] == b.grid[i+1][j-1] && b.grid[i][j] == b.grid[i+2][j-2] && b.grid[i][j] == b.grid[i+3][j-3] && b.grid[i][j] == b.grid[i+4][j-4] {
return b.grid[i][j]
}
}
}
return none
}
func main() {
b := Board{}
fmt.Println(b)
err := b.Play(7, 7) // black
if err != nil {
fmt.Println(err)
}
fmt.Println(b)
err = b.Play(8, 8) // white
if err != nil {
fmt.Println(err)
}
fmt.Println(b)
err = b.Play(7, 8) // black
if err != nil {
fmt.Println(err)
}
fmt.Println(b)
err = b.Play(8, 9) // white
if err != nil {
fmt.Println(err)
}
fmt.Println(b)
err = b.Play(7, 9) // black
if err != nil {
fmt.Println(err)
}
fmt.Println(b)
fmt.Println("Winner:", b.Winner())
}
```
这个程序使用一个 `Board` 结构表示五子棋棋盘,其中 `grid` 数组存储每个位置的状态,`current` 表示当前轮到哪个玩家下棋。`String` 方法用于将棋盘转换为字符串表示。`Play` 方法用于将棋子放置到棋盘上,如果该位置已经被占据或者超出了棋盘边界,则返回错误。`Winner` 方法用于判断是否有玩家获胜。
在 `main` 函数中,我们按照顺序放置了一些棋子,并打印了每个步骤之后的棋盘状态以及最终的胜者。
请注意,这只是一个简单的示例,它可能存在一些问题,并且可能需要进行更多的改进和优化才能成为一个真正可用的五子棋游戏。
阅读全文