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]);
}
}
}
