ELEC2645 (2018/19) / Mbed 2 deprecated fy14lkaa

Dependencies:   mbed

Committer:
fy14lkaa
Date:
Sun Apr 28 19:44:34 2019 +0000
Revision:
91:f9e2ff484014
Parent:
72:938d2d65199d
Child:
92:8a1b14488ca5
added draw sprite to draw the alien in Alien.cpp

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 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 91:f9e2ff484014 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 72:938d2d65199d 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 72:938d2d65199d 95
fy14lkaa 72:938d2d65199d 96
fy14lkaa 72:938d2d65199d 97 / check p1 first
fy14lkaa 72:938d2d65199d 98 Vector2D p1_pos = _space_ship.get_pos();
fy14lkaa 72:938d2d65199d 99
fy14lkaa 72:938d2d65199d 100 // see if bullet has hit the paddle by checking for overlaps
fy14lkaa 72:938d2d65199d 101 if (
fy14lkaa 72:938d2d65199d 102 (bullet_pos.y >= space_ship.y) && //top
fy14lkaa 72:938d2d65199d 103 (bullet_pos.y <= space_ship_pos.y + _paddle_height) && //bottom
fy14lkaa 72:938d2d65199d 104 (bullet_pos.x >= _space_shipx) && //left
fy14lkaa 72:938d2d65199d 105 (bullet_pos.x <= _space_shipx + _space_ship_width) //right
fy14lkaa 72:938d2d65199d 106 ) {
fy14lkaa 72:938d2d65199d 107 // if it has, fix position and reflect x velocity
fy14lkaa 72:938d2d65199d 108 bullet_pos.x = _p1x + _space_ship_width;
fy14lkaa 72:938d2d65199d 109 bullet_velocity.x = -bullet_velocity.x;
fy14lkaa 72:938d2d65199d 110 // audio feedback
fy14lkaa 72:938d2d65199d 111 pad.tone(1000.0,0.1);
fy14lkaa 72:938d2d65199d 112 }
fy14lkaa 72:938d2d65199d 113
fy14lkaa 70:7f0b330ff40b 114 }
fy14lkaa 72:938d2d65199d 115
fy14lkaa 70:7f0b330ff40b 116 void SpaceInvadersEngin::check_goal(Gamepad &pad)
fy14lkaa 70:7f0b330ff40b 117 {
fy14lkaa 70:7f0b330ff40b 118 Vector2D bullet_pos = _bullet.get_pos();
fy14lkaa 70:7f0b330ff40b 119 // spaceship has scored
fy14lkaa 70:7f0b330ff40b 120 if (bullet_pos.x + _bullet_size < 0) {
fy14lkaa 70:7f0b330ff40b 121 _sace_ship.add_score();
fy14lkaa 70:7f0b330ff40b 122 _bullet.init(_bullet_size,_speed);
fy14lkaa 70:7f0b330ff40b 123 pad.tone(1500.0,0.5);
fy14lkaa 70:7f0b330ff40b 124 pad.leds_on();
fy14lkaa 70:7f0b330ff40b 125 wait(0.5);
fy14lkaa 70:7f0b330ff40b 126 pad.leds_off();
fy14lkaa 70:7f0b330ff40b 127 }
fy14lkaa 56:c8fc0a1f4132 128
fy14lkaa 71:1f6b665fc047 129 void SpaceInvadersEngin::print_scores(N5110 &lcd) {
fy14lkaa 71:1f6b665fc047 130 // get scores from the spaceship
fy14lkaa 71:1f6b665fc047 131 int space_ship_score = _space_ship.get_score();
fy14lkaa 57:45c5de9cefdf 132
fy14lkaa 68:175190a03cbd 133
fy14lkaa 71:1f6b665fc047 134 // print to LCD i
fy14lkaa 71:1f6b665fc047 135 char buffer1[14];
fy14lkaa 71:1f6b665fc047 136 sprintf(buffer1,"%2d",space_ship_score);
fy14lkaa 71:1f6b665fc047 137 lcd.printString(buffer1,WIDTH/2 - 20,1); // font is 8 wide, so leave 4 pixel gape from middle assuming two digits
fy14lkaa 68:175190a03cbd 138
fy14lkaa 71:1f6b665fc047 139 }
fy14lkaa 71:1f6b665fc047 140
fy14lkaa 71:1f6b665fc047 141