Aquí tienes una selección de mis proyectos open source. Todo el código está publicado en GitHub — échale un vistazo, clónalo o ábrelo como inspiración.

Minecraft Plugins

Tres plugins para servidor Paper 1.21: un lobby central, un laberinto roguelike cooperativo (MazeRunner) y un SkyBlock con economía (SkyIslands).

  • Java 21
  • Paper 1.21
  • Gradle
  • SQLite

Only Games

Colección de minijuegos arcade jugables en el navegador (Snake, Laberinto, Tanques) con multijugador local hasta 4 jugadores.

  • Next.js 16
  • React 19
  • TypeScript
  • Tailwind

Un vistazo al código

Curiosamente, los dos proyectos comparten el mismo algoritmo de generación de laberintos —recursive backtracking— pero en lenguajes distintos. Mismo concepto, dos mundos:

Only Games — laberinto en TypeScript

ts
// Recursive backtracking: tallamos un laberinto perfecto
function carvePassage(maze: Maze, x: number, y: number, visited: boolean[][]) {
  visited[y][x] = true;
  for (const dir of shuffleArray(DIRECTIONS)) {
    const nx = x + DX[dir];
    const ny = y + DY[dir];
    if (isValidCell(nx, ny, width, height) && !visited[ny][nx]) {
      maze[y][x].walls[dir] = false;
      maze[ny][nx].walls[OPPOSITE[dir]] = false;
      carvePassage(maze, nx, ny, visited);
    }
  }
}

MazeRunner — laberinto en Java

java
// Recursive backtracking (DFS iterativo para no desbordar la pila)
public MazeGrid generate(int width, int height) {
    MazeGrid grid = new MazeGrid(width, height);
    boolean[][] visited = new boolean[width][height];
    Deque<int[]> stack = new ArrayDeque<>();
    stack.push(new int[]{0, 0});
    visited[0][0] = true;

    while (!stack.isEmpty()) {
        int[] cur = stack.peek();
        List<int[]> neighbors = unvisitedNeighbors(cur, visited);
        if (neighbors.isEmpty()) {
            stack.pop();
        } else {
            int[] next = neighbors.get(random.nextInt(neighbors.size()));
            grid.openWall(cur[0], cur[1], next[0], next[1]);
            visited[next[0]][next[1]] = true;
            stack.push(next);
        }
    }
    return grid;
}

¿Quieres ver más? Todo mi código abierto está en mi perfil de GitHub.