Logo

dev-resources.site

for different kinds of informations.

Day 24: Paint by Pixels 🎨

Published at
12/24/2024
Categories
webdev
beginners
deno
webadvent
Author
valeriavg
Categories
4 categories in total
webdev
open
beginners
open
deno
open
webadvent
open
Author
9 person written this
valeriavg
open
Day 24: Paint by Pixels 🎨

We did almost everything in a terminal except for maybe... Drawing!
And that's exactly what we're going to be doing today with the help of terminal-canvas.

Let's install it with e.g. deno add npm:terminal-canvas and create a script, e.g. main.ts:

import { Canvas } from "terminal-canvas";

const canvas = Canvas.create().reset();

for (let i = 8; i < 9; i++) {
  canvas.moveTo(i, 1);
  canvas.background("green").write(" ");
}
for (let i = 6; i < 11; i++) {
  canvas.moveTo(i, 2);
  canvas.background("green").write(" ");
}
for (let i = 4; i < 13; i++) {
  canvas.moveTo(i, 3);
  canvas.background("green").write(" ");
}
for (let i = 2; i < 15; i++) {
  canvas.moveTo(i, 4);
  canvas.background("green").write(" ");
}

for (let i = 6; i < 11; i++) {
  canvas.moveTo(i, 5);
  canvas.background("green").write(" ");
}
for (let i = 4; i < 13; i++) {
  canvas.moveTo(i, 6);
  canvas.background("green").write(" ");
}
for (let i = 2; i < 15; i++) {
  canvas.moveTo(i, 7);
  canvas.background("green").write(" ");
}
for (let i = 0; i < 17; i++) {
  canvas.moveTo(i, 8);
  canvas.background("green").write(" ");
}
for (let i = 6; i < 11; i++) {
    canvas.moveTo(i, 9);
    canvas.background("brown").write(" ");
}

canvas.flush()
console.log("");
console.log("");
Enter fullscreen mode Exit fullscreen mode

Run with e.g. deno run -A main.ts and enjoy this little tree:

Tree

But the tree is not decorated at all! That won't do it!
Let's change the code to:

import { Canvas } from "terminal-canvas";

const canvas = Canvas.create().reset();

for (let i = 8; i < 9; i++) {
  canvas.moveTo(i, 1);
  canvas.background("green").write(" ");
}
for (let i = 6; i < 11; i++) {
  canvas.moveTo(i, 2);
  canvas.background("green").write(" ");
}
for (let i = 4; i < 13; i++) {
  canvas.moveTo(i, 3);
  canvas.background("green").write(" ");
}
for (let i = 2; i < 15; i++) {
  canvas.moveTo(i, 4);
  canvas.background("green").write(" ");
}

for (let i = 6; i < 11; i++) {
  canvas.moveTo(i, 5);
  canvas.background("green").write(" ");
}
for (let i = 4; i < 13; i++) {
  canvas.moveTo(i, 6);
  canvas.background("green").write(" ");
}
for (let i = 2; i < 15; i++) {
  canvas.moveTo(i, 7);
  canvas.background("green").write(" ");
}
for (let i = 0; i < 17; i++) {
  canvas.moveTo(i, 8);
  canvas.background("green").write(" ");
}
for (let i = 6; i < 11; i++) {
  canvas.moveTo(i, 9);
  canvas.background("brown").write(" ");
}

const colors = ["red", "cyan", "white", "yellow", "blue", "magenta"];

