ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el17sdl_v2

Dependencies:   mbed

Committer:
sdlashmar
Date:
Thu May 21 13:55:57 2020 +0000
Revision:
7:c67a5c6a874f
Child:
8:1e4182ebb063
Game enine revision 1 (untested)

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