Add solo mode where players survive as long as possible while tracking score (food eaten). Single player games start with a shorter 3-second countdown vs 10 seconds for multiplayer, maintain exactly 1 food item for classic snake feel, and end when the player dies rather than when one player remains. - Add GameMode type (ModeMultiplayer/ModeSinglePlayer) and Score field - Filter single player games from "Join a Game" lobby list - Show "Ready?" and "Score: X" UI for single player mode - Hide invite link for single player games - Preserve game mode on rematch
38 lines
1.2 KiB
SQL
38 lines
1.2 KiB
SQL
-- name: CreateSnakeGame :one
|
|
INSERT INTO games (id, board, current_turn, status, game_type, grid_width, grid_height, max_players, game_mode)
|
|
VALUES (?, ?, 0, ?, 'snake', ?, ?, 8, ?)
|
|
RETURNING *;
|
|
|
|
-- name: GetSnakeGame :one
|
|
SELECT * FROM games WHERE id = ? AND game_type = 'snake';
|
|
|
|
-- name: UpdateSnakeGame :exec
|
|
UPDATE games
|
|
SET board = ?, status = ?, winner_user_id = ?, rematch_game_id = ?, score = ?, updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = ? AND game_type = 'snake';
|
|
|
|
-- name: DeleteSnakeGame :exec
|
|
DELETE FROM games WHERE id = ? AND game_type = 'snake';
|
|
|
|
-- name: GetActiveSnakeGames :many
|
|
SELECT * FROM games WHERE game_type = 'snake' AND status < 2 AND game_mode = 0;
|
|
|
|
-- name: CreateSnakePlayer :exec
|
|
INSERT INTO game_players (game_id, user_id, guest_player_id, nickname, color, slot)
|
|
VALUES (?, ?, ?, ?, ?, ?);
|
|
|
|
-- name: GetSnakePlayers :many
|
|
SELECT * FROM game_players WHERE game_id = ? ORDER BY slot;
|
|
|
|
-- name: GetUserActiveSnakeGames :many
|
|
SELECT
|
|
g.id,
|
|
g.status,
|
|
g.grid_width,
|
|
g.grid_height,
|
|
g.updated_at
|
|
FROM games g
|
|
JOIN game_players gp_user ON g.id = gp_user.game_id AND gp_user.user_id = ?
|
|
WHERE g.game_type = 'snake' AND g.status < 3
|
|
ORDER BY g.updated_at DESC;
|