We re-created Tetris™ in ClojureScript. We mainly did this to produce the pleasure and to celebrate the 30th anniversary of its original release in 1984. Our remake enabled us to host a small, local tournament to share a montage of the game's history. Choose from 10 themes representing the popular versions from its past.
In the beginning, we worked on the game at least once a week. It got pretty crazy at the end closer to deadline, but our initial process is documented in blogs below:
- DevBlog 1 - data, collision, rotation, drawing
- DevBlog 2 - basic piece control
- DevBlog 3 - gravity, stack, collapse, hard-drop
- DevBlog 4 - ghost piece, flash before collapse
- DevBlog 5 - game over animation, score
- DevBlog 6 - level speeds, fluid drop, improve collapse animation, etc.
- DevBlog 7 - draw next piece, tilemap for themes
- DevBlog 8 - allow connected tiles for richer graphics
- Day 9 - live board broadcasting (no blog)
- Day 10 - chat room, more tilemaps, page layouts (no blog)
- Day 11 - page routing, username (no blog)
- Day N - socket netcode, spectate mode, MC controls, key-repeat control, chatroom, authentic theming, history graphs, ...
In the end, we wrapped up what we learned into an educational resource:
- Interactive Guide to Tetris in ClojureScript (below on the left)
- A minimal version intended for readability (below on the right)
Run the following in the project directory
# install node.js dependencies npm install # install grunt npm install -g grunt-cli # compile LESS file grunt # compile ClojureScript files (this may take a minute) lein clean && lein cljsbuild once # copy the example config file (edit as needed) cp example.config.json config.json # start the node.js server node server.js
Open http://localhost:1984 in your browser.
If you want a REPL connected to the browser for interactive testing:
lein repl > (brepl)
To deploy a single-player build to https://t3tr0s.github.io
- Elaine Looney - @loonelainey, github.com/imalooney
- Shaun Williams - @shaunlebron, github.com/shaunlebron, shaunlebron.com
- Luis Gutierrez - @Dudemullet, github.com/dudemullet
- Chris Oakman - @oakmac1, github.com/oakmac
- Brett Darnell - @brettdarnell, darnology.com
- Phil Gambling - @pmhg, github.com/pgambling
All code licensed under the terms of the MIT License.
The image files of past versions of the games (ie: the tilemap files) belong to their respective copyright holders.
Tetris is a registered trademark of The Tetris Company.