I made a snake game.
You push the buttons to move the snake and try not to die.
Also there’s a cool space background just to make things more interesting.
import processing.serial.*; Serial myPort; ArrayList<Sphere> spheres; int xPos = 400; int yPos = 300; int Xspeed = 1; int Yspeed; int diam = 10; float [] coordinatesX = {}; float [] coordinatesY = {}; int game = 0; void setup(){ size(800,600); background(30); fill(255); String portName = "/dev/tty.usbserial-DA01LJI0"; myPort = new Serial(this,portName, 9600); myPort.bufferUntil('\n'); spheres = new ArrayList<Sphere>(); } void draw(){ background(30); spheres.add(new Sphere()); for (int i = spheres.size()-1; i>=0; i--) { // manipulate the objects Sphere s = spheres.get(i); s.update(); s.render(); //s.bounds(); if (s.isDead()) { spheres.remove(i); } } game = 1; if(game == 1){ fill(255); stroke(255); xPos = constrain(xPos,0,800); yPos = constrain(yPos,0,600); xPos += Xspeed; yPos += Yspeed; for (int i = 0; i < coordinatesX.length; i++){ rect(coordinatesX[i],coordinatesY[i],diam,diam); if ((xPos == coordinatesX[i] && yPos == coordinatesY[i]) || xPos == 0 || xPos == 800 || yPos == 0 || yPos == 600 ){ game = 2; } } rect(xPos,yPos,diam,diam); //'UP' command coordinatesX = append(coordinatesX,int(xPos)); coordinatesY = append(coordinatesY,int(yPos)); if(game == 2){ background(30); textSize(20); text("Bruh you dead.",200,height/2); yPos = 0; xPos = 0; fill(30); } } } void serialEvent(Serial myPort) { String input = myPort.readString(); String[] numbers = split(input, ','); float[] values = float(numbers); //'UP' command if(values[2] == 1){ Yspeed= -3; Xspeed=0; } //'DOWN' command if(values[1] == 1){ Yspeed = 3; Xspeed = 0; } //'LEFT' command if(values[3] == 1){ Yspeed = 0; Xspeed = -3; } if(values[0] == 1){ Yspeed = 0; Xspeed = 3; } myPort.write('x'); } class Sphere { // variables for the object float xPos; float yPos; float xSpeed; float ySpeed; float diam; float alpha; Sphere() { alpha = random(250, 255); xPos = 400; yPos = 300; xSpeed = random(-7.,7.); ySpeed = random(-7.,7.); diam = 100; } boolean isDead() { if (alpha <= 0) { return true; } else { return false; } } // declare all my functions void render() { alpha -=3; diam--; fill(210, alpha); //for(int i = 0; i<100;i = i+5){ ellipse(xPos, yPos, xSpeed, ySpeed ); // ellipse(xPos-i,yPos+i,xSpeed,ySpeed); // ellipse(xPos+i,yPos-i,xSpeed,ySpeed); // ellipse(xPos-i,yPos-i,xSpeed,ySpeed); // } if (mousePressed == true){ for(int i = 0; i<100;i = i+50){ ellipse(xPos+i, yPos+i, xSpeed, ySpeed ); ellipse(xPos-i,yPos+i,xSpeed,ySpeed); ellipse(xPos+i,yPos-i,xSpeed,ySpeed); ellipse(xPos-i,yPos-i,xSpeed,ySpeed); } } } void update() { xPos-=xSpeed; yPos-=ySpeed; } void bounds() { if (xPos >= width || xPos <= 0) { xSpeed = xSpeed * -1; } if (yPos >= height || yPos <= 0) { ySpeed = ySpeed * -1; } } }
This is the code for Arduino:
void setup() { // put your setup code here, to run once: pinMode(2,INPUT); //GREEN pinMode(3,INPUT); //YELLOW pinMode(5,INPUT); //RED pinMode(7,INPUT); //BLUE Serial.begin(9600); Serial.println("0,0,0,0"); } void loop() { // put your main code here, to run repeatedly: if (Serial.available() > 0) { int processing = Serial.read(); Serial.print(digitalRead(2)); Serial.print(","); delay(1); Serial.print(digitalRead(3)); Serial.print(","); delay(1); Serial.print(digitalRead(5)); Serial.print(","); delay(1); Serial.println(digitalRead(7)); delay(1); } }