setInterval(() => {
  let x = Math.floor(Math.random() * colors.length);

  canvas.moveTo(2, 8);
  canvas.background(colors[x]).write(" ");
  canvas.moveTo(3, 8);
  canvas.background(colors[x]).write(" ");

  x = (x+1) % colors.length

  canvas.moveTo(5, 7);
  canvas.background(colors[x]).write(" ");
  canvas.moveTo(6, 7);
  canvas.background(colors[x]).write(" ");

  x = (x+1) % colors.length

  canvas.moveTo(11, 7);
  canvas.background(colors[x]).write(" ");
  canvas.moveTo(12, 7);
  canvas.background(colors[x]).write(" ");

  x = (x+1) % colors.length
  canvas.moveTo(8, 8);
  canvas.background(colors[x]).write(" ");
  canvas.moveTo(9, 8);
  canvas.background(colors[x]).write(" ");

  x = (x+1) % colors.length
  canvas.moveTo(13, 8);
  canvas.background(colors[x]).write(" ");
  canvas.moveTo(14, 8);
  canvas.background(colors[x]).write(" ");

  x = (x+1) % colors.length
  canvas.moveTo(8, 6);
  canvas.background(colors[x]).write(" ");
  canvas.moveTo(9, 6);
  canvas.background(colors[x]).write(" ");

  x = (x+1) % colors.length
  canvas.moveTo(9, 2);
  canvas.background(colors[x]).write(" ");
  canvas.moveTo(10, 2);
  canvas.background(colors[x]).write(" ");

  x = (x+1) % colors.length
  canvas.moveTo(5, 3);
  canvas.background(colors[x]).write(" ");
  canvas.moveTo(6, 3);
  canvas.background(colors[x]).write(" ");

  x = (x+1) % colors.length
  canvas.moveTo(11, 4);
  canvas.background(colors[x]).write(" ");
  canvas.moveTo(12, 4);
  canvas.background(colors[x]).write(" ");

  x = (x+1) % colors.length
  canvas.moveTo(6, 5);
  canvas.background(colors[x]).write(" ");
  canvas.moveTo(7, 5);
  canvas.background(colors[x]).write(" ");

  x = (x+1) % colors.length
  canvas.moveTo(8, 4);
  canvas.background(colors[x]).write(" ");
  canvas.moveTo(9, 4);
  canvas.background(colors[x]).write(" ");

  canvas.flush();
}, 40);

console.log("");
console.log("");

Enter fullscreen mode Exit fullscreen mode

Do you like what you see? Hope you do!

Happy holidays!

Liked the content and would love to have more of it all year long?

Buy Me A Coffee

deno Article's
30 articles in total
Favicon
Deno docker
Favicon
Day 24: Paint by Pixels 🎨
Favicon
Day 22: How the Tables have turned πŸ“
Favicon
Day 20: Not a Dedent! 🚧
Favicon
Day 23: Terminal Images πŸ–ΌοΈ
Favicon
Day 19: Highlight'em up! πŸ”–
Favicon
Day 18: Got a millisecond? ⏱️
Favicon
You can omit `run` from `deno run` command
Favicon
Day 17: Terminal Links & Other Escapes πŸ”—
Favicon
Day 8: D-8 🎱
Favicon
Day 7: Your input is valid πŸ–οΈ
Favicon
πŸš€ Rust Coders, Don’t Miss These 25 Resource Picks
Favicon
Day 9: Terminal Forms πŸ“‡
Favicon
Dynamic DNS sync with Cloudflare
Favicon
Day 14: Keep on Spinning! ♻️
Favicon
πŸš€ Automate Your PostgreSQL Backups with Ease! 🐳
Favicon
Day 21: In the name of Progress! πŸ“ˆ
Favicon
πŸš€ Automate Your PostgreSQL Backups with Ease! 🐳
Favicon
Runtime challenge: Bun vs Node
Favicon
I built a Fullstack Deno 2 application
Favicon
Self Writing Lang Graph State
Favicon
Supabase Just Got More Powerful: Queue, Cron, and Background Tasks in Edge Functions
Favicon
Day 4: ASCII Art Fonts πŸ–‹οΈ
Favicon
Day 13: I love Boxes! πŸ“¦
Favicon
#2 Daily Rabbit Holes: Diving Deeper into Rust, V8, and the JavaScriptℒ️ Saga
Favicon
Day 12: Pico-co-colors πŸ₯
Favicon
πŸ†š Bun vs Deno: When to Use Each in Your Projects?
Favicon
Exploring Bun.js Over Deno: A Humble Developer's Tale
Favicon
Day 10: Ho-ho-hono! πŸ”₯
Favicon
Benchmarking in Node.js vs Deno: A Comprehensive Comparison

Featured ones: