ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el17sdl_v2

Dependencies:   mbed

Committer:
sdlashmar
Date:
Fri May 22 11:08:40 2020 +0000
Revision:
9:f0213e632379
Parent:
8:1e4182ebb063
Child:
10:3958fb08696d
GAME OVER FUNCTION NOW WORKING

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sdlashmar 7:c67a5c6a874f 1 #include "GameEngine.h"
sdlashmar 7:c67a5c6a874f 2
sdlashmar 7:c67a5c6a874f 3 GameEngine::GameEngine()
sdlashmar 7:c67a5c6a874f 4 {
sdlashmar 7:c67a5c6a874f 5
sdlashmar 7:c67a5c6a874f 6 }
sdlashmar 7:c67a5c6a874f 7
sdlashmar 7:c67a5c6a874f 8 GameEngine::~GameEngine()
sdlashmar 7:c67a5c6a874f 9 {
sdlashmar 7:c67a5c6a874f 10
sdlashmar 7:c67a5c6a874f 11 }
sdlashmar 7:c67a5c6a874f 12
sdlashmar 7:c67a5c6a874f 13 void GameEngine::init(int head_size, int head_speed)
sdlashmar 7:c67a5c6a874f 14 {
sdlashmar 9:f0213e632379 15 _game_over = false;
sdlashmar 7:c67a5c6a874f 16 _score = 0;
sdlashmar 8:1e4182ebb063 17 _mouse = 0;
sdlashmar 7:c67a5c6a874f 18 _head_size = head_size;
sdlashmar 7:c67a5c6a874f 19 _head_speed = head_speed;
sdlashmar 7:c67a5c6a874f 20
sdlashmar 7:c67a5c6a874f 21 head.init(_head_size, _head_speed);
sdlashmar 7:c67a5c6a874f 22
sdlashmar 7:c67a5c6a874f 23 }
sdlashmar 7:c67a5c6a874f 24
sdlashmar 7:c67a5c6a874f 25 void GameEngine::read_input(Gamepad& pad)
sdlashmar 7:c67a5c6a874f 26 {
sdlashmar 7:c67a5c6a874f 27 _d = pad.get_direction();
sdlashmar 7:c67a5c6a874f 28 }
sdlashmar 7:c67a5c6a874f 29
sdlashmar 7:c67a5c6a874f 30 void GameEngine::update(Gamepad &pad, N5110 &lcd)
sdlashmar 7:c67a5c6a874f 31 {
sdlashmar 7:c67a5c6a874f 32 head.change_direction(_d);
sdlashmar 7:c67a5c6a874f 33 head.update();
sdlashmar 7:c67a5c6a874f 34 check_mouse_eaten(pad);
sdlashmar 7:c67a5c6a874f 35 check_wall_collision(pad, lcd);
sdlashmar 7:c67a5c6a874f 36 }
sdlashmar 7:c67a5c6a874f 37
sdlashmar 7:c67a5c6a874f 38 void GameEngine::draw(N5110 &lcd)
sdlashmar 7:c67a5c6a874f 39 {
sdlashmar 7:c67a5c6a874f 40 lcd.drawRect(0, 0, WIDTH, HEIGHT, FILL_TRANSPARENT);
sdlashmar 7:c67a5c6a874f 41 head.draw(lcd);
sdlashmar 9:f0213e632379 42 if (_mouse < 1) {
sdlashmar 9:f0213e632379 43 spawn_mouse(lcd);
sdlashmar 9:f0213e632379 44 };
sdlashmar 7:c67a5c6a874f 45 }
sdlashmar 7:c67a5c6a874f 46
sdlashmar 7:c67a5c6a874f 47 void GameEngine::spawn_mouse(N5110 &lcd)
sdlashmar 7:c67a5c6a874f 48 {
sdlashmar 7:c67a5c6a874f 49 //create random x and y coordinates for mouse
sdlashmar 7:c67a5c6a874f 50 srand(time(NULL));
sdlashmar 7:c67a5c6a874f 51 int _mouse_x = rand() %WIDTH;
sdlashmar 7:c67a5c6a874f 52 int _mouse_y = rand() %HEIGHT;
sdlashmar 7:c67a5c6a874f 53 //check if mouse count is less than one, we only want one mouse spawned at a time
sdlashmar 9:f0213e632379 54 lcd.drawRect(_mouse_x, _mouse_y, 2, 2, FILL_BLACK);
sdlashmar 9:f0213e632379 55 _mouse = 1;
sdlashmar 9:f0213e632379 56
sdlashmar 7:c67a5c6a874f 57 }
sdlashmar 7:c67a5c6a874f 58
sdlashmar 7:c67a5c6a874f 59 void GameEngine::check_mouse_eaten(Gamepad &pad)
sdlashmar 7:c67a5c6a874f 60 {
sdlashmar 7:c67a5c6a874f 61 Vector2D headPos = head.get_pos();
sdlashmar 7:c67a5c6a874f 62 int headX = headPos.x;
sdlashmar 7:c67a5c6a874f 63 int headY = headPos.y;
sdlashmar 7:c67a5c6a874f 64
sdlashmar 7:c67a5c6a874f 65 if(headX == _mouse_x && headY == _mouse_y) {
sdlashmar 7:c67a5c6a874f 66 _score = _score + 10;
sdlashmar 9:f0213e632379 67 _mouse = 0;
sdlashmar 7:c67a5c6a874f 68 pad.tone(750.0, 0.1);
sdlashmar 7:c67a5c6a874f 69 }
sdlashmar 7:c67a5c6a874f 70 }
sdlashmar 7:c67a5c6a874f 71
sdlashmar 7:c67a5c6a874f 72 void GameEngine::check_wall_collision(Gamepad &pad, N5110 &lcd)
sdlashmar 7:c67a5c6a874f 73 {
sdlashmar 7:c67a5c6a874f 74 Vector2D headPos = head.get_pos();
sdlashmar 7:c67a5c6a874f 75 int headX = headPos.x;
sdlashmar 7:c67a5c6a874f 76 int headY = headPos.y;
sdlashmar 7:c67a5c6a874f 77
sdlashmar 8:1e4182ebb063 78 if (headX < 0+2 || headX > WIDTH-3) {
sdlashmar 9:f0213e632379 79 _game_over = true;
sdlashmar 7:c67a5c6a874f 80 game_over(lcd, pad);
sdlashmar 7:c67a5c6a874f 81 }
sdlashmar 8:1e4182ebb063 82 if (headY < 0+2 || headY > HEIGHT-3) {
sdlashmar 9:f0213e632379 83 _game_over = true;
sdlashmar 7:c67a5c6a874f 84 game_over(lcd, pad);
sdlashmar 7:c67a5c6a874f 85 }
sdlashmar 7:c67a5c6a874f 86 }
sdlashmar 7:c67a5c6a874f 87
sdlashmar 7:c67a5c6a874f 88 void GameEngine::game_over(N5110 &lcd, Gamepad &pad)
sdlashmar 7:c67a5c6a874f 89 {
sdlashmar 9:f0213e632379 90
sdlashmar 9:f0213e632379 91
sdlashmar 7:c67a5c6a874f 92 pad.tone(NOTE_E5, 0.1);
sdlashmar 9:f0213e632379 93 wait(0.1);
sdlashmar 7:c67a5c6a874f 94 pad.tone(NOTE_D5, 0.1);
sdlashmar 9:f0213e632379 95 wait(0.1);
sdlashmar 7:c67a5c6a874f 96 pad.tone(NOTE_C5, 0.1);
sdlashmar 9:f0213e632379 97 while(_game_over == true){
sdlashmar 9:f0213e632379 98 lcd.clear();
sdlashmar 9:f0213e632379 99 lcd.printString(" GAME OVER! ", 5, 0);
sdlashmar 7:c67a5c6a874f 100 char buffer[14];
sdlashmar 7:c67a5c6a874f 101 sprintf(buffer, "%2d", _score);
sdlashmar 9:f0213e632379 102 lcd.printString(" You scored: ", 2, 2);
sdlashmar 9:f0213e632379 103 lcd.printString(buffer, 8, 4);
sdlashmar 9:f0213e632379 104 lcd.refresh();
sdlashmar 9:f0213e632379 105 };
sdlashmar 7:c67a5c6a874f 106 }
sdlashmar 7:c67a5c6a874f 107
sdlashmar 7:c67a5c6a874f 108
sdlashmar 7:c67a5c6a874f 109