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

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

Join 35,000+ makers on Adafruit’s Discord channels and be part of the community!

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!

Follow Adafruit on Instagram for top secret new products, behinds the scenes and more

CircuitPython – The easiest way to program microcontrollers –

Maker Business — Moving manufacturing out of China

Wearables — Take control of your LED sequins

Electronics — Current limiting!

Python for Microcontrollers — Python on Microcontrollers Newsletter: ESP32 Web Workflow for CircuitPython, CircuitPython Day 2022 and more! #CircuitPython @micropython @ThePSF @Raspberry_Pi

Adafruit IoT Monthly — Detect Radiation, ML Baby Monitor, 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! — New Products 8/11/2022 Featuring #adafruit 14-segment LED Alphanumeric Backpack – STEMMA QT!

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

No Comments

No comments yet.

Sorry, the comment form is closed at this time.