Ben Evans / Mbed 2 deprecated Defender_Game

Dependencies:   mbed

Committer:
evanso
Date:
Fri May 15 12:05:33 2020 +0000
Revision:
34:85ccc16f24d2
Parent:
33:7fedd8029473
Child:
35:577c65bf914e
Added when aliens collide with people, the people are abducted to the top of the screen. Then that alien tracks the spaceship and moves towards it rather than randomly moving.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
evanso 33:7fedd8029473 1 #include "People.h"
evanso 33:7fedd8029473 2
evanso 33:7fedd8029473 3 const int k_people_sprite[5][4] = {
evanso 33:7fedd8029473 4 { 0,1,1,0,},
evanso 33:7fedd8029473 5 { 1,1,1,1,},
evanso 33:7fedd8029473 6 { 1,1,1,1,},
evanso 33:7fedd8029473 7 { 0,1,1,0,},
evanso 33:7fedd8029473 8 { 0,1,1,0,},
evanso 33:7fedd8029473 9 };
evanso 33:7fedd8029473 10
evanso 33:7fedd8029473 11 People::People() {
evanso 33:7fedd8029473 12
evanso 33:7fedd8029473 13 }
evanso 33:7fedd8029473 14
evanso 33:7fedd8029473 15 People::~People() {
evanso 33:7fedd8029473 16
evanso 33:7fedd8029473 17 }
evanso 33:7fedd8029473 18
evanso 33:7fedd8029473 19 void People::init(Gamepad &pad, int position_x_start) {
evanso 33:7fedd8029473 20 position_x_ = position_x_start;
evanso 33:7fedd8029473 21 position_y_ = 43;
evanso 34:85ccc16f24d2 22 alien_collision_flag = false;
evanso 34:85ccc16f24d2 23 people_move_counter_ = 0;
evanso 34:85ccc16f24d2 24 random_move_counter_ = 0;
evanso 33:7fedd8029473 25 }
evanso 33:7fedd8029473 26
evanso 34:85ccc16f24d2 27 void People::draw_people(N5110 &lcd, Direction d_, int map_length_,
evanso 34:85ccc16f24d2 28 int position_x_map_){
evanso 34:85ccc16f24d2 29 position_x_ += calc_sprite_movement(d_);
evanso 34:85ccc16f24d2 30 lcd.drawSprite(position_x_, position_y_, 5, 4, (int*)k_people_sprite);
evanso 34:85ccc16f24d2 31 off_screen_x_y_checker(map_length_, position_x_map_);
evanso 34:85ccc16f24d2 32
evanso 34:85ccc16f24d2 33 // move alien to top of screen if collision with alien
evanso 34:85ccc16f24d2 34 if(alien_collision_flag){
evanso 34:85ccc16f24d2 35 //people moves on its own but at half speed of spaceship
evanso 34:85ccc16f24d2 36 if (people_move_counter_%2 == 0) {
evanso 34:85ccc16f24d2 37 if (random_move_counter_ == 0){
evanso 34:85ccc16f24d2 38 //move alien to top of screen
evanso 34:85ccc16f24d2 39 random_direction_ = 6;
evanso 34:85ccc16f24d2 40 random_move_counter_ = 43;
evanso 34:85ccc16f24d2 41 }
evanso 34:85ccc16f24d2 42 move_direction();
evanso 34:85ccc16f24d2 43 off_screen_x_y_checker(map_length_, position_x_map_);
evanso 34:85ccc16f24d2 44 random_move_counter_ --;
evanso 34:85ccc16f24d2 45 }
evanso 33:7fedd8029473 46 }
evanso 34:85ccc16f24d2 47 people_move_counter_++;
evanso 34:85ccc16f24d2 48 }
evanso 34:85ccc16f24d2 49
evanso 34:85ccc16f24d2 50 void People::off_screen_x_y_checker(int map_length_, int position_x_map_){
evanso 34:85ccc16f24d2 51 // loops the people round if it reaches the end of the map
evanso 34:85ccc16f24d2 52 if(position_x_ <= (84 - map_length_)){
evanso 34:85ccc16f24d2 53 position_x_ += map_length_;
evanso 34:85ccc16f24d2 54 }else if (position_x_ >= map_length_){
evanso 34:85ccc16f24d2 55 position_x_ -= map_length_ + 10;
evanso 34:85ccc16f24d2 56 }
evanso 34:85ccc16f24d2 57 }
evanso 34:85ccc16f24d2 58
evanso 34:85ccc16f24d2 59 bool People::check_alien_collision(Alien alien) {
evanso 34:85ccc16f24d2 60 bool collision = false;
evanso 34:85ccc16f24d2 61 Vector2D alien_pos = alien.get_pos();
evanso 34:85ccc16f24d2 62
evanso 34:85ccc16f24d2 63 // checks collision of top left corner of alien with people
evanso 34:85ccc16f24d2 64 if(alien_pos.x >= position_x_ &&
evanso 34:85ccc16f24d2 65 alien_pos.x <= (position_x_ + 4) &&
evanso 34:85ccc16f24d2 66 position_y_ <= alien_pos.y &&
evanso 34:85ccc16f24d2 67 alien_pos.y <= (position_y_ + 5)){
evanso 34:85ccc16f24d2 68 collision = true;
evanso 34:85ccc16f24d2 69 alien_collision_flag = true;
evanso 34:85ccc16f24d2 70
evanso 34:85ccc16f24d2 71 // checks collision of top right corner of alien with people
evanso 34:85ccc16f24d2 72 }else if((alien_pos.x + 7) >= position_x_ &&
evanso 34:85ccc16f24d2 73 (alien_pos.x + 7) <= (position_x_ + 4) &&
evanso 34:85ccc16f24d2 74 position_y_ <= alien_pos.y &&
evanso 34:85ccc16f24d2 75 alien_pos.y <= (position_y_ + 5)){
evanso 34:85ccc16f24d2 76 collision = true;
evanso 34:85ccc16f24d2 77 alien_collision_flag = true;
evanso 34:85ccc16f24d2 78
evanso 34:85ccc16f24d2 79 // checks collision of bottom left corner of alien with people
evanso 34:85ccc16f24d2 80 }else if(alien_pos.x >= position_x_ &&
evanso 34:85ccc16f24d2 81 alien_pos.x <= (position_x_ + 4) &&
evanso 34:85ccc16f24d2 82 position_y_ <= (alien_pos.y + 6)&&
evanso 34:85ccc16f24d2 83 (alien_pos.y + 6) <= (position_y_ + 5)){
evanso 34:85ccc16f24d2 84 collision = true;
evanso 34:85ccc16f24d2 85 alien_collision_flag = true;
evanso 34:85ccc16f24d2 86
evanso 34:85ccc16f24d2 87 // checks collision of bottom right corner of alien with people
evanso 34:85ccc16f24d2 88 }else if((alien_pos.x + 7) >= position_x_ &&
evanso 34:85ccc16f24d2 89 (alien_pos.x + 7) <= (position_x_ + 4) &&
evanso 34:85ccc16f24d2 90 position_y_ <= (alien_pos.y + 6) &&
evanso 34:85ccc16f24d2 91 (alien_pos.y + 6) <= (position_y_ + 5)){
evanso 34:85ccc16f24d2 92 collision = true;
evanso 34:85ccc16f24d2 93 alien_collision_flag = true;
evanso 34:85ccc16f24d2 94 }
evanso 34:85ccc16f24d2 95 return collision;
evanso 34:85ccc16f24d2 96 }
evanso 34:85ccc16f24d2 97
evanso 34:85ccc16f24d2 98 bool People::get_alien_collision_flag(){
evanso 34:85ccc16f24d2 99 return alien_collision_flag;
evanso 34:85ccc16f24d2 100 }