Add Connect 4 multiplayer game server

Real-time two-player Connect 4 using Via framework with:
- Game creation and invite links
- SSE-based live updates for both players
- Win detection with animated highlighting
- Session-based nickname persistence
This commit is contained in:
Ryan Hamamura
2026-01-14 12:57:57 -10:00
commit 389fc12bf2
10 changed files with 947 additions and 0 deletions

41
game/types.go Normal file
View File

@@ -0,0 +1,41 @@
package game
import "time"
type PlayerID string
type Player struct {
ID PlayerID
Nickname string
Color int // 1 = Red, 2 = Yellow
}
type GameStatus int
const (
StatusWaitingForPlayer GameStatus = 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 GameStatus
Winner *Player
WinningCells [][2]int // Coordinates of winning 4 cells for highlighting
CreatedAt time.Time
}
func NewGame(id string) *Game {
return &Game{
ID: id,
Board: [6][7]int{},
CurrentTurn: 1, // Red goes first
Status: StatusWaitingForPlayer,
CreatedAt: time.Now(),
}
}