ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el17sdl_v2

Dependencies:   mbed

Committer:
sdlashmar
Date:
Fri May 22 12:29:53 2020 +0000
Revision:
10:3958fb08696d
Parent:
9:f0213e632379
Child:
11:c4b740a970f8
spawn mouse/check mouse function(s) working as expected

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