Share your repls and programming experiences

← Back to all posts
🎮 Tetris [without canvas !]

Used no external libraries/frameworks.
(Just used the font-awesome icons.)
100% made by me!

I built this game using pure HTML, CSS, JS and without using the <canvas> element!
The most useful HTML element for making this game's UI is <div> !

❔ How to Play ?

  • Use Enter key to pause/resume (or restart the game after game-over).
  • Use ASDW keys or arrow keys to move & rotate the shape clockwise.
  • Use Q to rotate the shape counterclockwise.
  • Use E to rotate the shape clockwise. (alternate key for UP & W)
  • Use Ctrl key to hold the block.

💡 Tips:

  • Play it offline to load the SFX faster.
  • Customize the game by changing the values inside of config.js file.
  • Make the CONFIG.block.fragile property true/false, and see the difference!

🎮📖 Game Story:

At first you have 5 lives (by default) and $0. Each time you resolve the rows, you'll earn $10
for each row, and the speed of the game will be faster!

You can hold your money until you lose all your lives (😭😈).


This is really neat! Love the sound effects. Maybe make it so you earn more money when you get a tetris or destroy multiple levels at once?


@eankeen It give's you $10 for each levels you destroy. It doesn't matter how many levels you destroyed at once.
You can customize the price of each levels you destroy, by changing the value of CONFIG.resolve.price inside of config.js file.
As you earn more money, the game will be get faster.


This is really impressive! Well written code as well.


"PAUSE" is spelled "PUASE"


@idrawhorsechamp Thank you! (lol)


Noice. Check out my tetris!


@UzayAnil Hey..!
I've just played with it...
And unfortunately I just found 2 bugs.

  1. When the width of the block is more than the place where it should be placed, it will not be placed there and you can't see it in the next turn.
    For example, just try to place the first shape on the pixel number 5.

  2. It's a little hard to explain, but I think that if you try to do these steps, you will face this bug:

  • Place the 1st block on the 5th pixel
  • Place the 2st block on the 0th pixel
  • Place the 3st block on the 0th pixel
  • Place the 4st block on the 2th pixel
    After that you will see the block has filled a pixel that it should fill.

Thank you for these @smrsan761 are right, I fixed it, it now gives you the same block if you cannot place it (you will still lose a point though.)

Sorry, I don't understand 2.

This isn't included as 3., but I added game instructions too (for no reason.)


Nice. It's so smooth!

Do you plan on adding a hold button? Maybe it costs you $ to hold?


@masfrost Excuse me, I didn't understand your comment. Could you explain to me what "hold button" means?

( I've explained the keys here. )


@smrsan761 In most tetris modes you can save a piece for later


@masfrost Thanks for your nice advice. I'll implement that tomorrow. (here it's 3:00am)


@masfrost I've just implemented something like hold-piece.
Is that what you wanted ?


@smrsan761 YES! It works great! I've been playing it on and off all day :)

By the way, it would also be cool if there's a "Next" piece preview, see


@masfrost You should submit this to the challenge board. Do you mind if I move your post there?

Edit: nevermind just saw you submitted it :P


@masfrost Of course! I'm trying to implement that in the next 24 hours. 😉


@masfrost I implemented the "Next" piece preview,
and I have also changed the "Hold" piece feature according to this comment.
Is that what you wanted ?