Last active
February 6, 2026 07:27
-
-
Save gkucmierz/8134f76fe134332605b74a0f652e0bab to your computer and use it in GitHub Desktop.
maze-creatated-with-llm.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* -------------------------------------------------------------- | |
| Labirynt 200x250 pól (200 na szerokość, 250 na wysokość) | |
| Otwarcie: górna krawędź po prawej → wejście | |
| dolna krawędź po lewej → wyjście | |
| Unikalny szlak od wejścia do wyjścia → perfekcyjny labirynt | |
| -------------------------------------------------------------- */ | |
| const labW = 50; // szerokość (liczba pól) | |
| const labH = 40; // wysokość (liczba pól) | |
| function createMaze(width, height) { | |
| const W = width * 2 + 1; // długość kolumny w znakach (ściany + pola) | |
| const H = height * 2 + 1; // liczba wierszy w znakach | |
| /* 1. Siatka wypełniona „#” – ściany */ | |
| const maze = Array.from({ length: H }, () => Array(W).fill('#')); | |
| /* 2. Puste pola (współrzędne nieparzyste) */ | |
| for (let y = 0; y < height; y++) { | |
| for (let x = 0; x < width; x++) { | |
| maze[y * 2 + 1][x * 2 + 1] = ' '; | |
| } | |
| } | |
| /* 3. Otwarcie brzegów (wejście / wyjście) */ | |
| const startX = width - 1; // wejście na górnej krawędzi po prawej | |
| const endX = 0; // wyjście na dolnej krawędzi po lewej | |
| maze[0][startX * 2 + 1] = ' '; // górna krawędź po prawej | |
| maze[H - 1][endX * 2 + 1] = ' '; // dolna krawędź po lewej | |
| /* 4. DFS – backtracking (perfekcyjny labirynt) */ | |
| const visited = Array.from({ length: height }, () => Array(width).fill(false)); | |
| const stack = [[startX, 0]]; // start od wejścia | |
| visited[0][startX] = true; | |
| const dirs = [ | |
| [ 0, -1], // góra | |
| [ 1, 0], // prawo | |
| [ 0, 1], // dół | |
| [-1, 0] // lewo | |
| ]; | |
| while (stack.length) { | |
| const [x, y] = stack[stack.length - 1]; | |
| const candidates = []; | |
| // znajdź wszystkich nieodwiedzonych sąsiadów | |
| for (const [dx, dy] of dirs) { | |
| const nx = x + dx, ny = y + dy; | |
| if (nx >= 0 && nx < width && ny >= 0 && ny < height && !visited[ny][nx]) { | |
| candidates.push([nx, ny, dx, dy]); | |
| } | |
| } | |
| if (!candidates.length) { // brak sąsiadów – cofamy się | |
| stack.pop(); | |
| } else { // wybierz losowego sąsiada i idź dalej | |
| const [nx, ny, dx, dy] = candidates[Math.floor(Math.random() * candidates.length)]; | |
| maze[y * 2 + 1 + dy][x * 2 + 1 + dx] = ' '; // otwarcie ściany | |
| visited[ny][nx] = true; | |
| stack.push([nx, ny]); | |
| } | |
| } | |
| /* 5. Wypisanie do konsoli */ | |
| for (let i = 0; i < H; i++) { | |
| console.log(maze[i].join('')); | |
| } | |
| } | |
| /* -------------------------------------------------------------- */ | |
| createMaze(labW, labH); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment