C语言版本 JAVA语言版本 Python语言版本
以下展示的是Google(谷歌)公司开发的go语言源码:
package main
import (
"fmt"
"math/rand"
"time"
)
const (
Size = 5 // 游戏棋盘大小
Mines = 5 // 地雷数量
)
var (
board [Size][Size]string // 棋盘格子显示
mines [Size][Size]bool // 是否为地雷
revealed [Size][Size]bool // 是否已揭开
remainingCell int // 剩余未揭开格子数量
)
func initializeGame() {
for i := 0; i < Size; i++ {
for j := 0; j < Size; j++ {
board[i][j] = "-"
mines[i][j] = false
revealed[i][j] = false
}
}
remainingCell = Size*Size - Mines
}
func placeMines() {
rand.Seed(time.Now().UnixNano())
minesToPlace := Mines
for minesToPlace > 0 {
row := rand.Intn(Size)
col := rand.Intn(Size)
if !mines[row][col] {
mines[row][col] = true
minesToPlace--
}
}
}
func calculateNumbers() {
for i := 0; i < Size; i++ {
for j := 0; j < Size; j++ {
if !mines[i][j] {
count := 0
for di := -1; di <= 1; di++ {
for dj := -1; dj <= 1; dj++ {
ni := i + di
nj := j + dj
if ni >= 0 && ni < Size && nj >= 0 && nj < Size && mines[ni][nj] {
count++
}
}
}
if count > 0 {
board[i][j] = fmt.Sprintf("%d", count)
}
}
}
}
}
func printBoard() {
fmt.Println("当前棋盘状态:")
fmt.Print(" ")
for col := 0; col < Size; col++ {
fmt.Printf("%d ", col)
}
fmt.Println()
for row := 0; row < Size; row++ {
fmt.Printf("%d ", row)
for col := 0; col < Size; col++ {
if revealed[row][col] {
fmt.Printf("%s ", board[row][col])
} else {
fmt.Print("- ")
}
}
fmt.Println()
}
fmt.Println()
}
func revealCell(row, col int) {
revealed[row][col] = true
remainingCell--
if board[row][col] == "0" {
for di := -1; di <= 1; di++ {
for dj := -1; dj <= 1; dj++ {
ni := row + di
nj := col + dj
if ni >= 0 && ni < Size && nj >= 0 && nj < Size && !revealed[ni][nj] {
revealCell(ni, nj)
}
}
}
}
}
func playGame() {
initializeGame()
placeMines()
calculateNumbers()
for remainingCell > 0 {
printBoard()
var row, col int
fmt.Print("请输入要揭开的格子位置 (行 列): ")
fmt.Scanln(&row, &col)
if row < 0 || row >= Size || col < 0 || col >= Size {
fmt.Println("无效的位置,请重新输入。")
continue
}
if mines[row][col] {
fmt.Println("很抱歉,你揭开的是地雷!")
fmt.Println("游戏结束!")
break
} else if revealed[row][col] {
fmt.Println("这个位置已经揭开过了,请选择其他位置。")
continue
} else {
revealCell(row, col)
if remainingCell == 0 {
fmt.Println("恭喜!你成功揭开了所有非地雷格子!")
break
}
}
}
}
func main() {
playGame()
}
截至2024年7月1日前该源码只在csdn上展示过,谢绝抄袭搬运,转载留名原处