jblog
toc

Jetris CE

2016-08-20, post № 138

curses, games, programming, Python, #bag, #bag method, #Tetris

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. [1]
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-ce-1.png
jetris-ce-2.png
jetris-ce-4.png
Source code: jetris-ce.py

Web Sudoku Solver

2016-08-13, post № 137

Auto Hotkey, games, programming, Python, #AHK, #automatic, #fast times, #good times, #web, #Web Sudoku

In my last post I used Web Sudoku to get a Sudoku as an example for my solver.

After that I wanted to automate the process of looking up a Sudoku, solving it and typing it in. But while trying to get the Sudoku’s numbers, I noticed that the whole, solved Sudoku was stored in plaintext! (Look at this page’s source code.)
So I just needed to get that information, open the Web Sudoku page in a browser and type in the already solved Sudoku.

To accomplish said goal I used the python module urllib to get the Web Sudoku page’s source code and the module webbrowser to open the page in a browser. To type in the Sudoku I used AutoHotkey.

The finished program takes a level (easy, medium, hard or evil) and an id (the Sudoku’s identification number) to get a Sudoku, create an AHK file, execute it and open a web browser.
All you have to do is to click into the first box, press a key (‘F1’ in this case) and the Sudoku gets solved! You then just need to wait a minute, which is the minimum time Web Sudoku wants you to take to solve a Sudoku, and the AHK script hits enter.

You can get really good times with this:

web-sudoku-solver.png
Source code: web-sudoku-solver.py

Sudoku Solver

2016-08-06, post № 136

programming, Python, #666, #evil, #logic, #solve, #solving, #Web Sudoku

This program solves a given Sudoku.
It uses a simple strategy, looking at each box and determining those numbers that are not in its row, column and square. If that list has length 𝟣, the box’s number is determined.
After going through each box, the program generates child Sudokus in which the first empty box get filled with one of the possible numbers for that box. Sudokus with an error get eliminated.
Using this simple but effective strategy this program can solve hard Sudokus in under a second. As an example, I used Evil Puzzle 666 from Web Sudoku.
For more information on Sudokus, visit this Wikipedia entry.

sudoku-solver-1.png
Source code: sudoku-solver.py
Jonathan Frech's blog; built 2021/04/16 21:21:49 CEST