完善小游戏逻辑
This commit is contained in:
@@ -10,3 +10,7 @@ func TestP1(t *testing.T) {
|
|||||||
r := views.IsArithmeticSequence2([]int{0, 4, 8}, 8, 3, 3, 3)
|
r := views.IsArithmeticSequence2([]int{0, 4, 8}, 8, 3, 3, 3)
|
||||||
fmt.Println(r)
|
fmt.Println(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestP2(t *testing.T) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
+59
-8
@@ -1,6 +1,7 @@
|
|||||||
package views
|
package views
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
@@ -8,8 +9,13 @@ import (
|
|||||||
"fyne.io/fyne/v2/canvas"
|
"fyne.io/fyne/v2/canvas"
|
||||||
"fyne.io/fyne/v2/container"
|
"fyne.io/fyne/v2/container"
|
||||||
"fyne.io/fyne/v2/dialog"
|
"fyne.io/fyne/v2/dialog"
|
||||||
|
"fyne.io/fyne/v2/layout"
|
||||||
"fyne.io/fyne/v2/theme"
|
"fyne.io/fyne/v2/theme"
|
||||||
"fyne.io/fyne/v2/widget"
|
"fyne.io/fyne/v2/widget"
|
||||||
|
"image"
|
||||||
|
"image/color"
|
||||||
|
"image/draw"
|
||||||
|
"image/png"
|
||||||
"slices"
|
"slices"
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
@@ -65,15 +71,15 @@ func NewTenGame(winCallback func(int)) *TenGame {
|
|||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
game := &TenGame{
|
game := &TenGame{
|
||||||
playerID2Image: playerImageMap,
|
playerID2Image: playerImageMap,
|
||||||
defaultImage: theme.CheckButtonIcon(),
|
defaultImage: nil, //theme.ViewFullScreenIcon(),
|
||||||
|
|
||||||
currentRoundPlayer: 0,
|
currentRoundPlayer: 0,
|
||||||
players: make([][]int, len(playerImageMap)),
|
players: make([][]int, len(playerImageMap)),
|
||||||
winCallback: winCallback,
|
winCallback: winCallback,
|
||||||
itemSize: fyne.NewSize(25, 25),
|
itemSize: fyne.NewSize(50, 50),
|
||||||
itemX: 3,
|
itemX: 10,
|
||||||
itemY: 3,
|
itemY: 10,
|
||||||
winSum: 3,
|
winSum: 5,
|
||||||
Ctx: ctx,
|
Ctx: ctx,
|
||||||
Cancel: cancel,
|
Cancel: cancel,
|
||||||
}
|
}
|
||||||
@@ -84,10 +90,14 @@ func (t *TenGame) StartShow() {
|
|||||||
myApp := fyne.CurrentApp()
|
myApp := fyne.CurrentApp()
|
||||||
myWindow := myApp.NewWindow(fmt.Sprintf("Game %0.f*%0.f win:%d", t.itemX, t.itemY, t.winSum))
|
myWindow := myApp.NewWindow(fmt.Sprintf("Game %0.f*%0.f win:%d", t.itemX, t.itemY, t.winSum))
|
||||||
t.w = myWindow
|
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()
|
myWindow.CenterOnScreen()
|
||||||
t.w.SetOnClosed(func() { t.Cancel() })
|
|
||||||
myWindow.Show()
|
myWindow.Show()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,6 +110,7 @@ func (t *TenGame) CanvasObject() fyne.CanvasObject {
|
|||||||
image := canvas.NewImageFromResource(t.defaultImage)
|
image := canvas.NewImageFromResource(t.defaultImage)
|
||||||
image.FillMode = canvas.ImageFillOriginal
|
image.FillMode = canvas.ImageFillOriginal
|
||||||
image.Resize(t.itemSize) //fy
|
image.Resize(t.itemSize) //fy
|
||||||
|
|
||||||
t.Items = append(t.Items, image)
|
t.Items = append(t.Items, image)
|
||||||
|
|
||||||
toggle := widget.NewButton("", func() {
|
toggle := widget.NewButton("", func() {
|
||||||
@@ -108,10 +119,12 @@ func (t *TenGame) CanvasObject() fyne.CanvasObject {
|
|||||||
toggle.Resize(t.itemSize)
|
toggle.Resize(t.itemSize)
|
||||||
|
|
||||||
iViews := container.NewBorder(nil, nil, nil, nil, container.NewWithoutLayout(image, toggle))
|
iViews := container.NewBorder(nil, nil, nil, nil, container.NewWithoutLayout(image, toggle))
|
||||||
|
iViews.Resize(t.itemSize)
|
||||||
//gridWrap.Add()
|
//gridWrap.Add()
|
||||||
items = append(items, iViews)
|
items = append(items, iViews)
|
||||||
}
|
}
|
||||||
gridWrap := container.NewGridWithRows(int(t.itemX), items...)
|
gridWrap := container.NewGridWithRows(int(t.itemX), items...)
|
||||||
|
|
||||||
return container.NewScroll(gridWrap)
|
return container.NewScroll(gridWrap)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,3 +262,41 @@ func lineSum(pos pos, mapX, mapY int, numbers []int, direction pos) (sum int) {
|
|||||||
sum++
|
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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user