feat: add foodsPerLevel to GameOptions with default of 10
- New option: foodsPerLevel (defaults to 10)
- Controls how many foods must be eaten to level up
- Example: useGame({ foodsPerLevel: 5 })
This commit is contained in:
@@ -33,6 +33,7 @@ export type GameOptions = {
|
|||||||
rows?: number;
|
rows?: number;
|
||||||
timeLimit?: number;
|
timeLimit?: number;
|
||||||
startingLevel?: number;
|
startingLevel?: number;
|
||||||
|
foodsPerLevel?: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { useKeyBindings, type UseKeyBindingsType } from "./useKeyBindings";
|
|||||||
import { useScore } from "../useScore";
|
import { useScore } from "../useScore";
|
||||||
|
|
||||||
export function useGame(options?: GameOptions, platformHook?: unknown): GameManager {
|
export function useGame(options?: GameOptions, platformHook?: unknown): GameManager {
|
||||||
const { cols = 30, rows = 20, startingLevel } = options ?? {};
|
const { cols = 30, rows = 20, startingLevel, foodsPerLevel } = options ?? {};
|
||||||
|
|
||||||
const boardManager = useBoard();
|
const boardManager = useBoard();
|
||||||
const { containerRef, renderBoard } = boardManager;
|
const { containerRef, renderBoard } = boardManager;
|
||||||
@@ -18,7 +18,7 @@ export function useGame(options?: GameOptions, platformHook?: unknown): GameMana
|
|||||||
|
|
||||||
const foodManager = useFood(cols, rows, boardManager);
|
const foodManager = useFood(cols, rows, boardManager);
|
||||||
|
|
||||||
const gameManager = useGameStatus(boardManager, snakeManager, foodManager, { startingLevel });
|
const gameManager = useGameStatus(boardManager, snakeManager, foodManager, { startingLevel, foodsPerLevel });
|
||||||
const { gameStatus, setGameStatus, startGame, quitGame, togglePause, score, level } = gameManager;
|
const { gameStatus, setGameStatus, startGame, quitGame, togglePause, score, level } = gameManager;
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@@ -4,10 +4,9 @@ import type { UseBoardType } from "../useBoard";
|
|||||||
import type { UseCursorType } from "../useCursor";
|
import type { UseCursorType } from "../useCursor";
|
||||||
import type { UseFoodType } from "../useGame/useFood";
|
import type { UseFoodType } from "../useGame/useFood";
|
||||||
|
|
||||||
const FOODS_PER_LEVEL = 2;
|
|
||||||
|
|
||||||
export type UseGameStatusParams = {
|
export type UseGameStatusParams = {
|
||||||
startingLevel?: number;
|
startingLevel?: number;
|
||||||
|
foodsPerLevel?: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
export function useGameStatus(
|
export function useGameStatus(
|
||||||
@@ -17,6 +16,7 @@ export function useGameStatus(
|
|||||||
params?: UseGameStatusParams
|
params?: UseGameStatusParams
|
||||||
) {
|
) {
|
||||||
const startingLevel = params?.startingLevel ?? 1;
|
const startingLevel = params?.startingLevel ?? 1;
|
||||||
|
const foodsPerLevel = params?.foodsPerLevel ?? 10;
|
||||||
const { containerRef } = boardManager;
|
const { containerRef } = boardManager;
|
||||||
const { initSnake, clearSnake, snakeBodyRef } = snakeManager;
|
const { initSnake, clearSnake, snakeBodyRef } = snakeManager;
|
||||||
const { spawnFood, clearFood } = foodManager;
|
const { spawnFood, clearFood } = foodManager;
|
||||||
@@ -91,7 +91,7 @@ export function useGameStatus(
|
|||||||
shouldGrow = true;
|
shouldGrow = true;
|
||||||
|
|
||||||
// Check BEFORE incrementing if we're about to level up
|
// Check BEFORE incrementing if we're about to level up
|
||||||
const willLevelUp = (foodsEatenRef.current + 1) >= FOODS_PER_LEVEL;
|
const willLevelUp = (foodsEatenRef.current + 1) >= foodsPerLevel;
|
||||||
|
|
||||||
foodsEatenRef.current += 1;
|
foodsEatenRef.current += 1;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user