Skip to content

Commit b7a4c41

Browse files
committed
✨ (2048): add layout create
1 parent c2d25e8 commit b7a4c41

File tree

7 files changed

+109
-2
lines changed

7 files changed

+109
-2
lines changed

.github/workflows/go.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,7 @@ jobs:
2020
check-latest: true
2121
- name: Setup dependency
2222
run: go mod tidy
23+
- name: Test Build
24+
run: make build-game
2325
- name: Test
2426
run: go test -v ./...

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,4 @@ go.work.sum
3030
# Editor/IDE
3131
# .idea/
3232
# .vscode/
33+
bin

Makefile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
.PHONY=build
2+
3+
build-game:
4+
@CGO_ENABLED=1 GOOS=linux go build -o bin/2048-game cmd/main.go
5+
6+
run-game: build-game
7+
@./bin/2048-game
8+
9+
10+
coverage:
11+
@go test -v -cover ./...
12+
13+
test:
14+
@go test -v ./...

cmd/main.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package main
2+
3+
import (
4+
"log"
5+
6+
"github.com/hajimehoshi/ebiten/v2"
7+
"github.com/leetcode-golang-classroom/2048-game/internal"
8+
)
9+
10+
func main() {
11+
ebiten.SetWindowSize(internal.WinWidth, internal.WinHeight)
12+
ebiten.SetWindowTitle("2048 - Day 7 測試")
13+
game := internal.NewGame()
14+
if err := ebiten.RunGame(game); err != nil {
15+
log.Fatal(err)
16+
}
17+
}

go.mod

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,21 @@ module github.com/leetcode-golang-classroom/2048-game
22

33
go 1.24.0
44

5-
require github.com/stretchr/testify v1.10.0
5+
require (
6+
github.com/hajimehoshi/ebiten/v2 v2.8.8
7+
github.com/stretchr/testify v1.10.0
8+
)
69

710
require (
811
github.com/davecgh/go-spew v1.1.1 // indirect
12+
github.com/ebitengine/gomobile v0.0.0-20240911145611-4856209ac325 // indirect
13+
github.com/ebitengine/hideconsole v1.0.0 // indirect
14+
github.com/ebitengine/purego v0.8.0 // indirect
15+
github.com/jezek/xgb v1.1.1 // indirect
16+
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
917
github.com/pmezard/go-difflib v1.0.0 // indirect
18+
golang.org/x/sync v0.8.0 // indirect
19+
golang.org/x/sys v0.25.0 // indirect
20+
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect
1021
gopkg.in/yaml.v3 v3.0.1 // indirect
1122
)

go.sum

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,32 @@
11
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
22
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3+
github.com/ebitengine/gomobile v0.0.0-20240911145611-4856209ac325 h1:Gk1XUEttOk0/hb6Tq3WkmutWa0ZLhNn/6fc6XZpM7tM=
4+
github.com/ebitengine/gomobile v0.0.0-20240911145611-4856209ac325/go.mod h1:ulhSQcbPioQrallSuIzF8l1NKQoD7xmMZc5NxzibUMY=
5+
github.com/ebitengine/hideconsole v1.0.0 h1:5J4U0kXF+pv/DhiXt5/lTz0eO5ogJ1iXb8Yj1yReDqE=
6+
github.com/ebitengine/hideconsole v1.0.0/go.mod h1:hTTBTvVYWKBuxPr7peweneWdkUwEuHuB3C1R/ielR1A=
7+
github.com/ebitengine/purego v0.8.0 h1:JbqvnEzRvPpxhCJzJJ2y0RbiZ8nyjccVUrSM3q+GvvE=
8+
github.com/ebitengine/purego v0.8.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
9+
github.com/hajimehoshi/ebiten/v2 v2.8.8 h1:xyMxOAn52T1tQ+j3vdieZ7auDBOXmvjUprSrxaIbsi8=
10+
github.com/hajimehoshi/ebiten/v2 v2.8.8/go.mod h1:durJ05+OYnio9b8q0sEtOgaNeBEQG7Yr7lRviAciYbs=
11+
github.com/jezek/xgb v1.1.1 h1:bE/r8ZZtSv7l9gk6nU0mYx51aXrvnyb44892TwSaqS4=
12+
github.com/jezek/xgb v1.1.1/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk=
13+
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
14+
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
15+
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
16+
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
17+
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
318
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
419
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
520
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
621
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
7-
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
22+
golang.org/x/image v0.20.0 h1:7cVCUjQwfL18gyBJOmYvptfSHS8Fb3YUDtfLIZ7Nbpw=
23+
golang.org/x/image v0.20.0/go.mod h1:0a88To4CYVBAHp5FXJm8o7QbUl37Vd85ply1vyD8auM=
24+
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
25+
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
26+
golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
27+
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
828
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
29+
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U=
30+
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
931
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
1032
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

internal/layout.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package internal
2+
3+
import (
4+
"image/color"
5+
6+
"github.com/hajimehoshi/ebiten/v2"
7+
)
8+
9+
const (
10+
tileSize = 100
11+
gridSize = 4
12+
padding = 10
13+
WinWidth = tileSize*gridSize + padding*(gridSize+1)
14+
WinHeight = tileSize*gridSize + padding*(gridSize+1)
15+
)
16+
17+
func (g *Game) Draw(screen *ebiten.Image) {
18+
// 背景色
19+
screen.Fill(color.RGBA{250, 248, 239, 255})
20+
// 畫 4x4 格子
21+
for row := 0; row < gridSize; row++ {
22+
for col := 0; col < gridSize; col++ {
23+
op := &ebiten.DrawImageOptions{}
24+
x := padding + col*(tileSize+padding)
25+
y := padding + row*(tileSize+padding)
26+
rect := ebiten.NewImage(tileSize, tileSize)
27+
rect.Fill(color.RGBA{205, 193, 180, 255})
28+
op.GeoM.Translate(float64(x), float64(y))
29+
screen.DrawImage(rect, op)
30+
}
31+
}
32+
}
33+
34+
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {
35+
return WinWidth, WinHeight
36+
}
37+
38+
func (g *Game) Update() error {
39+
return nil
40+
}

0 commit comments

Comments
 (0)