The math formulas for the arcade game Qix #Gaming @gameduino
James Bowman from Excamera Labs, who puts out the Gameduino graphics solution for microcontrollers, has provided some fascinating information on how the arcade Qix calculated the movable, colored sprites without incurring great processing power or memory use:
In about 1979, I first wrote the code to bounce a point around the screen on a Commodore PET. The implementation was the obvious one:
- keep track of the point’s (x, y)
- keep track of the point’s velocity (xv, yv)
- negate xv or yv whenever the ball touches the edge of the screen
That’s a lot of state variables and housekeeping. Here’s another way of making the animation that doesn’t use any variables at all, just the current time.
Start with a sawtooth wave function.
By scaling the t term you change the speed of the sawtooth signal. And by scaling its magnitude, of course, you can make it an arbitrary size. Using this function, with suitable scaling factors, for the Y-coordinate of a point makes the point move up and down the screen:
Use another, different, set of scaling factors for the X-coordinate, and the point bounces around the screen:
In fact, using three different sets of these parameters gives three point trajectories, all independent:
Very nice. But by making one small change, from drawing POINTs to LINE_STRIPs, the famous shape of the Qix emerges:
But the Qix ought to be in color. To color it, just repeat the same trick in the RGB cube:
Each of R,G and B is another sawtooth wave, endlessly cycling between 0 and 255. This gives the famous color-shifting Qix, beloved graphics demo of a past era.
The code is in examples/qix.py on the bteve repo.
It will work on any CircuitPython with Gameduino 3 or 3X, including the Dazzler.
All these screenshots are taken from the new Gameduino 3X 5″.
Post a Comment