game_sync/gamerule/smallrocket/smallrocket.go

138 lines
2.5 KiB
Go

package smallrocket
import "fmt"
type SequentialQueue struct {
Items []any // 队列元素
Length int32 // 队列元素个数
Cap int32 // 队列容量
}
// NewSequentialQueue 初始化队列
func NewSequentialQueue(cap int32) *SequentialQueue {
return &SequentialQueue{
Items: make([]any, 0, cap),
Length: 0,
Cap: cap,
}
}
// Clear 清空队列
func (queue *SequentialQueue) Clear() {
queue.Items = []any{}
}
// IsEmpty 判断队列是否为空
func (queue *SequentialQueue) IsEmpty() bool {
return queue.Length == 0
}
// IsFull 判断队列是否为满
func (queue *SequentialQueue) IsFull() bool {
return queue.Length == queue.Cap
}
// Push 将元素添加到该队列末尾
func (queue *SequentialQueue) Push(item any) {
if queue.IsFull() {
queue.Items = queue.Items[1:]
queue.Length--
}
queue.Items = append(queue.Items, item)
queue.Length++
}
// Pop 将该队列首元素弹出并返回
func (queue *SequentialQueue) Pop() any {
if queue.IsEmpty() {
fmt.Println("queue empty")
return nil
}
item := queue.Items[0]
queue.Items = queue.Items[1:]
queue.Length--
return item
}
// Peek 获取该队列首元素但不出队
func (queue *SequentialQueue) Peek() any {
if queue.IsEmpty() {
fmt.Println("queue empty")
return nil
}
return queue.Items[0]
}
// Back 获取该队列尾元素
func (queue *SequentialQueue) Back() any {
if queue.IsEmpty() {
fmt.Println("queue empty")
return nil
}
return queue.Items[queue.Length-1]
}
func (queue *SequentialQueue) GetItems() []any {
return queue.Items
}
func (q *SequentialQueue) GetFloat64Items() []float64 {
var retItems []float64
for i := q.Length - 1; i >= 0; i-- {
switch s := q.Items[i].(type) {
case float64:
retItems = append(retItems, s)
}
}
return retItems
}
func (q *SequentialQueue) GetFloat32Items() []float32 {
var retItems []float32
for i := q.Length - 1; i >= 0; i-- {
switch s := q.Items[i].(type) {
case float32:
retItems = append(retItems, s)
}
}
return retItems
}
func (q *SequentialQueue) ShowQueue() {
for i := q.Length - 1; i >= 0; i-- {
switch s := q.Items[i].(type) {
case float64:
//strconv.FormatFloat(s, 'f', -1, 64)
fmt.Printf(" queue[%d] = %f \t", i, s)
case float32:
fmt.Printf(" queue[%d] = %f \t", i, s)
default:
}
}
fmt.Println()
}
type BombTimeToMul struct {
MinBombTime int32
MaxBombTime int32
BombMul int32
}
type BombMulToTime struct {
MinBombMul int32
MaxBombMul int32
BombTime int32
}