Rosie Gillman
Dependencies: mbed Gamepad2 ELEC2645_Project_el18rg
Dependents: ELEC2645_Project_el18rg
Rosemary Gillman 201265952
Objective
The goal of the game is to splat the bug as fast as you can using the swatter.
Controls
1 - Joystick - left/right to control the swatter 2 - Start button - starts the game 3 - Reset - resets the game 4 - Volume pot - adjusts the volume
Instructions
- Turn the gamepad on
- Wait for start screen and press start
- Move the joystick to control the swatter
- Splat the bug as fast as you can
- Press reset to play again
Gameplay
Start Screen 1
- Low pad tone plays for 0.5s
- Pad lights flash (200ms on/200ms off)
- Text saying "Bug Splat Leeds Edition" is displayed
- After 5 flashes the screen changes to Start Screen 2
Start Screen 2
- Pad lights stay on constantly
- Text reads "Splat the bug as fast as you can! Press start"
- When start is pressed the screen changes to Gamplay Screen
Gameplay Screen
- The timer begins
- Bug appears in the top right corner
- Swatter appears in the bottom left corner
- The bug bounces (with random velocity/direction) off the sides
- When the bug bounces off the wall a low pad tone is played each time for 0.1 seconds
- Swatter is controlled left to right with the joystick
- When the bug and swatter overlap the screen changes to the Ending Screen
Ending Screen
- Low pad tone plays for 0.5s
- The timer ends and its value is displayed
- Text reads "SPLAT (time) secs"
- Splats are drawn on the screen
Diff: Engine/Engine.cpp
- Revision:
- 2:b936aa854de2
- Child:
- 3:2f4a7787beb3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Engine/Engine.cpp Wed May 27 01:35:20 2020 +0000 @@ -0,0 +1,83 @@ +#include "Engine.h" +#include "mbed.h" +#include "Gamepad.h" +#include "N5110.h" + +Engine::Engine(){} +Engine::~Engine(){} + +void Engine::init(int paddle_width,int paddle_height,int ball_size,int speed) +{ + // initialise the game parameters + width = paddle_width; + height = paddle_height; + //_ball_size = ball_size; + _speed = speed; + x = GAP; + _cup.init(x,height,width); + _ball.init(_speed); +} + +void Engine::read_input(Gamepad &pad) +{ + _d = pad.get_direction(); + _mag = pad.get_mag(); +} + +void Engine::draw(N5110 &lcd) +{ + _ball.draw(lcd); + _cup.draw(lcd); +} + +void Engine::update(Gamepad &pad) +{ + _cup.update(_d,_mag); + _ball.update(); + check_wall_collision(pad); + check_paddle_collisions(pad); +} +void Engine::check_wall_collision(Gamepad &pad) +{ + // read current ball attributes + Vector2D ball_pos = _ball.get_pos(); + Vector2D ball_velocity = _ball.get_velocity(); + + // check if hit top wall + if (ball_pos.y <= 1) { // 1 due to 1 pixel boundary + ball_pos.y = 1; // bounce off ceiling without going off screen + ball_velocity.y = -ball_velocity.y; + // audio feedback + pad.tone(750.0,0.1); + } + // check if hit bottom wall + else if (ball_pos.y + 10 >= (HEIGHT-1) ) { // bottom pixel is 47 + // hit bottom + ball_pos.y = (HEIGHT-1) - 10; // stops ball going off screen + ball_velocity.y = -ball_velocity.y; + // audio feedback + pad.tone(750.0,0.1); + } + + // update ball parameters + _ball.set_velocity(ball_velocity); + _ball.set_pos(ball_pos); +} +void Engine::check_paddle_collisions(Gamepad &pad) +{ + Vector2D ball_pos = _ball.get_pos(); + Vector2D ball_velocity = _ball.get_velocity(); + + // check p1 first + Vector2D p1_pos = _p1.get_pos(); + + if(ball_pos.x = p1_pos.x) { + for (int i = 0; i < 5; i++) { + pad.leds_on(); + wait_ms(200); + pad.leds_off(); + wait_ms(200); + } + + } +}