Recreating the famous falling bit effect from Matrix using python and curses.
The individual bit strips are separate entities, falling to the bottom and then being moved up again with a different x value. They also get a random speed between one and five deciseconds.

20 J-Trix frames

# Python 2.7.7 Code
# Jonathan Frech 7th of September, 2016
#         edited 8th of September, 2016
#         edited 9th of September, 2016

Continue reading


Curses Cam

Normally a shell lets you input via a text command and outputs via a text message. When using curses you can extend its capabilities and program for example games with limited graphics.
I wanted to go even further and built a python script that — using pygame’s camera module and curses — captures an image from an attached webcam (USB or built-in), transforms it and displays it on the shell.
Although both the resolution and the color depth are shrunk immensely, the resulting colored text on the shell often resembles the scene caught and has a nice visual effect.
There are two modes, camera and file viewer, which can be toggled by pressing F1. In camera mode you can see what the camera is seeing and snap a photo, which then will be saved to disk. In file viewer mode you can view the photos you took. The files will be saved in an out/ directory located in the current python file’s directory. Saved photos have the file extension .si (shell image).
Unfortunately pygame’s camera module does neither work on Mac OS X nor on Windows. Thus this program is only properly usable under Linux systems. You obviously also need a webcam or else you will not be able to take a picture.


  • F1 switches between camera and file viewer mode
  • Space saves the current photo as a .si file (only in camera mode)
  • Left or down arrow key decreases current file’s id (only in file viewer mode)
  • Right or up arrow key increases current file’s id (only in file viewer mode)

Blinky Graffiti Hand

# Python 2.7.7 Code
# Jonathan Frech 19th of August, 2016
#         edited 21st of August, 2016
#         edited 23rd of August, 2016
#         edited 26th of August, 2016

Continue reading

Jetris CE

This game’s challenge is
to arrange the falling blocks.
Stay alive forever.

Jetris Console Edition is my second Tetris clone (see Jetris for the first one). It is programmed in Python and uses the curses module to display all its graphics on the shell.
Despite it running purely on the shell, I managed to eliminate any noticeable graphics update bugs. Furthermore the code to clear lines differs immensely from Jetris and actually works properly.
To enhance gameplay I implemented the so-called bag method. Instead of choosing pieces at random, a bag gets filled with all seven possible pieces. Each time you get a new piece, that piece gets randomly chosen out of the bag. If the bag is empty, it gets refilled. That way it is ensured that there will be no more than twelve pieces between two identical pieces (worst-case scenario). Also there will no more than four S or Z pieces in a row which makes the game fairer.
The pieces initially fall at one pps (pixel per second) and the game runs at twelve tps (ticks per seconds). Every ten cleared lines the speed increases by one tick or one twelfth of a second until it stays at the minimum speed, one twelfth of a second.
The game’s clock is handled by a thread and graphics updates are made when they are needed (there are no fps).
To achieve the pieces blocky look I used two spaces and a color pair whose background color is the piece’s color. On the shell two fully filled characters look like a square.
You also have the option to change your key bindings — which get saved on disk –, pause the game and there is a high score list — which also gets saved on disk. The files are located where the python code file resides.

Jetris in action (1) Jetris in action (2) Game over.

# Python 2.7.7 Code
# Jonathan Frech 10th of August, 2016
#         edited 11th of August, 2016
#         edited 12th of August, 2016
#         edited 13th of August, 2016
#         edited 14th of August, 2016
#         edited 16th of August, 2016
#         edited 17th of August, 2016
#         edited 18th of August, 2016
#         edited 19th of August, 2016

#         edited 22nd of August   , 2016
#                bug fix: speed
#         edited  6th of September, 2016
#                bug fix: addstr() error
#         edited  8th of October  , 2016
#                bug fix: addstr(), curs_set() and move() errors

Continue reading