Luo Yi Tan – Final Project

I wanted to make some sort of game, where a machine dispenses some kind of reward whenever you beat it. Pavlovian, some would say.

In the game, you move a small square with your mouse, and click to shoot. If you shoot a big M&M, a smaller M&M will fall from it. The goal of the game is to collect as many little M&Ms as possible.

Here is a screenshot of the game:

The game itself is made in Processing. It wasn’t too hard to implement, but getting the game logic down needed some work, as I have never coded a game from scratch before. The highscore is read and saved in a txt file in the Processing folder.

You can see it in action here:

In the beginning, I designed a box to laser cut, but I accidentally messed up the measurements of the box. So, I improvised, using a cardboard box I had lying around and a garden hose. It turned out well, surprisingly enough. The gear that dispenses the candy was laser cut, moved by two other gears that are connected to a servo. This is controlled by an Arduino, which reads a value from Processing that tells it whether a player has beat the high score or not.

The mechanism is pretty simple:

This is the fritzing diagram:

Extra ideas I had but didn’t have time to do: Dispensing something undesirable when you don’t beat the high score, and allowing the user to take a picture of their face and put it on the player character.

The Processing code is rather long and also split up into several files, so I have uploaded it on mediafire as a zip file.

The Arduino code is pretty straightfoward, it simply checks if a signal that the player has beat the high score is sent from Processing:

#include
Servo servo1;void setup(){
servo1.attach(9);
servo1.write(90);
Serial.begin(9600);}void loop(){// check if data has been sent from the computer:if(Serial.available()){// read the most recent byte (which will be from 0 to 255):byte pos = Serial.read();// move a servo and RELEASE CANNDEHif(pos ==1){
servo1.write(0);
delay(3000);
servo1.write(90);
delay(1000);//servo1.detach();}}}