Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
GameEngine/GameEngine.cpp@7:c67a5c6a874f, 2020-05-21 (annotated)
- 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?
User | Revision | Line number | New 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 |