以下是使用Go语言编写的一个简单的2048游戏,采用命令行界面:
”`go package main
import (
"fmt"
"math/rand"
)
type Game struct {
board [4][4]int
score int
status string
}
func NewGame() *Game {
game := &Game{}
game.addTile()
game.addTile()
return game
}
func (g *Game) addTile() {
var emptyCells [][2]int
for i := 0; i < 4; i++ {
for j := 0; j < 4; j++ {
if g.board[i][j] == 0 {
emptyCells = append(emptyCells, [2]int{i, j})
}
}
}
if len(emptyCells) > 0 {
cell := emptyCells[rand.Intn(len(emptyCells))]
if rand.Float32() < 0.9 {
g.board[cell[0]][cell[1]] = 2
} else {
g.board[cell[0]][cell[1]] = 4
}
}
}
func (g *Game) moveLeft() bool {
moved := false
for i := 0; i < 4; i++ {
row := g.board[i]
for j:=1;j<4;j++{
if row[j]!=0{
for k:=j-1;k>=0;k--{
if row[k]==row[j] || row[k]==0{
if row[k]==row[j]{
row[k]*=2 //将两个相同数字合并,并将得分加上该数字。
g.score+=row[k]
}else{
row[k]=row[j]
}
row[j]=0
moved=true //表示有移动发生。
break
}
}
}
}
g.board[i] = row
}
return moved
}
func (g *Game) moveRight() bool {
moved := false
for i := 0; i < 4; i++ {
row := g.board[i]
for j:=2;j>=0;j--{
if row[j]!=0{
for k:=j+1;k<4;k++{
if row[k]==row[j] || row[k]==0{
if row[k]==row[j]{
row[k]*=2
g.score+=row[k]
}else{
row[k]=row[j]
}
row[j]=0
moved=true
break
}
}
}
}
g.board[i] = row
}
return moved
}
func (g *Game) moveUp() bool {
moved := false
for j:=0;j<4;j++{
column:=[4]int{g.board[0][j],g.board[1][j],g.board[2][j],g.board[3][j]}
for i:=1;i<4;i++{
if column[i]!=0{
for k:=i-1;k>=0;k--{
if column[k]==column[i] || column[k]==0{
if column[k]==column[i]{
column[k]*=2
g.score+=column[k]
}else{
column[k]=column[i]
}
column[i]=0
moved=true
break
}
}
}
}
g.board[0][j],g.board[1][j