snake personality...

This commit is contained in:
2025-10-16 13:39:35 +01:00
parent f37605d8d2
commit cbb8cce833
3 changed files with 41 additions and 10 deletions
+27 -5
View File
@@ -36,14 +36,36 @@
Snake Rendering
========================================================= */
.snake-cell.snake-head {
background-color: var(--primary, #82aaff);
border-radius: 30%;
box-shadow: 0 0 8px color-mix(in srgb, var(--primary, #82aaff) 70%, transparent);
background-color: var(--accent, #ffc777);
border-radius: 6px 6px 2px 2px;
box-shadow:
0 0 8px color-mix(in srgb, var(--accent, #ffc777) 70%, transparent),
inset 0 0 4px color-mix(in srgb, var(--accent, #ffc777) 90%, transparent);
position: relative;
}
.snake-cell.snake-head::after {
content: "";
position: absolute;
top: 25%;
left: 50%;
transform: translateX(-50%);
width: 60%;
height: 30%;
background: radial-gradient(circle, var(--accent-foreground, #1b1d2b) 30%, transparent 60%);
opacity: 0.8;
}
.snake-cell.snake-body {
background-color: var(--primary, #82aaff);
background-color: var(--accent, #ffc777);
opacity: 0.7;
box-shadow: inset 0 0 3px color-mix(in srgb, var(--primary, #82aaff) 50%, transparent);
box-shadow: inset 0 0 3px color-mix(in srgb, var(--accent, #ffc777) 50%, transparent);
}
.snake-cell.snake-tail {
background-color: var(--accent, #ffc777);
opacity: 0.5;
border-radius: 2px 2px 6px 6px;
box-shadow: 0 0 4px color-mix(in srgb, var(--accent, #ffc777) 40%, transparent);
}
+2 -2
View File
@@ -30,8 +30,8 @@ export function useGameStatus(
clearSnake();
setGameStatus("waiting");
const container = containerRef.current;
container?.querySelectorAll(".snake-head, .snake-body").forEach((el) => {
el.classList.remove("snake-head", "snake-body");
container?.querySelectorAll(".snake-head, .snake-body, .snake-tail").forEach((el) => {
el.classList.remove("snake-head", "snake-body", "snake-tail");
});
};
+12 -3
View File
@@ -21,6 +21,9 @@ export function useSnake(
{ r: centerR, c: centerC },
{ r: centerR + 1, c: centerC },
{ r: centerR + 2, c: centerC },
{ r: centerR + 3, c: centerC },
{ r: centerR + 4, c: centerC },
{ r: centerR + 5, c: centerC },
];
setSnakeBody(initialBody);
@@ -41,8 +44,8 @@ export function useSnake(
const container = containerRef.current;
if (!container) return;
container.querySelectorAll(".snake-head, .snake-body").forEach((el) => {
el.classList.remove("snake-head", "snake-body");
container.querySelectorAll(".snake-head, .snake-body, .snake-tail").forEach((el) => {
el.classList.remove("snake-head", "snake-body", "snake-tail");
});
body.forEach((segment, idx) => {
@@ -50,7 +53,13 @@ export function useSnake(
`.snake-cell[data-r="${segment.r}"][data-c="${segment.c}"]`
);
if (cell) {
cell.classList.add(idx === 0 ? "snake-head" : "snake-body");
if (idx === 0) {
cell.classList.add("snake-head");
} else if (idx === body.length - 1) {
cell.classList.add("snake-tail");
} else {
cell.classList.add("snake-body");
}
}
});
};