Initial commit: labirynt 3D pseudo-raycasting game

This commit is contained in:
lukasz@orzechowski.eu
2026-02-07 10:20:50 +01:00
commit a7f14c010f
132 changed files with 5319 additions and 0 deletions

45
lib/maze.dart Normal file
View File

@@ -0,0 +1,45 @@
class Maze {
final int width;
final int height;
late List<List<int>> grid;
Maze(this.width, this.height) {
grid = List.generate(height, (y) => List.generate(width, (x) => 1));
_generate();
}
void _generate() {
_carve(1, 1);
// Ensure start and end are open
grid[1][1] = 0;
grid[height - 2][width - 2] = 0;
}
void _carve(int x, int y) {
grid[y][x] = 0;
final dirs = [
[0, -2],
[0, 2],
[-2, 0],
[2, 0],
]..shuffle();
for (final d in dirs) {
final nx = x + d[0];
final ny = y + d[1];
if (ny > 0 && ny < height - 1 && nx > 0 && nx < width - 1 && grid[ny][nx] == 1) {
grid[y + d[1] ~/ 2][x + d[0] ~/ 2] = 0;
_carve(nx, ny);
}
}
}
bool isWall(int x, int y) {
if (x < 0 || x >= width || y < 0 || y >= height) return true;
return grid[y][x] == 1;
}
bool isGoal(double x, double y) {
return (x - (width - 2)).abs() < 0.5 && (y - (height - 2)).abs() < 0.5;
}
}