diff --git a/common_test.go b/common_test.go index 7299777..ab0ffb0 100644 --- a/common_test.go +++ b/common_test.go @@ -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) { + +} diff --git a/views/gamesViews.go b/views/gamesViews.go index 3645d1e..dbdfff0 100644 --- a/views/gamesViews.go +++ b/views/gamesViews.go @@ -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(), + } +}