A single interface game, kind of simplified Zuma, with a set of APIs, which should control most of the actions on the UI.
There are several tunnels on the screen. Every tunnel has its own label. A tunnel is not necessary to be straight, but should be ideally lying from left to right, with an entrance at the left end and an exit at the right end. There are certain numbers of bling-bling balls rolling inside a tunnel, from left to right. They are keeping rolling until they are jammed, either by other balls stopped at their right side or a closed exit. Every ball has its own label, which consists 1 alphabet and 3 numbers. The number of balls inside a tunnel could be 0 or more than hundreds, however, only the most 10 balls on the right need to be displayed. While a ball displayed, its label should be displayed clearly.
The number of tunnels could be 1 or more, say, 8. but the number of tunnels to be displayed on the screen at the same time should not be more than 4. The reason is that we want to display the balls inside the tunnels with clear labels which should be seen clearly at the distance of 4~7 meters to a screen with similar size of 37'' TV. Thus, if the actual number of tunnels is greater than 4, the tunnels should be displayed cyclically. If the tunnels are cycled, they should be cycled with animation.
There are several actions should be triggered by APIs:
Push-a-ball-into-a-tunnel: A ball appears at the entrance of a tunnel, with a given label, starts to roll to the right;
Success-popup: The exit of a tunnel opens then closes, the most right ball pops out and vanishes, while its label pronounced with human voice;
Failure-popup: The exit of a tunnel opens then closes, the most right ball pops out and vanished, silently;
Wipe-a-ball: remove a ball from its tunnel, with sound effect;
Label-a-tunnel: give a tunnel a new label;
Clean-a-tunnel: Empty a tunnel;
Clean-all: Empty all tunnels;
There are actions should be done automatically:
Cycling-tunnels: if the number of tunnels are more than 4, they should be displayed on the screen cyclically with animation, at certain interval ( say 5 seconds), which should be configurable.
Rolling-balls: if the right side of a ball is empty, i.e. not reaching other balls or the closed exit of the tunnel, it should roll to its right until jammed.
1, Target host is Raspberry Pi running Raspbian, a brand of Linux similar to Ubuntu and Debian, but the machine is kind of less powerful (with a ARM11 and 512M RAM )；
2, The game will be output to a HDMI device, full screen, with support of different screen size, include 1440x900, 1280x800, etc ( so the game should be configurable to fit different screen size);
3, The game will be running 7/24, so it'd better be robust;
4, While its running, it should provide a set of APIs, through a HTTP based protocol, such as RESTful API, or SOAP, or WebSocket, or simple GET/POST urls ( any ONE of the protocols, not all of them);
5, The APIs should control the UI actions listed above;
6, The actions should be displayed with animations and effect sounds;
7, The animation should be smooth; the response time for the API calls should be reasonable short, i.e., less than a second;
8, The ideal programming language is Python with PyGame, but it is not necessary as long as 1-7 are met;
The resources will be provided, including MP3s of human voice pronouncing A-Z, 0-9 / PNGs of tunnels, balls / effect sounds / etc.
This mission is simple, but the critical part is to make it fast enough to run smoothly at a less powerful machine like Raspberry Pi.
Once the project is finished, all the py files should be delivered.