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″.


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

Join Adafruit on Mastodon

Adafruit is on Mastodon, join in! adafruit.com/mastodon

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 7pm ET! To join, head over to YouTube and check out the show’s live chat – we’ll post the link there.

Join us every Wednesday night at 8pm ET for Ask an Engineer!

Join over 36,000+ makers on Adafruit’s Discord channels and be part of the community! http://adafru.it/discord

CircuitPython – The easiest way to program microcontrollers – CircuitPython.org


Maker Business — “Packaging” chips in the US

Wearables — Enclosures help fight body humidity in costumes

Electronics — Transformers: More than meets the eye!

Python for Microcontrollers — Python on Microcontrollers Newsletter: Silicon Labs introduces CircuitPython support, and more! #CircuitPython #Python #micropython @ThePSF @Raspberry_Pi

Adafruit IoT Monthly — Guardian Robot, Weather-wise Umbrella Stand, and more!

Microsoft MakeCode — MakeCode Thank You!

EYE on NPI — Maxim’s Himalaya uSLIC Step-Down Power Module #EyeOnNPI @maximintegrated @digikey

New Products – Adafruit Industries – Makers, hackers, artists, designers and engineers! — #NewProds 7/19/23 Feat. Adafruit Matrix Portal S3 CircuitPython Powered Internet Display!

Get the only spam-free daily newsletter about wearables, running a "maker business", electronic tips and more! Subscribe at AdafruitDaily.com !



No Comments

No comments yet.

Sorry, the comment form is closed at this time.