# I Built Pac-Man in ~150 Lines of Vanilla JavaScript

> Source: <https://dev.to/dev48v/i-built-pac-man-in-150-lines-of-vanilla-javascript-39a0>
> Published: 2026-06-20 06:54:35+00:00

Pac-Man looks like it needs serious AI and a physics engine. It needs neither — a maze stored as **text**, grid movement, and ghosts that just step toward you. About 150 lines of vanilla JavaScript.

🟡 **Play it:** [https://dev48v.infy.uk/game/day11-pacman.html](https://dev48v.infy.uk/game/day11-pacman.html)

``` js
const MAZE = ["#####","#...#","#.#.#"];  // # = wall, . = pellet
```

Everything — movement, collision, pellets, ghost moves — is a lookup into this grid. The whole level is data you can edit by typing.

```
if (MAZE[pac.y+dy][pac.x+dx] !== "#") { pac.x += dx; pac.y += dy; }
```

That one check IS your collision system. No pixel math.

Store a *wanted* direction separately; switch to it when that way opens. That tiny buffer is the difference between responsive and stiff controls.

```
if (grid[y][x] === ".") { grid[y][x] = " "; score += 10; pellets--; }
```

When `pellets`

hits 0, the maze is cleared.

From a ghost's legal moves, pick the one closest to Pac-Man (plus a little randomness so you can escape). Greedy distance-minimising is surprisingly menacing.

A text maze + grid steps + greedy ghosts = the whole arcade icon. [Play it](https://dev48v.infy.uk/game/day11-pacman.html) — the "Understand" tab walks each step.
