]> Skullheadx's Git Forge - monopoly-web.git/commitdiff
switch to pop queue
authorSkullheadx <admonty1@protonmail.com>
Mon, 8 Jun 2026 22:31:00 +0000 (18:31 -0400)
committerSkullheadx <admonty1@protonmail.com>
Mon, 8 Jun 2026 22:35:04 +0000 (18:35 -0400)
game/chance.go
game/chest.go
game/color.go
game/movement.go
game/railroad.go
game/tax.go
game/types.go
game/unowned.go
game/utility.go

index b6b05734f55d3cb566c61b0dc8579fa0fd1676ad..13034755315cf205339a73a188fc895a85c9f581 100644 (file)
@@ -10,7 +10,12 @@ func (ctx *Context) getOwnerID(sID SpaceID) PlayerID {
 }
 
 func (ctx *Context) ProcessChance() {
-       for _, visitorID := range ctx.Visitors.Chance {
+       for {
+               visitorID, done := QueuePop(&ctx.Visitors.Chance)
+               if done {
+                       break
+               }
+
                card := ctx.Random.IntN(len(ChanceCards))
 
                currentPos := ctx.Players.Alive[visitorID.Index()].CurrentSpaceID
index 3c141ee8fab69dd78b0052855b6e0795ea3dec95..9a31622d93695f41b12ab15f3b1ee0c0aa197f8b 100644 (file)
@@ -1,7 +1,11 @@
 package game
 
 func (ctx *Context) ProcessChest() {
-       for _, visitorID := range ctx.Visitors.Chest {
+       for {
+               visitorID, done := QueuePop(&ctx.Visitors.Chest)
+               if done {
+                       break
+               }
                card := ctx.Random.IntN(len(ChanceCards))
 
                currentPos := ctx.Players.Alive[visitorID.Index()].CurrentSpaceID
index a2eaa5cd8add552a10f0da7bf13f62ced5bcc883..e1826c9a26a7ce0a6f51cd64d1f39b8c1533aedb 100644 (file)
@@ -30,7 +30,12 @@ func (ctx *Context) HasColorMonopoly(playerID PlayerID, targetGroup ColorGroup)
 }
 
 func (ctx *Context) ProcessOwnedColors() {
-       for _, oCV := range ctx.Visitors.Color {
+       for {
+               oCV, done := QueuePop(&ctx.Visitors.Color)
+               if done {
+                       break
+               }
+
                visitorID := oCV.VisitorID
                ownerID := oCV.OwnerID
                colorID := oCV.ColorID
index 1b47ca455f9373a0f09fe7b812da3e79558a9e6a..98190097f894cd5f795097cba193ae91ee633152 100644 (file)
@@ -10,11 +10,16 @@ func GetPlayerMoveDistance(start SpaceID, dest SpaceID) int32 {
 
 func (ctx *Context) ProcessMovement() {
        cID := ctx.Turn.Current
-       dist := ctx.Turn.MoveQueue[0]
-       ctx.Turn.MoveQueue = ctx.Turn.MoveQueue[1:]
-       ctx.AdvancePlayer(cID, ctx.Players.Alive[cID.Index()].CurrentSpaceID, dist)
+       for {
+               dist := ctx.Turn.MoveQueue[0]
+               ctx.Turn.MoveQueue = ctx.Turn.MoveQueue[1:]
+               ctx.AdvancePlayer(cID, ctx.Players.Alive[cID.Index()].CurrentSpaceID, dist)
+               ctx.ProcessLanding()
+               if len(ctx.Turn.MoveQueue) == 0 {
+                       break
+               }
 
-       ctx.ProcessLanding()
+       }
 
 }
 
index f3ba9f0952930df06a086d84230c60aefcfa6c74..fc1c99b0cd48da70efaf845122d4bed345dce253 100644 (file)
@@ -25,7 +25,11 @@ func (ctx *Context) numRailroadOwned(playerID PlayerID) int32 {
 }
 
 func (ctx *Context) ProcessOwnedRailroad() {
-       for _, oRV := range ctx.Visitors.Railroad {
+       for {
+               oRV, done := QueuePop(&ctx.Visitors.Railroad)
+               if done {
+                       break
+               }
                visitorID := oRV.VisitorID
                ownerID := oRV.OwnerID
                // railroadID := oRV.railroadID
index 6ab8b4d4c8d900805abeb0c0fbf03dc397c5ec7b..a6ad530b3283a6c8c9c58d5ef83ac045d8337149 100644 (file)
@@ -1,7 +1,11 @@
 package game
 
 func (ctx *Context) ProcessTax() {
-       for _, tV := range ctx.Visitors.Tax {
+       for {
+               tV, done := QueuePop(&ctx.Visitors.Tax)
+               if done {
+                       break
+               }
                playerID := tV.VisitorID
                taxID := tV.TaxID
                ctx.AdjustPlayerMoney(playerID, -TaxSpaces[taxID].Amount)
index 1e589dd9d48776a20e13474481cb31a62c431836..e0c5b6d7bf7af56ab91d5d7c5e8958b80c10f362 100644 (file)
@@ -25,6 +25,20 @@ func (ctx *Context) EventPop() EventType {
        return last
 }
 
+// first, done
+func QueuePop[T any](q *[]T) (T, bool) {
+       if len(*q) == 0 {
+               var zero T
+               return zero, true
+       }
+
+       lastIdx := len(*q) - 1
+
+       first := (*q)[lastIdx]
+       *q = (*q)[:lastIdx]
+       return first, false
+}
+
 type Space struct {
        PropertyType PropertyType
        SubIndexID   int32 // FK to resp. OwnableProperty types
index c42ca867642e57ceb3b9722d531e78f4c11c429c..3c0b43a0d028ecb40c4851ed6b4cf02eb6c3b358 100644 (file)
@@ -1,29 +1,11 @@
 package game
 
 func (ctx *Context) ProcessUnowned() {
-       // for _, uV := range ctx.Visitors.Unowned {
-       // visitorID := uV.visitorID
-       // propID := uV.propertyID
-
-       // prop := ctx.Properties.Owners[propID.Index()]
-
-       // TODO: trigger buy or auction
-
-       // spaceID := prop.SpaceID
-       // space := BoardSpaces[spaceID.Index()]
-       //
-       // var price int32 = 0
-       //
-       // switch space.PropertyType {
-       // case TypeColor:
-       //      price = ColorProperties[space.SubIndexID].Price
-       // case TypeUtility:
-       //      price = UtilityPrice
-       // case TypeRailroad:
-       //      price = RailroadPrice
-       // }
-       //
-       // ctx.AdjustPlayerMoney(visitorID, -price)
-
-       // }
+       for {
+               _, done := QueuePop(&ctx.Visitors.Unowned)
+               if done {
+                       break
+               }
+               ctx.Turn.EventStack = append(ctx.Turn.EventStack, EventLandUnowned)
+       }
 }
index 14255c72b21b2d602a982e8efe364c3394927972..301e793817f21c16cae2048f34ef7b683f4fe4c6 100644 (file)
@@ -25,7 +25,11 @@ func (ctx *Context) NumUtilities(playerID PlayerID) int32 {
 }
 
 func (ctx *Context) ProcessOwnedUtility() {
-       for _, oUV := range ctx.Visitors.Utility {
+       for {
+               oUV, done := QueuePop(&ctx.Visitors.Utility)
+               if done {
+                       break
+               }
                visitorID := oUV.VisitorID
                ownerID := oUV.OwnerID
                // utilityID := oUV.utilityID