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.
Adafruit publishes a wide range of writing and video content, including interviews and reporting on the maker market and the wider technology world. Our standards page is intended as a guide to best practices that Adafruit uses, as well as an outline of the ethical standards Adafruit aspires to. While Adafruit is not an independent journalistic institution, Adafruit strives to be a fair, informative, and positive voice within the community – check it out here: adafruit.com/editorialstandards
Stop breadboarding and soldering – start making immediately! Adafruit’s Circuit Playground is jam-packed with LEDs, sensors, buttons, alligator clip pads and more. Build projects with Circuit Playground in a few minutes with the drag-and-drop MakeCode programming site, learn computer science using the CS Discoveries class on code.org, jump into CircuitPython to learn Python and hardware together, TinyGO, or even use the Arduino IDE. Circuit Playground Express is the newest and best Circuit Playground board, with support for CircuitPython, MakeCode, and Arduino. It has a powerful processor, 10 NeoPixels, mini speaker, InfraRed receive and transmit, two buttons, a switch, 14 alligator clip pads, and lots of sensors: capacitive touch, IR proximity, temperature, light, motion and sound. A whole wide world of electronics and coding is waiting for you, and it fits in the palm of your hand.
Have an amazing project to share? The Electronics Show and Tell is every Wednesday at 7:30pm ET! To join, head over to YouTube and check out the show’s live chat and our Discord!
Python for Microcontrollers – Adafruit Daily — Python on Microcontrollers Newsletter: CircuitPython 2025 Wraps, Focus on Using Python, Open Source and More! #CircuitPython #Python #micropython @ThePSF @Raspberry_Pi
EYE on NPI – Adafruit Daily — EYE on NPI Maxim’s Himalaya uSLIC Step-Down Power Module #EyeOnNPI @maximintegrated @digikey