refactor: rename game package to connect4, drop Game prefix from types
Rename game/ -> connect4/ to avoid c4/game stutter. Drop redundant
Game prefix from exported types (GameStore -> Store, GameInstance ->
Instance, GameStatus -> Status). Rename NATS subjects from game.{id}
to connect4.{id}. URL routes unchanged.
This commit is contained in:
71
connect4/types.go
Normal file
71
connect4/types.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package connect4
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/ryanhamamura/c4/player"
|
||||
)
|
||||
|
||||
type Player struct {
|
||||
ID player.ID
|
||||
UserID *string // UUID for authenticated users, nil for guests
|
||||
Nickname string
|
||||
Color int // 1 = Red, 2 = Yellow
|
||||
}
|
||||
|
||||
type Status int
|
||||
|
||||
const (
|
||||
StatusWaitingForPlayer Status = iota
|
||||
StatusInProgress
|
||||
StatusWon
|
||||
StatusDraw
|
||||
)
|
||||
|
||||
type Game struct {
|
||||
ID string
|
||||
Board [6][7]int // 6 rows, 7 columns; 0=empty, 1=red, 2=yellow
|
||||
Players [2]*Player // Index 0 = creator (Red), Index 1 = joiner (Yellow)
|
||||
CurrentTurn int // 1 or 2 (matches player color)
|
||||
Status Status
|
||||
Winner *Player
|
||||
WinningCells [][2]int // Coordinates of winning 4 cells for highlighting
|
||||
RematchGameID *string // ID of the rematch game, if one was created
|
||||
}
|
||||
|
||||
func NewGame(id string) *Game {
|
||||
return &Game{
|
||||
ID: id,
|
||||
Board: [6][7]int{},
|
||||
CurrentTurn: 1, // Red goes first
|
||||
Status: StatusWaitingForPlayer,
|
||||
}
|
||||
}
|
||||
|
||||
func (g *Game) IsFinished() bool {
|
||||
return g.Status == StatusWon || g.Status == StatusDraw
|
||||
}
|
||||
|
||||
func (g *Game) BoardToJSON() string {
|
||||
data, _ := json.Marshal(g.Board)
|
||||
return string(data)
|
||||
}
|
||||
|
||||
func (g *Game) BoardFromJSON(data string) error {
|
||||
return json.Unmarshal([]byte(data), &g.Board)
|
||||
}
|
||||
|
||||
func (g *Game) WinningCellsToJSON() string {
|
||||
if g.WinningCells == nil {
|
||||
return ""
|
||||
}
|
||||
data, _ := json.Marshal(g.WinningCells)
|
||||
return string(data)
|
||||
}
|
||||
|
||||
func (g *Game) WinningCellsFromJSON(data string) error {
|
||||
if data == "" {
|
||||
return nil
|
||||
}
|
||||
return json.Unmarshal([]byte(data), &g.WinningCells)
|
||||
}
|
||||
Reference in New Issue
Block a user