Rosie Gillman

Dependencies:   mbed Gamepad2 ELEC2645_Project_el18rg

Dependents:   ELEC2645_Project_el18rg

https://os.mbed.com/media/uploads/el18rg/bug_splat_logo.png

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 https://os.mbed.com/media/uploads/el18rg/buttons.png

Instructions

  1. Turn the gamepad on
  2. Wait for start screen and press start
  3. Move the joystick to control the swatter
  4. Splat the bug as fast as you can
  5. 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

https://os.mbed.com/media/uploads/el18rg/intro_screen1.jpg

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

https://os.mbed.com/media/uploads/el18rg/intro_screen_2.jpg

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

https://os.mbed.com/media/uploads/el18rg/gameplay.jpg

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 https://os.mbed.com/media/uploads/el18rg/end_screen.jpg

Engine/Engine.cpp

Committer:
el18rg
Date:
2020-05-27
Revision:
3:2f4a7787beb3
Parent:
2:b936aa854de2
Child:
4:5cc1b81999a9

File content as of revision 3:2f4a7787beb3:

#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 p_pos = _cup.get_pos();
    
    if (ball_pos.x == p_pos.x )
    {
        collisionX=true;
    }
    else
    {
        collisionX=false;
    }
    
    if (ball_pos.y +10 == p_pos.y )
    {
        collisionY=true;
    }
    else
    {
        collisionY=false;
    }
        
    if (collisionX && collisionY)
    {
        pad.leds_on();
        wait_ms(100);
        pad.leds_off();
        }
}