Ben Evans / Mbed 2 deprecated Defender_Game

Dependencies:   mbed

Committer:
evanso
Date:
Tue Apr 21 23:13:19 2020 +0000
Revision:
9:1ddb8dc93e48
Parent:
8:dd1037c5435b
Child:
11:ab578a151f67
Made the map loop back on its self when you reach the ends, therefore the map never ends

Who changed what in which revision?

UserRevisionLine numberNew contents of line
evanso 6:12e8433382b3 1 #include "Map.h"
evanso 9:1ddb8dc93e48 2 #define MAP_TERRAIN_Y_POSITION 42
evanso 9:1ddb8dc93e48 3 Serial usb(USBTX, USBRX);
evanso 6:12e8433382b3 4 Map::Map() {
evanso 6:12e8433382b3 5
evanso 6:12e8433382b3 6 }
evanso 6:12e8433382b3 7
evanso 6:12e8433382b3 8 Map::~Map() {
evanso 6:12e8433382b3 9
evanso 6:12e8433382b3 10 }
evanso 6:12e8433382b3 11
evanso 8:dd1037c5435b 12 void Map::init(AnalogIn &adc) {
evanso 9:1ddb8dc93e48 13 position_x_map_ = -84;
evanso 9:1ddb8dc93e48 14 position_y_map_ = MAP_TERRAIN_Y_POSITION;
evanso 9:1ddb8dc93e48 15 get_random_height_array(adc);
evanso 8:dd1037c5435b 16 get_random_length_array(adc);
evanso 7:0af4ced868f5 17 //usb.printf("randome seed = %f\n", rand_seed_);
evanso 9:1ddb8dc93e48 18 map_length_ = 0;
evanso 6:12e8433382b3 19 }
evanso 7:0af4ced868f5 20
evanso 9:1ddb8dc93e48 21 void Map::get_random_height_array(AnalogIn &adc){
evanso 7:0af4ced868f5 22 srand(adc.read()*64000);
evanso 9:1ddb8dc93e48 23 for(int i = 0; i < 11; i++){
evanso 9:1ddb8dc93e48 24 rand_heights_[i]= rand() % 8 + 5;
evanso 7:0af4ced868f5 25 }
evanso 9:1ddb8dc93e48 26 //printf loop to check correct random numbers are generated
evanso 7:0af4ced868f5 27 //for (int i = 0; i < 12; i++){
evanso 9:1ddb8dc93e48 28 //usb.printf("map height random array = %d\n", rand_heights_[i]);
evanso 7:0af4ced868f5 29 //}
evanso 7:0af4ced868f5 30 }
evanso 7:0af4ced868f5 31
evanso 8:dd1037c5435b 32 void Map::get_random_length_array(AnalogIn &adc){
evanso 7:0af4ced868f5 33 srand(adc.read()*64000);
evanso 9:1ddb8dc93e48 34 for(int i = 0; i < 11; i++){
evanso 7:0af4ced868f5 35 rand_lengths_[i]= rand() % 16+ 15;
evanso 7:0af4ced868f5 36 }
evanso 7:0af4ced868f5 37 }
evanso 6:12e8433382b3 38
evanso 9:1ddb8dc93e48 39 void Map::draw_triangle(N5110 &lcd,int triangle_height){
evanso 7:0af4ced868f5 40 // draws triangle by drawing two lines with one line having negative gadient
evanso 9:1ddb8dc93e48 41 lcd.drawLine(position_x_map_, position_y_map_, position_x_map_ + triangle_height, position_y_map_ - triangle_height,1);
evanso 9:1ddb8dc93e48 42 lcd.drawLine(position_x_map_ + triangle_height, position_y_map_ - triangle_height,position_x_map_ + 2*triangle_height,position_y_map_,1);
evanso 9:1ddb8dc93e48 43 position_x_map_ = position_x_map_ + 2*triangle_height,position_y_map_;
evanso 7:0af4ced868f5 44 }
evanso 7:0af4ced868f5 45
evanso 7:0af4ced868f5 46 void Map::draw_line(N5110 &lcd,int line_length){
evanso 7:0af4ced868f5 47 lcd.drawLine(position_x_map_, position_y_map_, position_x_map_ + line_length, position_y_map_,1);
evanso 9:1ddb8dc93e48 48 position_x_map_ += line_length;
evanso 7:0af4ced868f5 49 }
evanso 7:0af4ced868f5 50
evanso 7:0af4ced868f5 51 void Map::draw_map(N5110 &lcd, int move_map){
evanso 8:dd1037c5435b 52 //usb.printf("position_x_map_ = %d\n", position_x_map_);
evanso 8:dd1037c5435b 53 //usb.printf("move map = %d\n", move_map);
evanso 9:1ddb8dc93e48 54
evanso 9:1ddb8dc93e48 55 reset_position_x_map_to_origonal_ = position_x_map_;
evanso 9:1ddb8dc93e48 56 int map_length_ = 0;
evanso 9:1ddb8dc93e48 57
evanso 9:1ddb8dc93e48 58 //prints main part of map
evanso 9:1ddb8dc93e48 59 for(int i = 0; i < 11; i++){
evanso 9:1ddb8dc93e48 60 draw_triangle(lcd,rand_heights_[i]);
evanso 9:1ddb8dc93e48 61 draw_line(lcd,rand_lengths_[i]);
evanso 9:1ddb8dc93e48 62 final_random_element_used_ = i;
evanso 9:1ddb8dc93e48 63 map_length_ += rand_lengths_[i] + 2*rand_heights_[i];
evanso 9:1ddb8dc93e48 64 if (map_length_ >252){ // stops random maps lengths being to large only want it about 3 screen widths
evanso 9:1ddb8dc93e48 65 break;
evanso 9:1ddb8dc93e48 66 }
evanso 9:1ddb8dc93e48 67 }
evanso 9:1ddb8dc93e48 68
evanso 9:1ddb8dc93e48 69 //checks is map need duplicating on forward and backwards loop and fills gap
evanso 9:1ddb8dc93e48 70 check_duplicates_map_forward(lcd, move_map);
evanso 9:1ddb8dc93e48 71 check_duplicates_map_backwards(lcd, move_map);
evanso 9:1ddb8dc93e48 72
evanso 9:1ddb8dc93e48 73 position_x_map_ = reset_position_x_map_to_origonal_ + move_map;
evanso 9:1ddb8dc93e48 74
evanso 9:1ddb8dc93e48 75 // Moves map to different persiton so make it look like its looping
evanso 9:1ddb8dc93e48 76 if(position_x_map_+ map_length_ < 0){
evanso 9:1ddb8dc93e48 77 position_x_map_ = 0;
evanso 7:0af4ced868f5 78 }
evanso 9:1ddb8dc93e48 79 if(position_x_map_ > 84){
evanso 9:1ddb8dc93e48 80 position_x_map_ = 84 - map_length_;
evanso 9:1ddb8dc93e48 81 }
evanso 9:1ddb8dc93e48 82 }
evanso 9:1ddb8dc93e48 83
evanso 9:1ddb8dc93e48 84 void Map::check_duplicates_map_forward(N5110 &lcd, int move_map){
evanso 9:1ddb8dc93e48 85 // Prints 1st part of map to fill gap wear map isn't present just befor its about to loop round it's self
evanso 9:1ddb8dc93e48 86 if(reset_position_x_map_to_origonal_ + map_length_ <84 ){
evanso 9:1ddb8dc93e48 87 for(int i = 0; i < 4; i++){
evanso 9:1ddb8dc93e48 88 draw_triangle(lcd,rand_heights_[i]);
evanso 9:1ddb8dc93e48 89 draw_line(lcd,rand_lengths_[i]);
evanso 9:1ddb8dc93e48 90 }
evanso 9:1ddb8dc93e48 91 }
evanso 9:1ddb8dc93e48 92
evanso 9:1ddb8dc93e48 93 }
evanso 9:1ddb8dc93e48 94
evanso 9:1ddb8dc93e48 95 void Map::check_duplicates_map_backwards(N5110 &lcd, int move_map){
evanso 9:1ddb8dc93e48 96 // Prints last part of map to fill gap wear map isn't present just befor its about to loop round it's self
evanso 9:1ddb8dc93e48 97 if(reset_position_x_map_to_origonal_ > 0 ){
evanso 9:1ddb8dc93e48 98 int print_reverse_position = 0;
evanso 9:1ddb8dc93e48 99 // prints last 4 parts of map to fill gap
evanso 9:1ddb8dc93e48 100 for(int i = final_random_element_used_ ; i > final_random_element_used_ - 4; i--){
evanso 9:1ddb8dc93e48 101 position_x_map_ = reset_position_x_map_to_origonal_ - rand_lengths_[i] - print_reverse_position;
evanso 9:1ddb8dc93e48 102 draw_line(lcd,rand_lengths_[i]);
evanso 9:1ddb8dc93e48 103 print_reverse_position += rand_lengths_[i];
evanso 9:1ddb8dc93e48 104 position_x_map_ = reset_position_x_map_to_origonal_ - 2*rand_heights_[i] - print_reverse_position;
evanso 9:1ddb8dc93e48 105 draw_triangle(lcd,rand_heights_[i]);
evanso 9:1ddb8dc93e48 106 print_reverse_position += 2*rand_heights_[i];
evanso 9:1ddb8dc93e48 107 }
evanso 9:1ddb8dc93e48 108 }
evanso 7:0af4ced868f5 109 }
evanso 7:0af4ced868f5 110
evanso 7:0af4ced868f5 111 int Map::get_position_x_map(){
evanso 7:0af4ced868f5 112 return position_x_map_;
evanso 7:0af4ced868f5 113 }
evanso 7:0af4ced868f5 114
evanso 9:1ddb8dc93e48 115
evanso 9:1ddb8dc93e48 116
evanso 9:1ddb8dc93e48 117
evanso 9:1ddb8dc93e48 118