Files
games/connect4/types.go
Ryan Hamamura c6885a069b
All checks were successful
CI / Deploy / test (pull_request) Successful in 14s
CI / Deploy / lint (pull_request) Successful in 25s
CI / Deploy / deploy (pull_request) Has been skipped
refactor: rename Go module from c4 to games
Rename module path github.com/ryanhamamura/c4 to
github.com/ryanhamamura/games across go.mod, all source files,
and golangci config.
2026-03-02 20:41:20 -10:00

72 lines
1.5 KiB
Go

package connect4
import (
"encoding/json"
"github.com/ryanhamamura/games/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)
}