2021-12-21 23:22:04 +00:00
|
|
|
package shared
|
|
|
|
|
|
|
|
type GameBoard struct {
|
|
|
|
Start *GamePosition
|
|
|
|
}
|
|
|
|
|
|
|
|
type GamePosition struct {
|
|
|
|
Position int
|
|
|
|
Next *GamePosition
|
|
|
|
}
|
|
|
|
|
|
|
|
type Player struct {
|
|
|
|
PlayerNum int
|
|
|
|
Score int
|
|
|
|
Position *GamePosition
|
|
|
|
}
|
2021-12-22 01:02:12 +00:00
|
|
|
|
|
|
|
type Universe struct {
|
|
|
|
Players map[int]*Player
|
|
|
|
}
|
|
|
|
|
|
|
|
type QueueItem struct {
|
|
|
|
Universe *Universe
|
|
|
|
Next *QueueItem
|
|
|
|
}
|
|
|
|
|
|
|
|
type UniverseQueue struct {
|
|
|
|
Head *QueueItem
|
|
|
|
Tail *QueueItem
|
|
|
|
}
|
|
|
|
|
|
|
|
func (q *UniverseQueue) Pop() (universe *Universe) {
|
|
|
|
universe = nil
|
|
|
|
if q.Head != nil {
|
|
|
|
universe = q.Head.Universe
|
|
|
|
q.Head = q.Head.Next
|
|
|
|
if q.Head == nil {
|
|
|
|
q.Tail = nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func (q *UniverseQueue) Add(universe *Universe) {
|
|
|
|
newUniverse := new(QueueItem)
|
|
|
|
newUniverse.Universe = universe
|
|
|
|
|
|
|
|
if q.Tail != nil {
|
|
|
|
q.Tail.Next = newUniverse
|
|
|
|
} else {
|
|
|
|
q.Head = newUniverse
|
|
|
|
}
|
|
|
|
|
|
|
|
q.Tail = newUniverse
|
|
|
|
}
|