# What retro games have been built with p5.js so far?

**URL:** <https://discourse.processing.org/t/what-retro-games-have-been-built-with-p5-js-so-far/48692>\
**Category:** Project Guidance\
**Created:** [May 28, 2026, 1:44pm UTC](https://discourse.processing.org/t/what-retro-games-have-been-built-with-p5-js-so-far/48692 "2026-05-28T13:44:32Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![prjctimg](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/prjctimg/32/21824_2.png) [@prjctimg](https://discourse.processing.org/u/prjctimg)\
**Post date:** [May 28, 2026, 1:44pm UTC](https://discourse.processing.org/t/what-retro-games-have-been-built-with-p5-js-so-far/48692/1 "2026-05-28T13:44:32Z")

</div>

Hey!

I have been looking at old school video games from the nostalgic SymbianOS days. Think of Bounce,Snake, Block Breaker or Pong.

A few articles I checked out are:

[All Symbian games from 1997 to 2022](https://www.mobygames.com/platform/symbian/)

For context I am looking to [use this here](https://github.com/prjctimg/learn-p5), I wanted to include a few that get unlocked as a user progresses through the exercises.

I would love to hear from anyone who may have worked on a game or anything similar using p5 or any addons.

---

<div class="post-metadata">

**Author:** ![jafal](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/jafal/32/19112_2.png) [@jafal](https://discourse.processing.org/u/jafal)\
**Post date:** [May 29, 2026, 2:41pm UTC](https://discourse.processing.org/t/what-retro-games-have-been-built-with-p5-js-so-far/48692/2 "2026-05-29T14:41:02Z")

</div>

Hi

> <https://gist.github.com/moritzebeling/1f8843102161ec53782e915689269bba>

With APDE

```auto
float ballX, ballY;
float ballSpeedX = 5;
float ballSpeedY = 3;
float ballSize = 20;

float paddleX;
float paddleY;
float paddleWidth = 150;
float paddleHeight = 25;

int score = 0;
boolean gameOver = false;

void setup() {
  fullScreen();
  orientation(PORTRAIT);
  rectMode(CENTER);
  resetGame();
}

void draw() {
  background(0); // Classic black background
  
  if (!gameOver) {
    updateGame();
    drawGame();
  } else {
    drawGameOver();
  }
}

void updateGame() {
  // Move ball
  ballX += ballSpeedX;
  ballY += ballSpeedY;
  
  // Wall collisions (Left and Right)
  if (ballX < ballSize/2 || ballX > width - ballSize/2) {
    ballSpeedX *= -1;
  }
  
  // Wall collision (Top)
  if (ballY < ballSize/2) {
    ballSpeedY *= -1;
  }
  
  // Paddle collision
  if (ballY + ballSize/2 >= paddleY - paddleHeight/2 && 
      ballY - ballSize/2 <= paddleY + paddleHeight/2) {
    if (ballX >= paddleX - paddleWidth/2 && ballX <= paddleX + paddleWidth/2) {
      ballSpeedY *= -1.05; // Slightly speed up
      ballSpeedX *= 1.05;
      ballY = paddleY - paddleHeight/2 - ballSize/2; // Prevent sticking
      score++;
    }
  }
  
  // Bottom wall collision (Game Over)
  if (ballY > height) {
    gameOver = true;
  }
  
  // Smooth touch controls for paddle
  if (mousePressed) {
    paddleX = lerp(paddleX, mouseX, 0.2);
  }
  // Keep paddle inside screen bounds
  paddleX = constrain(paddleX, paddleWidth/2, width - paddleWidth/2);
}

void drawGame() {
  // Draw Ball
  fill(255); // Classic white elements
  noStroke();
  ellipse(ballX, ballY, ballSize, ballSize);
  
  // Draw Paddle
  rect(paddleX, paddleY, paddleWidth, paddleHeight);
  
  // Draw Score
  textSize(60);
  textAlign(CENTER, TOP);
  text(score, width/2, 100);
}

void drawGameOver() {
  fill(255);
  textSize(80);
  textAlign(CENTER, CENTER);
  text("GAME OVER", width/2, height/2 - 50);
  
  textSize(40);
  text("Score: " + score, width/2, height/2 + 30);
  text("Tap screen to restart", width/2, height/2 + 100);
}

void mousePressed() {
  if (gameOver) {
    resetGame();
  }
}

void resetGame() {
  ballX = width / 2;
  ballY = height / 4;
  ballSpeedX = 5;
  ballSpeedY = 8;
  paddleX = width / 2;
  paddleY = height - 150; // Placed above the bottom edge for thumb comfort
  score = 0;
  gameOver = false;
}

```

---

<div class="post-metadata">

**Author:** ![prjctimg](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/prjctimg/32/21824_2.png) [@prjctimg](https://discourse.processing.org/u/prjctimg)\
**Post date:** [June 4, 2026, 7:12am UTC](https://discourse.processing.org/t/what-retro-games-have-been-built-with-p5-js-so-far/48692/4 "2026-06-04T07:12:12Z")

</div>

Thanks @jafal let me run it and get back to the thread! It seems like a great place to start, the other version is for Processing (Java) right ? Never tried it, but I heard Quill is awesome too!

---

<div class="post-metadata">

**Author:** ![samheckle](https://avatars.discourse-cdn.com/v4/letter/s/ecccb3/32.png) [@samheckle](https://discourse.processing.org/u/samheckle)\
**Post date:** [June 18, 2026, 6:04pm UTC](https://discourse.processing.org/t/what-retro-games-have-been-built-with-p5-js-so-far/48692/5 "2026-06-18T18:04:37Z")

</div>

found this today that might be useful given our conversation about pico8 in the last meeting: [GitHub - pico-8/awesome-PICO-8: A curated list of awesome PICO-8 resources, carts, tools and more · GitHub](https://github.com/pico-8/awesome-PICO-8)

---

<div class="post-metadata">

**Author:** ![prjctimg](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/prjctimg/32/21824_2.png) [@prjctimg](https://discourse.processing.org/u/prjctimg)\
**Post date:** [June 19, 2026, 5:48am UTC](https://discourse.processing.org/t/what-retro-games-have-been-built-with-p5-js-so-far/48692/6 "2026-06-19T05:48:26Z")

</div>

🤯

I love this!! This is exactly the kind of artwork for the games I had in mind! The pixelated artwork makes it easier to be a bit lax on aesthetics while experimenting with game mechanics.

Setting this up this afternoon for some experimentation. The next goal would be to short list a few retro games and then brainstorm each one and see which is easier to test implement.

Any ideas on which title to pick on first ?

Here’s another crazier pitch, can we render rich graphics (not just basic ascii with a few color code escapes) in terminals that support Kitty Terminal Graphics protocol/ iTerm Image Protocol / Sixel ? 🥲

Also found this wrapper interesting for pico-8. Could we run this in a webview ?

> **[react-pico-8](https://jaxs.onl/react-pico-8/#playing)**
