下面是一个简单的示例,展示如何使用Go语言编写一个命令行版的2048小游戏:
package main
import (
"fmt"
"math/rand"
)
const (
boardSize = 4 // 棋盘大小
goal = 2048 // 目标数字
)
type Direction int
const (
Up Direction = iota
Down
Left
Right
)
type Game struct {
board [][]int
score int
}
func NewGame() *Game {
board := make([][]int, boardSize)
for i := range board {
board[i] = make([]int, boardSize)
}
return &Game{
board: board,
score: 0,
}
}
func (g *Game) PrintBoard() {
for _, row := range g.board {
for _, cell := range row {
fmt.Printf("%-5d", cell)
}
fmt.Println()
}
}
func (g *Game) AddRandomTile() {
var emptyCells []int
for i, row := range g.board {
for j, cell := range row {
if cell == 0 {
position := i*boardSize + j
emptyCells = append(emptyCells, position)
}
}
}
if len(emptyCells) > 0 {
randomPosition := emptyCells[rand.Intn(len(emptyCells))]
randomValue := rand.Intn(2)*2 + 2 // 随机生成2或者4
rowIndex := randomPosition / boardSize
colIndex := randomPosition % boardSize
g.board[rowIndex][colIndex] = randomValue
}
}
func (g *Game) Move(direction Direction) bool {
moved := false
switch direction {
case Up:
for col := 0; col < boardSize; col++ {
for row := 1; row < boardSize; row++ {
if g.board[row][col] != 0 {
for i := row; i > 0 && g.board[i-1][col] == 0; i-- {
g.board[i-1][col], g.board[i][col] = g.board[i][col], g.board[i-1][col]
moved = true
}
}
}
}
case Down:
for col := 0; col < boardSize; col++ {
for row := boardSize - 2; row >= 0; row-- {
if g.board[row][col] != 0 {
for i := row; i < boardSize-1 && g.board[i+1][col] == 0; i++ {
g.board[i+1][col], g.board[i][col] = g.board[i][col], g.board[i+1][col]
moved = true
}
}
}
}
case Left:
for row := 0; row < boardSize; row++ {
for col := 1; col < boardSize; col++ {
if g.board[row][col] != 0 {
for j := col; j > 0 && g.board[row][j-1] == 0; j-- {
g.board[row][j-1], g.board[row][j] = g.board[row][j], g.board[row][j-1]
moved = true
}
}
}
}
case Right:
for row := 0 ;row<boardSize ;row ++{
for col:=boardSize-2;col>=0;col--{
if g.board[row][col] != 0 {
for j := col; j < boardSize-1 && g.board[row][j+1] == 0; j++ {
g.board[row][j+1], g.board[row][j] = g.board[row][j], g.board[row][j+1]
moved = true
}
}
}
}
}
return moved
}
func main() {
game := NewGame()
game.AddRandomTile()
game.AddRandomTile()
for {
fmt.Println("Score:", game.score)
game.PrintBoard()
var direction Direction
fmt.Print("Enter move (WASD): ")
fmt.Scanf("%c\n", &direction)
moved := game.Move(direction)
if !moved {
fmt.Println("Invalid move!")
continue
}
game.AddRandomTile()
// TODO: 检查是否达到目标数字,游戏结束的逻辑
// TODO: 检查是否无法移动,游戏结束的逻辑
}
}
请注意这只是一个简单的示例,仅包含基本功能。你可以根据自己的需求进行扩展和改进。
内容由零声教学AI助手提供,问题来源于学员提问