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@10:3958fb08696d, 2020-05-22 (annotated)
- 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?
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 | 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 |