完善小游戏逻辑

This commit is contained in:
2024-10-17 01:21:55 +08:00
parent 411876b377
commit 2fb887a936
2 changed files with 63 additions and 8 deletions
+4
View File
@@ -10,3 +10,7 @@ func TestP1(t *testing.T) {
r := views.IsArithmeticSequence2([]int{0, 4, 8}, 8, 3, 3, 3)
fmt.Println(r)
}
func TestP2(t *testing.T) {
}
+59 -8
View File
@@ -1,6 +1,7 @@
package views
import (
"bytes"
"context"
"errors"
"fmt"
@@ -8,8 +9,13 @@ import (
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/dialog"
"fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
"image"
"image/color"
"image/draw"
"image/png"
"slices"
"sync"
)
@@ -65,15 +71,15 @@ func NewTenGame(winCallback func(int)) *TenGame {
ctx, cancel := context.WithCancel(context.Background())
game := &TenGame{
playerID2Image: playerImageMap,
defaultImage: theme.CheckButtonIcon(),
defaultImage: nil, //theme.ViewFullScreenIcon(),
currentRoundPlayer: 0,
players: make([][]int, len(playerImageMap)),
winCallback: winCallback,
itemSize: fyne.NewSize(25, 25),
itemX: 3,
itemY: 3,
winSum: 3,
itemSize: fyne.NewSize(50, 50),
itemX: 10,
itemY: 10,
winSum: 5,
Ctx: ctx,
Cancel: cancel,
}
@@ -84,10 +90,14 @@ func (t *TenGame) StartShow() {
myApp := fyne.CurrentApp()
myWindow := myApp.NewWindow(fmt.Sprintf("Game %0.f*%0.f win:%d", t.itemX, t.itemY, t.winSum))
t.w = myWindow
myWindow.SetContent(t.CanvasObject())
myWindow.Resize(fyne.NewSize(t.itemX*(t.itemSize.Width+8), t.itemY*(t.itemSize.Height+8)))
wSize := fyne.NewSize(t.itemX*(t.itemSize.Width), t.itemY*(t.itemSize.Height))
myWindow.Resize(wSize)
myWindow.SetContent(container.New(layout.NewMaxLayout(),
canvas.NewImageFromResource(drawABackgroundImage(wSize, int(t.itemX), int(t.itemY))),
t.CanvasObject()))
myWindow.CenterOnScreen()
t.w.SetOnClosed(func() { t.Cancel() })
myWindow.Show()
}
@@ -100,6 +110,7 @@ func (t *TenGame) CanvasObject() fyne.CanvasObject {
image := canvas.NewImageFromResource(t.defaultImage)
image.FillMode = canvas.ImageFillOriginal
image.Resize(t.itemSize) //fy
t.Items = append(t.Items, image)
toggle := widget.NewButton("", func() {
@@ -108,10 +119,12 @@ func (t *TenGame) CanvasObject() fyne.CanvasObject {
toggle.Resize(t.itemSize)
iViews := container.NewBorder(nil, nil, nil, nil, container.NewWithoutLayout(image, toggle))
iViews.Resize(t.itemSize)
//gridWrap.Add()
items = append(items, iViews)
}
gridWrap := container.NewGridWithRows(int(t.itemX), items...)
return container.NewScroll(gridWrap)
}
@@ -249,3 +262,41 @@ func lineSum(pos pos, mapX, mapY int, numbers []int, direction pos) (sum int) {
sum++
}
}
// 画背景图
func drawABackgroundImage(size fyne.Size, itemX, itemY int) fyne.Resource {
img := image.NewRGBA(image.Rect(0, 0, int(size.Width), int(size.Height)))
draw.Draw(img, img.Bounds(), &image.Uniform{C: color.White}, image.Point{}, draw.Src)
//itemX = itemX * 2
//itemY = itemY * 2
// 画横线
for ix := 1; ix < itemX; ix++ {
i1 := int(size.Height * (float32(ix) / float32(itemX)))
for x := 1; x < int(size.Width); x++ {
img.Set(x, i1, color.Black)
}
//ix++
}
// Draw vertical line
for ix := 1; ix < itemY; ix++ {
i2 := int(size.Width * (float32(ix) / float32(itemY)))
for y := 0; y < int(size.Height); y++ {
img.Set(i2, y, color.Black)
}
//ix++
}
buffer := new(bytes.Buffer)
err := png.Encode(buffer, img)
if err != nil {
return nil
}
return &fyne.StaticResource{
StaticName: "",
StaticContent: buffer.Bytes(),
}
}