Game Title: Maze Craze
Concept Overview: This project is an interactive maze game where players use a joystick connected to an Arduino Uno to navigate a ball through a maze displayed on a p5.js canvas. The game includes challenges like obstacles, a life system (represented by heart icons), and sound effects for feedback. The player wins by reaching a target point in the maze. The game tracks the fastest time for completion and the fastest time is also displayed. The walls are obstacles where the player loses a life when they touch the wall. This is to increase difficulty of the game and make sure players have to be careful while navigating the maze.
Arduino Program Design
Inputs:
Joystick (HW 504):
VRX (X-axis): Controls horizontal movement of the ball.
VRY (Y-axis): Controls vertical movement of the ball.
SW (Button): Can be used to reset the game .
Serial Communication:
Sends joystick X and Y axis values to the p5.js program.
Serial Data:
Sends joystick data in the format x,y to p5.js.
Arduino Logic:
Read X and Y values from the joystick.
Send the data via serial to p5.js in the format x,y.
Arduino Code:
void setup() { Serial.begin(9600); // Initialize serial communication at 9600 baud rate } void loop() { int xPos = analogRead(A0); // Joystick X-axis int yPos = analogRead(A1); // Joystick Y-axis // Map analog readings (0-1023) to a more usable range if needed int mappedX = map(xPos, 0, 1023, 0, 1000); // Normalize to 0-1000 int mappedY = map(yPos, 0, 1023, 0, 1000); // Normalize to 0-1000 // Send joystick values as CSV (e.g., "500,750") Serial.print(mappedX); Serial.print(","); Serial.println(mappedY); delay(50); // Adjust delay for data sending frequency }
P5.js Logic
Game Start:
Display a start screen and wait for mouse click or button press to begin.
Joystick Integration:
Map joystick X and Y data to control the ball’s position on the canvas.
Collision Detection:
Check for collisions with obstacles and deduct a life upon collision.
Game End:
Display a victory or loss message based on game outcomes.
Code for handling serial data:`
function handleSerialData() { let data = serial.readLine().trim(); // Read and trim data if (data.length > 0) { let values = data.split(","); if (values.length === 2) { joystickX = Number(values[0]); joystickY = Number(values[1]); } } }