ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el17sdl_v2

Dependencies:   mbed

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