package game import ( "context" "encoding/json" "github.com/heroiclabs/nakama-common/runtime" ) type MovePayload struct { Data map[string]interface{} `json:"data"` // arbitrary structure per game } // GameRules defines game-specific mechanics. // You implement this for TicTacToe, Chess, etc. type GameRules interface { MaxPlayers() int // ApplyMove modifies state, returns (stateChanged, gameOver, winnerIndex) ApplyMove(state *MatchState, playerIdx int, payload MovePayload) (bool, bool, int) // Called when match starts and players are set. AssignPlayerSymbols(players []*Player) // Called when match ends via forfeit. ForfeitWinner(state *MatchState, leaverIndex int) int }