ELEC2645 (2018/19) / Mbed 2 deprecated fy14lkaa

Dependencies:   mbed

Committer:
fy14lkaa
Date:
Sun May 05 01:27:55 2019 +0000
Revision:
92:8a1b14488ca5
Parent:
91:f9e2ff484014
change folder name of class bullet to Bullet.

Who changed what in which revision?

UserRevisionLine numberNew 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 92:8a1b14488ca5 14 Alien alien;
fy14lkaa 92:8a1b14488ca5 15 bullet bullet1;
fy14lkaa 92:8a1b14488ca5 16 space_ship space_ship1;
fy14lkaa 12:45b1249b3d9a 17
fy14lkaa 57:45c5de9cefdf 18 void SpaceInvadersEngine::init(int space_ship_width,int space_ship_height,int bullet_size, int Alien_size, int speed)
fy14lkaa 57:45c5de9cefdf 19 {
fy14lkaa 57:45c5de9cefdf 20 // initialise the game parameters
fy14lkaa 57:45c5de9cefdf 21
fy14lkaa 13:9d6ee753eca6 22 _space_ship_width= space_ship_width;
fy14lkaa 13:9d6ee753eca6 23 _space_ship_height= space_ship_height;
fy14lkaa 13:9d6ee753eca6 24 _bullet_size= bullet_size;
fy14lkaa 57:45c5de9cefdf 25 _Alien_size= Alien_size;
fy14lkaa 13:9d6ee753eca6 26 _speed= speed;
fy14lkaa 57:45c5de9cefdf 27
fy14lkaa 57:45c5de9cefdf 28
fy14lkaa 12:45b1249b3d9a 29 }
fy14lkaa 12:45b1249b3d9a 30
fy14lkaa 12:45b1249b3d9a 31 void SpaceInvadersEngine::read_input(Gamepad &pad)
fy14lkaa 12:45b1249b3d9a 32 {
fy14lkaa 12:45b1249b3d9a 33 _d = pad.get_direction();
fy14lkaa 13:9d6ee753eca6 34 _mag = pad.get_mag();
fy14lkaa 12:45b1249b3d9a 35 }
fy14lkaa 12:45b1249b3d9a 36
fy14lkaa 57:45c5de9cefdf 37 void SpaceInvadersEngine::draw(N5110 &lcd)
fy14lkaa 12:45b1249b3d9a 38 {
fy14lkaa 12:45b1249b3d9a 39 // draw the elements in the LCD buffer
fy14lkaa 12:45b1249b3d9a 40 // pitch
fy14lkaa 57:45c5de9cefdf 41
fy14lkaa 12:45b1249b3d9a 42 //score
fy14lkaa 57:45c5de9cefdf 43 print_scores(lcd);
fy14lkaa 92:8a1b14488ca5 44 alien.draw(lcd);
fy14lkaa 92:8a1b14488ca5 45 space_ship1.draw(lcd);
fy14lkaa 92:8a1b14488ca5 46 bullet1.draw(lcd);
fy14lkaa 56:c8fc0a1f4132 47 }
fy14lkaa 57:45c5de9cefdf 48
fy14lkaa 60:c5f97e0a14eb 49 void SpaceInvadersEngine::update(Gamepad &pad)
fy14lkaa 60:c5f97e0a14eb 50 {
fy14lkaa 62:0bd9b22ad5ed 51 check_goal(pad);
fy14lkaa 92:8a1b14488ca5 52 bullet1.update();
fy14lkaa 92:8a1b14488ca5 53 space_ship1.update(_d,_mag);
fy14lkaa 60:c5f97e0a14eb 54
fy14lkaa 92:8a1b14488ca5 55 alien.update();
fy14lkaa 66:0123bd3dcbc6 56
fy14lkaa 66:0123bd3dcbc6 57 check_Alien_collision(pad);
fy14lkaa 92:8a1b14488ca5 58 checkspace_ship_collisions(pad);
fy14lkaa 66:0123bd3dcbc6 59
fy14lkaa 57:45c5de9cefdf 60
fy14lkaa 66:0123bd3dcbc6 61 }
fy14lkaa 92:8a1b14488ca5 62 /*void SpaceInvadersEngine::check_Alien_collision(Gamepad &pad)
fy14lkaa 66:0123bd3dcbc6 63 {
fy14lkaa 57:45c5de9cefdf 64
fy14lkaa 66:0123bd3dcbc6 65 // read current bullet attributes
fy14lkaa 92:8a1b14488ca5 66 Vector2D bullet_pos = bullet.get_pos();
fy14lkaa 92:8a1b14488ca5 67 Vector2D bullet_velocity = bullet1.get_velocity();
fy14lkaa 66:0123bd3dcbc6 68 //check if the bullet hit the top of the alien
fy14lkaa 57:45c5de9cefdf 69
fy14lkaa 68:175190a03cbd 70 // check if the bullet hits top of the Alien
fy14lkaa 67:4299b64ad5fc 71 if (bullet_pos.y <= 1) { // 1 due to 1 pixel boundary
fy14lkaa 67:4299b64ad5fc 72 bullet_pos.y = 1; // bounce off ceiling without going off screen
fy14lkaa 67:4299b64ad5fc 73 bullet_velocity.y = -bullet_velocity.y;
fy14lkaa 67:4299b64ad5fc 74 // audio feedback
fy14lkaa 67:4299b64ad5fc 75 pad.tone(750.0,0.1);
fy14lkaa 67:4299b64ad5fc 76 }
fy14lkaa 67:4299b64ad5fc 77
fy14lkaa 68:175190a03cbd 78 // check if the bullet hits bottom of the Alien
fy14lkaa 92:8a1b14488ca5 79 else if (bullet_pos.y + bullet1_size >= (HEIGHT-1) ) { // bottom pixel is 47
fy14lkaa 68:175190a03cbd 80 // hit bottom
fy14lkaa 92:8a1b14488ca5 81 bullet_pos.y = (HEIGHT-1) - bullet1_size; // stops bullet going off screen
fy14lkaa 68:175190a03cbd 82 bullet_velocity.y = -bullet_velocity.y;
fy14lkaa 68:175190a03cbd 83 // audio feedback
fy14lkaa 68:175190a03cbd 84 pad.tone(750.0,0.1);
fy14lkaa 68:175190a03cbd 85 }
fy14lkaa 68:175190a03cbd 86
fy14lkaa 68:175190a03cbd 87 // update bullet parameters
fy14lkaa 92:8a1b14488ca5 88 bullet1.set_velocity(bullet_velocity);
fy14lkaa 92:8a1b14488ca5 89 bullet1.set_pos(bullet_pos);
fy14lkaa 66:0123bd3dcbc6 90 }
fy14lkaa 92:8a1b14488ca5 91 */
fy14lkaa 92:8a1b14488ca5 92 /*void SpaceInvadersEngine::checkspace_ship_collisions(Gamepad &pad)
fy14lkaa 92:8a1b14488ca5 93 {
fy14lkaa 92:8a1b14488ca5 94 // read current bullet attributes
fy14lkaa 92:8a1b14488ca5 95 Vector2D bullet_pos = bullet1.get_pos();
fy14lkaa 92:8a1b14488ca5 96 Vector2D bullet_velocity = bullet1.get_velocity();
fy14lkaa 54:095eae44895b 97
fy14lkaa 92:8a1b14488ca5 98
fy14lkaa 72:938d2d65199d 99 / check p1 first
fy14lkaa 92:8a1b14488ca5 100 Vector2D p1_pos = space_ship1.get_pos();
fy14lkaa 72:938d2d65199d 101
fy14lkaa 72:938d2d65199d 102 // see if bullet has hit the paddle by checking for overlaps
fy14lkaa 72:938d2d65199d 103 if (
fy14lkaa 72:938d2d65199d 104 (bullet_pos.y >= space_ship.y) && //top
fy14lkaa 72:938d2d65199d 105 (bullet_pos.y <= space_ship_pos.y + _paddle_height) && //bottom
fy14lkaa 92:8a1b14488ca5 106 (bullet_pos.x >= space_ship1x) && //left
fy14lkaa 92:8a1b14488ca5 107 (bullet_pos.x <= space_ship1x + space_ship1_width) //right
fy14lkaa 72:938d2d65199d 108 ) {
fy14lkaa 72:938d2d65199d 109 // if it has, fix position and reflect x velocity
fy14lkaa 92:8a1b14488ca5 110 bullet_pos.x = _p1x + space_ship1_width;
fy14lkaa 72:938d2d65199d 111 bullet_velocity.x = -bullet_velocity.x;
fy14lkaa 72:938d2d65199d 112 // audio feedback
fy14lkaa 72:938d2d65199d 113 pad.tone(1000.0,0.1);
fy14lkaa 72:938d2d65199d 114 }
fy14lkaa 72:938d2d65199d 115
fy14lkaa 70:7f0b330ff40b 116 }
fy14lkaa 92:8a1b14488ca5 117 */
fy14lkaa 92:8a1b14488ca5 118 /*void SpaceInvadersEngin::check_goal(Gamepad &pad)
fy14lkaa 70:7f0b330ff40b 119 {
fy14lkaa 92:8a1b14488ca5 120 Vector2D bullet_pos = bullet1.get_pos();
fy14lkaa 70:7f0b330ff40b 121 // spaceship has scored
fy14lkaa 92:8a1b14488ca5 122 if (bullet_pos.x + bullet1_size < 0) {
fy14lkaa 70:7f0b330ff40b 123 _sace_ship.add_score();
fy14lkaa 92:8a1b14488ca5 124 bullet1.init(bullet1_size,_speed);
fy14lkaa 70:7f0b330ff40b 125 pad.tone(1500.0,0.5);
fy14lkaa 70:7f0b330ff40b 126 pad.leds_on();
fy14lkaa 70:7f0b330ff40b 127 wait(0.5);
fy14lkaa 70:7f0b330ff40b 128 pad.leds_off();
fy14lkaa 70:7f0b330ff40b 129 }
fy14lkaa 56:c8fc0a1f4132 130
fy14lkaa 71:1f6b665fc047 131 void SpaceInvadersEngin::print_scores(N5110 &lcd) {
fy14lkaa 71:1f6b665fc047 132 // get scores from the spaceship
fy14lkaa 92:8a1b14488ca5 133 int space_ship_score = space_ship1.get_score();
fy14lkaa 57:45c5de9cefdf 134
fy14lkaa 68:175190a03cbd 135
fy14lkaa 71:1f6b665fc047 136 // print to LCD i
fy14lkaa 71:1f6b665fc047 137 char buffer1[14];
fy14lkaa 71:1f6b665fc047 138 sprintf(buffer1,"%2d",space_ship_score);
fy14lkaa 71:1f6b665fc047 139 lcd.printString(buffer1,WIDTH/2 - 20,1); // font is 8 wide, so leave 4 pixel gape from middle assuming two digits
fy14lkaa 68:175190a03cbd 140
fy14lkaa 71:1f6b665fc047 141 }
fy14lkaa 71:1f6b665fc047 142
fy14lkaa 92:8a1b14488ca5 143 */