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@11:c4b740a970f8, 2020-05-23 (annotated)
- 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?
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 | 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 |