完善聊天功能 初步构建十子棋功能
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
package views
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/container"
|
||||
"fyne.io/fyne/v2/theme"
|
||||
"fyne.io/fyne/v2/widget"
|
||||
"slices"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func TenChinaGameView() {
|
||||
myApp := fyne.CurrentApp()
|
||||
myWindow := myApp.NewWindow("Cross Flag Game")
|
||||
|
||||
gridWrap := container.NewGridWrap(fyne.NewSize(100, 100))
|
||||
|
||||
for i := 0; i < 9; i++ {
|
||||
//var itemIndex = i
|
||||
var item = widget.NewButton("", func() {})
|
||||
if i > 6 {
|
||||
item.SetIcon(theme.ConfirmIcon())
|
||||
} else {
|
||||
item.SetIcon(theme.CancelIcon())
|
||||
}
|
||||
gridWrap.Add(container.NewBorder(nil, nil, nil, nil, item))
|
||||
}
|
||||
myWindow.SetContent(container.NewScroll(gridWrap))
|
||||
|
||||
myWindow.Resize(fyne.NewSize(320, 318))
|
||||
myWindow.CenterOnScreen()
|
||||
myWindow.Show()
|
||||
}
|
||||
|
||||
type TenGame struct {
|
||||
lock sync.Mutex
|
||||
playerMax int
|
||||
CurrentRoundPlayer int
|
||||
players [][]int
|
||||
items []*widget.Button
|
||||
winCallback func(int)
|
||||
}
|
||||
|
||||
func (t *TenGame) Play(userIndex int, pos int) error {
|
||||
t.lock.Lock()
|
||||
defer t.lock.Unlock()
|
||||
if t.CurrentRoundPlayer != userIndex {
|
||||
return errors.New("not your turn")
|
||||
}
|
||||
t.play(pos)
|
||||
|
||||
t.CurrentRoundPlayer++
|
||||
if t.CurrentRoundPlayer+1 > t.playerMax {
|
||||
t.CurrentRoundPlayer = 0
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
/*
|
||||
1, 2, 3
|
||||
4, 5, 6
|
||||
7, 8, 9
|
||||
*/
|
||||
func (t *TenGame) play(pos int) {
|
||||
// TODO
|
||||
playerIntList := t.players[t.CurrentRoundPlayer]
|
||||
playerIntList = append(playerIntList, pos)
|
||||
// 刷新数据
|
||||
if t.CurrentRoundPlayer == 1 {
|
||||
t.items[pos].SetIcon(theme.ConfirmIcon())
|
||||
} else {
|
||||
t.items[pos].SetIcon(theme.CancelIcon())
|
||||
}
|
||||
|
||||
// check 胜利 判断
|
||||
slices.Sort(playerIntList)
|
||||
|
||||
}
|
||||
|
||||
func (t *TenGame) winCheck(playerIntList []int) bool {
|
||||
for _, i := range playerIntList {
|
||||
var iI = i
|
||||
if t.checkLine(playerIntList, iI, 1) ||
|
||||
t.checkLine(playerIntList, iI, 2) ||
|
||||
t.checkLine(playerIntList, iI, 4) {
|
||||
return true
|
||||
}
|
||||
// todo slices.Delete()
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (t *TenGame) checkLine(playerIntList []int, iI, add int) bool {
|
||||
for {
|
||||
iI += add
|
||||
if iI > 9 {
|
||||
return true
|
||||
}
|
||||
if !slices.Contains(playerIntList, iI) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user