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
SpaceInvadersEngine/SpaceInvadersEngine.cpp@71:1f6b665fc047, 2019-04-27 (annotated)
- Committer:
 - fy14lkaa
 - Date:
 - Sat Apr 27 19:54:20 2019 +0000
 - Revision:
 - 71:1f6b665fc047
 - Parent:
 - 70:7f0b330ff40b
 - Child:
 - 72:938d2d65199d
 
added void function to print the scores using lcd and N5110 libraries
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| fy14lkaa | 12:45b1249b3d9a | 1 | #include "SpaceInvadersEngine.h" | 
| fy14lkaa | 12:45b1249b3d9a | 2 | |
| fy14lkaa | 12:45b1249b3d9a | 3 | SpaceInvadersEngine::SpaceInvadersEngine() | 
| fy14lkaa | 12:45b1249b3d9a | 4 | { | 
| fy14lkaa | 12:45b1249b3d9a | 5 | |
| fy14lkaa | 12:45b1249b3d9a | 6 | } | 
| fy14lkaa | 12:45b1249b3d9a | 7 | |
| fy14lkaa | 12:45b1249b3d9a | 8 | SpaceInvadersEngine::~SpaceInvadersEngine() | 
| fy14lkaa | 12:45b1249b3d9a | 9 | { | 
| fy14lkaa | 57:45c5de9cefdf | 10 | |
| fy14lkaa | 57:45c5de9cefdf | 11 | |
| fy14lkaa | 12:45b1249b3d9a | 12 | } | 
| fy14lkaa | 12:45b1249b3d9a | 13 | |
| fy14lkaa | 12:45b1249b3d9a | 14 | |
| fy14lkaa | 12:45b1249b3d9a | 15 | |
| fy14lkaa | 12:45b1249b3d9a | 16 | |
| fy14lkaa | 57:45c5de9cefdf | 17 | void SpaceInvadersEngine::init(int space_ship_width,int space_ship_height,int bullet_size, int Alien_size, int speed) | 
| fy14lkaa | 57:45c5de9cefdf | 18 | { | 
| fy14lkaa | 57:45c5de9cefdf | 19 | // initialise the game parameters | 
| fy14lkaa | 57:45c5de9cefdf | 20 | |
| fy14lkaa | 13:9d6ee753eca6 | 21 | _space_ship_width= space_ship_width; | 
| fy14lkaa | 13:9d6ee753eca6 | 22 | _space_ship_height= space_ship_height; | 
| fy14lkaa | 13:9d6ee753eca6 | 23 | _bullet_size= bullet_size; | 
| fy14lkaa | 57:45c5de9cefdf | 24 | _Alien_size= Alien_size; | 
| fy14lkaa | 13:9d6ee753eca6 | 25 | _speed= speed; | 
| fy14lkaa | 57:45c5de9cefdf | 26 | |
| fy14lkaa | 57:45c5de9cefdf | 27 | |
| fy14lkaa | 12:45b1249b3d9a | 28 | } | 
| fy14lkaa | 12:45b1249b3d9a | 29 | |
| fy14lkaa | 12:45b1249b3d9a | 30 | void SpaceInvadersEngine::read_input(Gamepad &pad) | 
| fy14lkaa | 12:45b1249b3d9a | 31 | { | 
| fy14lkaa | 12:45b1249b3d9a | 32 | _d = pad.get_direction(); | 
| fy14lkaa | 13:9d6ee753eca6 | 33 | _mag = pad.get_mag(); | 
| fy14lkaa | 12:45b1249b3d9a | 34 | } | 
| fy14lkaa | 12:45b1249b3d9a | 35 | |
| fy14lkaa | 57:45c5de9cefdf | 36 | void SpaceInvadersEngine::draw(N5110 &lcd) | 
| fy14lkaa | 12:45b1249b3d9a | 37 | { | 
| fy14lkaa | 12:45b1249b3d9a | 38 | // draw the elements in the LCD buffer | 
| fy14lkaa | 12:45b1249b3d9a | 39 | // pitch | 
| fy14lkaa | 57:45c5de9cefdf | 40 | |
| fy14lkaa | 12:45b1249b3d9a | 41 | //score | 
| fy14lkaa | 57:45c5de9cefdf | 42 | print_scores(lcd); | 
| fy14lkaa | 57:45c5de9cefdf | 43 | _Alien.draw(lcd); | 
| fy14lkaa | 58:74742c821522 | 44 | _space_ship.draw(lcd); | 
| fy14lkaa | 59:9e8e8d6be5b2 | 45 | _bullet.draw(lcd); | 
| fy14lkaa | 56:c8fc0a1f4132 | 46 | } | 
| fy14lkaa | 57:45c5de9cefdf | 47 | |
| fy14lkaa | 60:c5f97e0a14eb | 48 | void SpaceInvadersEngine::update(Gamepad &pad) | 
| fy14lkaa | 60:c5f97e0a14eb | 49 | { | 
| fy14lkaa | 62:0bd9b22ad5ed | 50 | check_goal(pad); | 
| fy14lkaa | 66:0123bd3dcbc6 | 51 | _bullet.update(); | 
| fy14lkaa | 66:0123bd3dcbc6 | 52 | _space_ship.update(_d,_mag); | 
| fy14lkaa | 60:c5f97e0a14eb | 53 | |
| fy14lkaa | 66:0123bd3dcbc6 | 54 | _A1ien.update(_d,_mag); | 
| fy14lkaa | 66:0123bd3dcbc6 | 55 | |
| fy14lkaa | 66:0123bd3dcbc6 | 56 | check_Alien_collision(pad); | 
| fy14lkaa | 66:0123bd3dcbc6 | 57 | check_space_ship_collisions(pad); | 
| fy14lkaa | 66:0123bd3dcbc6 | 58 | |
| fy14lkaa | 57:45c5de9cefdf | 59 | |
| fy14lkaa | 66:0123bd3dcbc6 | 60 | } | 
| fy14lkaa | 66:0123bd3dcbc6 | 61 | void SpaceInvadersEngine::check_Alien_collision(Gamepad &pad) | 
| fy14lkaa | 66:0123bd3dcbc6 | 62 | { | 
| fy14lkaa | 57:45c5de9cefdf | 63 | |
| fy14lkaa | 66:0123bd3dcbc6 | 64 | // read current bullet attributes | 
| fy14lkaa | 66:0123bd3dcbc6 | 65 | Vector2D bullet_pos = _bullet.get_pos(); | 
| fy14lkaa | 66:0123bd3dcbc6 | 66 | Vector2D bullet_velocity = _bullet.get_velocity(); | 
| fy14lkaa | 66:0123bd3dcbc6 | 67 | //check if the bullet hit the top of the alien | 
| fy14lkaa | 57:45c5de9cefdf | 68 | |
| fy14lkaa | 68:175190a03cbd | 69 | // check if the bullet hits top of the Alien | 
| fy14lkaa | 67:4299b64ad5fc | 70 | if (bullet_pos.y <= 1) { // 1 due to 1 pixel boundary | 
| fy14lkaa | 67:4299b64ad5fc | 71 | bullet_pos.y = 1; // bounce off ceiling without going off screen | 
| fy14lkaa | 67:4299b64ad5fc | 72 | bullet_velocity.y = -bullet_velocity.y; | 
| fy14lkaa | 67:4299b64ad5fc | 73 | // audio feedback | 
| fy14lkaa | 67:4299b64ad5fc | 74 | pad.tone(750.0,0.1); | 
| fy14lkaa | 67:4299b64ad5fc | 75 | } | 
| fy14lkaa | 67:4299b64ad5fc | 76 | |
| fy14lkaa | 68:175190a03cbd | 77 | // check if the bullet hits bottom of the Alien | 
| fy14lkaa | 68:175190a03cbd | 78 | else if (bullet_pos.y + _bullet_size >= (HEIGHT-1) ) { // bottom pixel is 47 | 
| fy14lkaa | 68:175190a03cbd | 79 | // hit bottom | 
| fy14lkaa | 68:175190a03cbd | 80 | bullet_pos.y = (HEIGHT-1) - _bullet_size; // stops bullet going off screen | 
| fy14lkaa | 68:175190a03cbd | 81 | bullet_velocity.y = -bullet_velocity.y; | 
| fy14lkaa | 68:175190a03cbd | 82 | // audio feedback | 
| fy14lkaa | 68:175190a03cbd | 83 | pad.tone(750.0,0.1); | 
| fy14lkaa | 68:175190a03cbd | 84 | } | 
| fy14lkaa | 68:175190a03cbd | 85 | |
| fy14lkaa | 68:175190a03cbd | 86 | // update bullet parameters | 
| fy14lkaa | 68:175190a03cbd | 87 | _bullet.set_velocity(bullet_velocity); | 
| fy14lkaa | 68:175190a03cbd | 88 | _bullet.set_pos(bullet_pos); | 
| fy14lkaa | 66:0123bd3dcbc6 | 89 | } | 
| fy14lkaa | 54:095eae44895b | 90 | |
| fy14lkaa | 70:7f0b330ff40b | 91 | /*void SpaceInvadersEngine::check_space_ship_collisions(Gamepad &pad){ | 
| fy14lkaa | 69:19f1ad7b548e | 92 | // read current bullet attributes | 
| fy14lkaa | 69:19f1ad7b548e | 93 | Vector2D bullet_pos = _bullet.get_pos(); | 
| fy14lkaa | 69:19f1ad7b548e | 94 | Vector2D bullet_velocity = _bullet.get_velocity(); | 
| fy14lkaa | 70:7f0b330ff40b | 95 | } | 
| fy14lkaa | 70:7f0b330ff40b | 96 | */ | 
| fy14lkaa | 70:7f0b330ff40b | 97 | void SpaceInvadersEngin::check_goal(Gamepad &pad) | 
| fy14lkaa | 70:7f0b330ff40b | 98 | { | 
| fy14lkaa | 70:7f0b330ff40b | 99 | Vector2D bullet_pos = _bullet.get_pos(); | 
| fy14lkaa | 70:7f0b330ff40b | 100 | // spaceship has scored | 
| fy14lkaa | 70:7f0b330ff40b | 101 | if (bullet_pos.x + _bullet_size < 0) { | 
| fy14lkaa | 70:7f0b330ff40b | 102 | _sace_ship.add_score(); | 
| fy14lkaa | 70:7f0b330ff40b | 103 | _bullet.init(_bullet_size,_speed); | 
| fy14lkaa | 70:7f0b330ff40b | 104 | pad.tone(1500.0,0.5); | 
| fy14lkaa | 70:7f0b330ff40b | 105 | pad.leds_on(); | 
| fy14lkaa | 70:7f0b330ff40b | 106 | wait(0.5); | 
| fy14lkaa | 70:7f0b330ff40b | 107 | pad.leds_off(); | 
| fy14lkaa | 70:7f0b330ff40b | 108 | } | 
| fy14lkaa | 56:c8fc0a1f4132 | 109 | |
| fy14lkaa | 71:1f6b665fc047 | 110 | void SpaceInvadersEngin::print_scores(N5110 &lcd) { | 
| fy14lkaa | 71:1f6b665fc047 | 111 | // get scores from the spaceship | 
| fy14lkaa | 71:1f6b665fc047 | 112 | int space_ship_score = _space_ship.get_score(); | 
| fy14lkaa | 57:45c5de9cefdf | 113 | |
| fy14lkaa | 68:175190a03cbd | 114 | |
| fy14lkaa | 71:1f6b665fc047 | 115 | // print to LCD i | 
| fy14lkaa | 71:1f6b665fc047 | 116 | char buffer1[14]; | 
| fy14lkaa | 71:1f6b665fc047 | 117 | sprintf(buffer1,"%2d",space_ship_score); | 
| fy14lkaa | 71:1f6b665fc047 | 118 | lcd.printString(buffer1,WIDTH/2 - 20,1); // font is 8 wide, so leave 4 pixel gape from middle assuming two digits | 
| fy14lkaa | 68:175190a03cbd | 119 | |
| fy14lkaa | 71:1f6b665fc047 | 120 | } | 
| fy14lkaa | 71:1f6b665fc047 | 121 | |
| fy14lkaa | 71:1f6b665fc047 | 122 |