Pounce Online

This is a project to simulate the game Nertz / Pounce. It includes some online multiplayer logic to allow for competitive play with friends, as well as some Bots for local or online practice. There is also a "Simulation Mode" to rapidly simulate Bots playing against each other to analyze various strategies.

Planned todos:

Infra

  • Find a way to deploy nextjs+socketio (github pages?)
  • Consider how to make serverless work (assuming one pod for now still, maybe spins down if no sockets)
  • Separate homepage from rooms/<roomcode> page

User Play / Interface

  • Fix touch dragging on mobile (iphone)

  • Add compact mobile version

  • Allow two-clicks to drag (nice for long-distance moves where dragging trackpad that far gets cumbersome)

  • Deal hands before starting to allow prep (maybe fixed 5 seconds from deal to start, removed in automation mode)

  • Draw area around each players section maybe (shaded gray box? ensure player1 lies over player2)

  • Maybe flip all the cards over and simulate tallying them up (fly them all into a pile, count up to their score?)

  • Add sound effects for card movements (volume cycles < solitaire < field)

  • Improve HandsLayer performance? Maybe not super important

  • Perhaps rework code system to be more secure (lobbylist + passwords?)

  • Add toggle for "fair decks" mode (i.e. queueing up repeat decks)

  • Add "copy join link" to Room section

  • Consider moving from sockets to p2p (https://socket.io/blog/socket-io-p2p/), removing the need for socket server (only static content basically). Could consider changing billing mode in this case. This would also allow offline play potentially with app support.

Bots/Simulation

  • Update the computer cost function to somehow include how much it takes to think about something (instead of pre-emptively incurring a fixed cost after every move, trigger some cost depending on the move [ex. back-to-back on the same pile is easy, or changing which pile you're going to play a certain card on is easy, but switching move entirely is a lot harder])

  • Update reaction logic. Delaying the entire board a fixed amount isnt great. Any moves they play should appear instantly (this solves their weakeness on back-to-back moves), as well as a limited set of "subscribed" piles? (their own hand / solitaire pile, and some they care about)

  • Maybe update pile locations after a human sends an Ace out to avoid that Ace?

  • Add strategy to pre-emptively "play" a card that doesnt play (ex. after 4H gets played in the center, pre-play 6H; maybe only if you see 5H in someones hand, or saw the 4H coming in someones hand too )

  • Add competition-priority boost (note: requires reworking moves from a fixed ordering to weighted ordering). If someone else has a card you want to play to the center, prioritize playing that over other moves (ex. P=5H Solitaire=7C 8H _ KH; we could move the pounce card out, or play a solitaire move to merge 7C into 8H, but we really should just play KH on the board if it can play since the other moves arent "competitive" )

  • Fix reactions not updating when failing a play (Should learn about that pile ideally). May need to track board per AI

Random

  • Fix spectating mode (have "opted-in" spectate mode, which doesnt automatically disable when a new round starts, but can be manually left. This would also be used for Simulation Mode)
  • Fix bug with closing page not disconnecting (Doesnt happen locally, but in prod, may need to fix logging and debug)