基于go语言写的闯迷宫小游戏,用递归的方式实现,没有使用GUI库,所以只能在命令行面板查看效果,实现思路:用二维数组模拟地图,用数组的值表示地图的相关信息,具体值参考代码注释,效果如下
-
游戏开始前的地图
-
-
游戏结束的地图(点为2表示这条路可以通过)
-
package main
import "fmt"
//迷宫小游戏
func main() {
//定义迷宫地图
gameMap := [10][10]int{}
for i := 0; i < 10; i++ {
gameMap[i][0] = 1
gameMap[i][9] = 1
gameMap[0][i] = 1
gameMap[9][i] = 1
}
for i := 0; i < len(gameMap); i++ {
for j := 0; j < len(gameMap[0]); j++ {
fmt.Printf("%v ", gameMap[i][j])
}
fmt.Println()
}
//设置障碍墙-也可以不设置
gameMap[4][1] = 1
gameMap[4][2] = 1
gameMap[4][3] = 1
gameMap[4][4] = 1
gameMap[4][5] = 1
gameMap[6][2] = 1
gameMap[6][3] = 1
gameMap[6][4] = 1
gameMap[6][5] = 1
gameMap[6][6] = 1
gameMap[6][7] = 1
gameMap[6][8] = 1
//定义规则
//1、当地图的值为1时,表示该点为墙,不能通过
//2、当地图的值为0时,当前这个点还没有走过
//3、当地图的值为2时,这个点是通路
//4、当地图的值为-1时,当前这个点为死路
//开始游戏
run(&gameMap,1,1)
fmt.Println("游戏结束")
for i := 0; i < len(gameMap); i++ {
for j := 0; j < len(gameMap[0]); j++ {
fmt.Printf("%v ", gameMap[i][j])
}
fmt.Println()
}
}
func run(gameMap *[10][10]int, i, j int) bool {
//当设置的最后一个点为2时,通关完成,退出游戏
if gameMap[8][8] == 2 {
return true
}
//开始探寻
if gameMap[i][j] == 0 {
//假设当前位置可以通过
gameMap[i][j] = 2
//制定探寻规则,下、右,左、上,此处可以修改规则
if run(gameMap, i+1, j) { //下
return true
} else if run(gameMap, i, j+1) { //右
return true
} else if run(gameMap, i, j-1) { //左
return true
} else if run(gameMap, i-1, j) { //上
return true
} else {
gameMap[i][j] = 3
return false
}
} else {
return false
}
}