diff --git a/app/play/[level]/page.tsx b/app/play/[level]/page.tsx
index cdb183f..2078ce4 100644
--- a/app/play/[level]/page.tsx
+++ b/app/play/[level]/page.tsx
@@ -11,6 +11,7 @@ import { ChevronLeftIcon } from "@radix-ui/react-icons";
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
import TestMode from "./test-mode";
import { useRouter } from "next/navigation";
+import { ZombieSurvival } from "@/simulators/zombie-survival";
export default function PlayLevelPage({
params,
@@ -119,7 +120,7 @@ export default function PlayLevelPage({
};
const runSimulation = () => {
- if (!playerMap.some((row) => row.includes("P"))) {
+ if (!ZombieSurvival.mapHasPlayer(playerMap)) {
alert(
"Please place a player (P) on the map before running the simulation.",
);
@@ -140,6 +141,11 @@ export default function PlayLevelPage({
}
};
+ const handleReset = () => {
+ setIsSimulating(false);
+ setGameResult(null);
+ };
+
const handleClearMap = () => {
setPlayerMap(map.grid.map((row) => [...row]));
setBlockCount(0);
@@ -195,6 +201,7 @@ export default function PlayLevelPage({
{gameResult && (
diff --git a/components/Visualizer.tsx b/components/Visualizer.tsx
index fc144a7..4f8bcef 100644
--- a/components/Visualizer.tsx
+++ b/components/Visualizer.tsx
@@ -13,6 +13,7 @@ export function Visualizer({
controls = true,
cellSize = "64",
map,
+ onReset,
onSimulationEnd,
}: {
autoReplay?: boolean;
@@ -20,6 +21,7 @@ export function Visualizer({
controls?: boolean;
cellSize?: string;
map: string[][];
+ onReset?: () => unknown;
onSimulationEnd?: (isWin: boolean) => unknown;
}) {
const visualizer = useVisualizer();
@@ -54,6 +56,7 @@ export function Visualizer({
function startSimulation() {
simulator.current = new ZombieSurvival(map);
+ renderer.current?.render(simulator.current.getAllAliveEntities());
setRunning(true);
interval.current = setInterval(() => {
@@ -63,11 +66,7 @@ export function Visualizer({
if (!simulator.current.finished()) {
simulator.current.step();
-
- if (renderer.current !== null) {
- renderer.current.render(simulator.current.getAllAliveEntities());
- }
-
+ renderer.current?.render(simulator.current.getAllAliveEntities());
return;
}
@@ -133,13 +132,7 @@ export function Visualizer({
-