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
SpaceInvaderEngine/SpaceInvaderEngine.cpp
- Committer:
- josh_ohara
- Date:
- 2020-05-14
- Revision:
- 24:ff5af5a013b5
- Parent:
- 23:aa86e32b6a74
- Child:
- 27:eb755a345b1f
File content as of revision 24:ff5af5a013b5:
#include "SpaceInvaderEngine.h" SpaceInvaderEngine::SpaceInvaderEngine() { } SpaceInvaderEngine::~SpaceInvaderEngine() { } void SpaceInvaderEngine::init(int ship_height, int ship_width, int alien_size, int no_aliens, int armada_column_size, int armada_row_size, int cover_y, int cover1_x, int cover2_x, int cover3_x, int no_rocks, int level) { S1_height = ship_height; S1_width = ship_width; A1_size = alien_size; Vector2D ship_pos = S1.get_position(); S1x = ship_pos.x; S1y = ship_pos.y; N = no_aliens; CS = armada_column_size; RS = armada_row_size; Cy = cover_y; C1x = cover1_x; C2x = cover2_x; C3x = cover3_x; NR = no_rocks; A1.init(N,A1_size,CS,RS,level); S1.init(S1_height,S1_width); C1.init(C1x,Cy,NR); C2.init(C2x,Cy,NR); C3.init(C3x,Cy,NR); } void SpaceInvaderEngine::read_input(Gamepad &pad) { D = pad.get_direction(); Mag = pad.get_mag(); } void SpaceInvaderEngine::render(N5110 &lcd) { S1.render(lcd); A1.render(lcd); C1.render(lcd); C2.render(lcd); C3.render(lcd); } void SpaceInvaderEngine::update(Gamepad &pad, N5110 &lcd, int counter, int level) { get_ship_pos(); S1.update(D,Mag,pad,lcd,counter); A1.update(pad, counter, level); ship_bullet_alien_collision(pad, lcd); ship_bullet_cover1_collision(pad, lcd); ship_bullet_cover2_collision(pad, lcd); ship_bullet_cover3_collision(pad, lcd); alien_bullet_ship_collision(pad, lcd); alien_bullet_cover1_collision(pad, lcd); alien_bullet_cover2_collision(pad, lcd); alien_bullet_cover3_collision(pad, lcd); alien_ship_collision(pad, lcd); alien_cover1_collision(pad, lcd); alien_cover2_collision(pad, lcd); alien_cover3_collision(pad, lcd); } void SpaceInvaderEngine::get_ship_pos() { Vector2D ship_pos = S1.get_position(); S1x = ship_pos.x; S1y = ship_pos.y; } void SpaceInvaderEngine::ship_bullet_alien_collision(Gamepad &pad, N5110 &lcd){ vector<Alien> alien_vector = A1.get_vector(); vector<Bullet> bullet_vector = S1.get_bullet_vector(); for(int i = 0; i < alien_vector.size(); i++){ Vector2D alien_position = alien_vector[i].get_position(); int alien_x = alien_position.x; int alien_y = alien_position.y; bool alien_life = alien_vector[i].get_life(); for (int n = 0; n < bullet_vector.size(); n++){ Vector2D bullet_position = bullet_vector[n].get_position(); int bullet_x = bullet_position.x; int bullet_y = bullet_position.y; bool hit = bullet_vector[n].get_hit(); if((alien_x <= bullet_x) && (bullet_x <= alien_x + A1_size - 1)&& (alien_y <= bullet_y) && (bullet_y <= alien_y + A1_size - 1)&& (hit==false)&& (alien_life == true)) { bool T = true; bool F = false; A1.set_life(i,F); S1.set_bullet_hit(n,T); pad.tone(600.0,0.2); } } } } void SpaceInvaderEngine::ship_bullet_cover1_collision(Gamepad &pad, N5110 &lcd){ vector<Rock> cover_vector_1 = C1.get_vector(); vector<Bullet> bullet_vector = S1.get_bullet_vector(); for(int i = 0; i < cover_vector_1.size(); i++){ Vector2D rock_position = cover_vector_1[i].get_position(); int rock_x = rock_position.x; int rock_y = rock_position.y; bool rock_life = cover_vector_1[i].get_life(); for (int n = 0; n < bullet_vector.size(); n++){ Vector2D bullet_position = bullet_vector[n].get_position(); int bullet_x = bullet_position.x; int bullet_y = bullet_position.y; bool hit = bullet_vector[n].get_hit(); if((rock_x <= bullet_x) && (bullet_x <= rock_x + 2)&& (rock_y <= bullet_y) && (bullet_y <= rock_y + 2)&& (hit==false)&& (rock_life==true)){ bool T = true; bool F = false; C1.set_life(i,F); S1.set_bullet_hit(n,T); } } } } void SpaceInvaderEngine::ship_bullet_cover2_collision(Gamepad &pad, N5110 &lcd){ vector<Rock> cover_vector_2 = C2.get_vector(); vector<Bullet> bullet_vector = S1.get_bullet_vector(); for(int i = 0; i < cover_vector_2.size(); i++){ Vector2D rock_position = cover_vector_2[i].get_position(); int rock_x = rock_position.x; int rock_y = rock_position.y; bool rock_life = cover_vector_2[i].get_life(); for (int n = 0; n < bullet_vector.size(); n++){ Vector2D bullet_position = bullet_vector[n].get_position(); int bullet_x = bullet_position.x; int bullet_y = bullet_position.y; bool hit = bullet_vector[n].get_hit(); if((rock_x <= bullet_x) && (bullet_x <= rock_x + 2)&& (rock_y <= bullet_y) && (bullet_y <= rock_y + 2)&& (hit==false)&& (rock_life==true)){ bool T = true; bool F = false; C2.set_life(i,F); S1.set_bullet_hit(n,T); } } } } void SpaceInvaderEngine::ship_bullet_cover3_collision(Gamepad &pad, N5110 &lcd){ vector<Rock> cover_vector_3 = C3.get_vector(); vector<Bullet> bullet_vector = S1.get_bullet_vector(); for(int i = 0; i < cover_vector_3.size(); i++){ Vector2D rock_position = cover_vector_3[i].get_position(); int rock_x = rock_position.x; int rock_y = rock_position.y; bool rock_life = cover_vector_3[i].get_life(); for (int n = 0; n < bullet_vector.size(); n++){ Vector2D bullet_position = bullet_vector[n].get_position(); int bullet_x = bullet_position.x; int bullet_y = bullet_position.y; bool hit = bullet_vector[n].get_hit(); if((rock_x <= bullet_x) && (bullet_x <= rock_x + 2)&& (rock_y <= bullet_y) && (bullet_y <= rock_y + 2)&& (hit==false)&& (rock_life==true)){ bool T = true; bool F = false; C3.set_life(i,F); S1.set_bullet_hit(n,T); } } } } void SpaceInvaderEngine::alien_bullet_ship_collision(Gamepad &pad, N5110 &lcd){ Vector2D ship_position = S1.get_position(); int ship_x = ship_position.x; int ship_y = ship_position.y; vector<Alien> alien_vector = A1.get_vector(); for(int i = 0; i < alien_vector.size(); i++){ vector<AlienBullet> alien_bullets = A1.get_alien_bullet_vector(i); for(int n = 0; n < alien_bullets.size(); n++){ Vector2D bullet_position = alien_bullets[n].get_position(); bool hit = alien_bullets[n].get_hit(); int bullet_x = bullet_position.x; int bullet_y = bullet_position.y; if((ship_x <= bullet_x) && (bullet_x <= ship_x + 8)&& (ship_y <= bullet_y) && (bullet_y <= ship_y + 2)&& (hit==false)){ S1.set_life(false); alien_bullets[n].set_hit(true); } } } } void SpaceInvaderEngine::alien_bullet_cover3_collision(Gamepad &pad, N5110 &lcd){ vector<Rock> cover_vector_3 = C3.get_vector(); vector<Alien> alien_vector = A1.get_vector(); for(int q = 0; q < cover_vector_3.size(); q++){ Vector2D rock_position = cover_vector_3[q].get_position(); int rock_x = rock_position.x; int rock_y = rock_position.y; bool rock_life = cover_vector_3[q].get_life(); for(int i = 0; i < alien_vector.size(); i++){ vector<AlienBullet> alien_bullets = A1.get_alien_bullet_vector(i); for(int n = 0; n < alien_bullets.size(); n++){ Vector2D bullet_position = alien_bullets[n].get_position(); bool hit = alien_bullets[n].get_hit(); int bullet_x = bullet_position.x; int bullet_y = bullet_position.y; if((rock_x <= bullet_x) && (bullet_x <= rock_x + 2)&& (rock_y <= bullet_y) && (bullet_y <= rock_y + 2)&& (hit==false)&& (rock_life==true)){ C3.set_life(q,false); A1.set_bullet_hit(i,n,true); } } } } } void SpaceInvaderEngine::alien_bullet_cover1_collision(Gamepad &pad, N5110 &lcd){ vector<Rock> cover_vector_1 = C1.get_vector(); vector<Alien> alien_vector = A1.get_vector(); for(int q = 0; q < cover_vector_1.size(); q++){ Vector2D rock_position = cover_vector_1[q].get_position(); int rock_x = rock_position.x; int rock_y = rock_position.y; bool rock_life = cover_vector_1[q].get_life(); for(int i = 0; i < alien_vector.size(); i++){ vector<AlienBullet> alien_bullets = A1.get_alien_bullet_vector(i); for(int n = 0; n < alien_bullets.size(); n++){ Vector2D bullet_position = alien_bullets[n].get_position(); bool hit = alien_bullets[n].get_hit(); int bullet_x = bullet_position.x; int bullet_y = bullet_position.y; if((rock_x <= bullet_x) && (bullet_x <= rock_x + 2)&& (rock_y <= bullet_y) && (bullet_y <= rock_y + 2)&& (hit==false)&& (rock_life==true)){ C1.set_life(q,false); A1.set_bullet_hit(i,n,true); } } } } } void SpaceInvaderEngine::alien_bullet_cover2_collision(Gamepad &pad, N5110 &lcd){ vector<Rock> cover_vector_2 = C2.get_vector(); vector<Alien> alien_vector = A1.get_vector(); for(int q = 0; q < cover_vector_2.size(); q++){ Vector2D rock_position = cover_vector_2[q].get_position(); int rock_x = rock_position.x; int rock_y = rock_position.y; bool rock_life = cover_vector_2[q].get_life(); for(int i = 0; i < alien_vector.size(); i++){ vector<AlienBullet> alien_bullets = A1.get_alien_bullet_vector(i); for(int n = 0; n < alien_bullets.size(); n++){ Vector2D bullet_position = alien_bullets[n].get_position(); bool hit = alien_bullets[n].get_hit(); int bullet_x = bullet_position.x; int bullet_y = bullet_position.y; if((rock_x <= bullet_x) && (bullet_x <= rock_x + 2)&& (rock_y <= bullet_y) && (bullet_y <= rock_y + 2)&& (hit==false)&& (rock_life==true)){ C2.set_life(q,false); A1.set_bullet_hit(i,n,true); } } } } } void SpaceInvaderEngine::alien_ship_collision(Gamepad &pad, N5110 &lcd){ Vector2D ship_position = S1.get_position(); int ship_x = ship_position.x; int ship_y = ship_position.y; vector<Alien> alien_vector = A1.get_vector(); for(int i = 0; i < alien_vector.size(); i++){ Vector2D alien_position = alien_vector[i].get_position(); int alien_x = alien_position.x; int alien_y = alien_position.y; for(int q = 0; q < 4; q++){ for(int n = 0; n < 4; n++){ if((ship_x - 1 < alien_x + q) && (ship_x + 9 > alien_x + q)&& (ship_y - 1 < alien_y + n)&& (S1.get_life()==true)&& (A1.get_life(i)==true)){ S1.set_life(false); A1.set_life(i,false); } } } } } void SpaceInvaderEngine::alien_cover1_collision(Gamepad &pad, N5110 &lcd){ vector<Alien> alien_vector = A1.get_vector(); vector<Rock> cover1 = C1.get_vector(); for(int i = 0; i < alien_vector.size(); i++){ Vector2D alien_position = alien_vector[i].get_position(); int alien_x = alien_position.x; int alien_y = alien_position.y; for(int p = 0; p < cover1.size(); p++){ Vector2D rock_position = cover1[p].get_position(); int rock_x = rock_position.x; int rock_y = rock_position.y; for(int q = 0; q < 4; q++){ for(int s = 0; s < 4; s++){ if((rock_x < alien_x + q) && (rock_x + 2 > alien_x + q)&& (rock_y < alien_y + s)&& (rock_y + 2 > alien_y + s)&& (C1.get_life(p)==true)&& (A1.get_life(i)==true)){ C1.set_life(p,false); A1.set_life(i,false); } } } } } } void SpaceInvaderEngine::alien_cover2_collision(Gamepad &pad, N5110 &lcd){ vector<Alien> alien_vector = A1.get_vector(); vector<Rock> cover2 = C2.get_vector(); for(int i = 0; i < alien_vector.size(); i++){ Vector2D alien_position = alien_vector[i].get_position(); int alien_x = alien_position.x; int alien_y = alien_position.y; for(int p = 0; p < cover2.size(); p++){ Vector2D rock_position = cover2[p].get_position(); int rock_x = rock_position.x; int rock_y = rock_position.y; for(int q = 0; q < 4; q++){ for(int s = 0; s < 4; s++){ if((rock_x < alien_x + q) && (rock_x + 2 > alien_x + q)&& (rock_y < alien_y + s)&& (rock_y + 2 > alien_y + s)&& (C2.get_life(p)==true)&& (A1.get_life(i)==true)){ C2.set_life(p,false); A1.set_life(i,false); } } } } } } void SpaceInvaderEngine::alien_cover3_collision(Gamepad &pad, N5110 &lcd){ vector<Alien> alien_vector = A1.get_vector(); vector<Rock> cover3 = C3.get_vector(); for(int i = 0; i < alien_vector.size(); i++){ Vector2D alien_position = alien_vector[i].get_position(); int alien_x = alien_position.x; int alien_y = alien_position.y; for(int p = 0; p < cover3.size(); p++){ Vector2D rock_position = cover3[p].get_position(); int rock_x = rock_position.x; int rock_y = rock_position.y; for(int q = 0; q < 4; q++){ for(int s = 0; s < 4; s++){ if((rock_x < alien_x + q) && (rock_x + 2 > alien_x + q)&& (rock_y < alien_y + s)&& (rock_y + 2 > alien_y + s)&& (C3.get_life(p)==true)&& (A1.get_life(i)==true)){ C3.set_life(p,false); A1.set_life(i,false); } } } } } } bool SpaceInvaderEngine::get_armada_life(){ return A1.get_armada_life(); } bool SpaceInvaderEngine::get_ship_life(){ return S1.get_life(); } void SpaceInvaderEngine::kill_all(){ vector<Rock> cover_vector_1 = C1.get_vector(); vector<Rock> cover_vector_2 = C2.get_vector(); vector<Rock> cover_vector_3 = C3.get_vector(); for(int i = 0; i < cover_vector_1.size(); i++){ C1.set_life(i,false); C2.set_life(i,false); C3.set_life(i,false); } vector<Bullet> ship_bullet_vector = S1.get_bullet_vector(); for(int n = 0; n < ship_bullet_vector.size(); n++){ S1.set_bullet_hit(n,true); } vector<Alien> alien_vector = A1.get_vector(); for(int p = 0; p < alien_vector.size(); p++){ vector<AlienBullet> alien_bullets = A1.get_alien_bullet_vector(p); for(int q = 0; q < alien_bullets.size(); q++){ A1.set_bullet_hit(p,q,true); } } S1.set_life(false); }