blog/BlogService/internal/controller/GameController.go

139 lines
2.6 KiB
Go

package controller
import (
"log"
"math/rand"
"reflect"
"sort"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/sessions"
)
type GameController struct {
Ctx iris.Context
Session *sessions.Session
}
func play() {
slice := createCardGroup()
washCard(slice)
// log.Println(slice)
players := map[int][]card{
0: {},
1: {},
2: {},
}
count := 17
players[0] = slice[:count]
slice = slice[count:]
players[1] = slice[:count]
slice = slice[count:]
players[2] = slice[:count]
slice = slice[count:]
// t := 0
// for {
// length := len(slice)
// if length == 0 {
// break
// }
// var i int = 0
// if length != 1 {
// i = rand.Intn(length - 1)
// }
// index := t % 3
// players[index] = append(players[index], slice[i])
// slice = append(slice[:i], slice[i+1:]...)
// t++
// }
player1 := players[0]
player2 := players[1]
player3 := players[2]
sort.Sort(cards(player1))
sort.Sort(cards(player2))
sort.Sort(cards(player3))
log.Println(player1)
log.Println(player2)
log.Println(player3)
log.Println(slice)
log.Println(len(player1), len(player2), len(player3), len(slice))
}
type card struct {
Icon string
Numb string
// IconIdx int
// NumbIdx int
Score int
}
type cards []card
func (c cards) Len() int {
return len(c)
}
func (c cards) Swap(i, j int) {
c[i], c[j] = c[j], c[i]
}
func (c cards) Less(i, j int) bool {
return c[i].Score < c[j].Score
}
func createCardGroup() []card {
ico := []string{"方块", "梅花", "红心", "黑桃"}
num := []string{"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"}
slice := []card{}
for numIdx, numb := range num {
// slice = append(slice, ico[0]+v, ico[1]+v, ico[2]+v, ico[3]+v)
for icoIdx, icon := range ico {
length := len(slice)
preScoreMax := 0
if length > 0 {
preScoreMax = slice[length-1].Score
}
score := (numIdx+1)*(icoIdx+1) + preScoreMax
c := card{
Icon: icon,
Numb: numb,
// IconIdx: icoIdx,
// NumbIdx: numIdx,
Score: score,
}
slice = append(slice, c)
}
}
slice = append(slice, card{Icon: "小王", Numb: "1", Score: slice[len(slice)-1].Score + (14 * 1)})
slice = append(slice, card{Icon: "大王", Numb: "2", Score: slice[len(slice)-1].Score + (14 * 2)})
return slice
}
func washCard(slice interface{}) {
//切片乱序
rv := reflect.ValueOf(slice)
if rv.Type().Kind() != reflect.Slice {
return
}
length := rv.Len()
if length < 2 {
return
}
swap := reflect.Swapper(slice)
// rand.Seed(time.Now().Unix())
for i := length - 1; i >= 0; i-- {
j := rand.Intn(length)
swap(i, j)
}
}