完善小游戏逻辑
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)
|
||||
fmt.Println(r)
|
||||
}
|
||||
|
||||
func TestP2(t *testing.T) {
|
||||
|
||||
}
|
||||
|
||||
+59
-8
@@ -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(),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user