Ben Evans / Mbed 2 deprecated Defender_Game

Dependencies:   mbed

Committer:
evanso
Date:
Sun Apr 26 17:08:10 2020 +0000
Revision:
13:12276eed13ac
Parent:
11:ab578a151f67
Child:
14:7419c680656f
Changed spaceship unit test code so it now done properly and doesn't require my input. Changed where objects are defined to reduce the number of arguments that need passing when a function is called. Edited gamepad code to properly add ADC pin.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
evanso 6:12e8433382b3 1 #include "Map.h"
evanso 11:ab578a151f67 2
evanso 9:1ddb8dc93e48 3 #define MAP_TERRAIN_Y_POSITION 42
evanso 11:ab578a151f67 4 #define MAP_TERRAIN_X_POSITION -84
evanso 11:ab578a151f67 5 #define MAP_TERRAIN_X_LENGTH 0
evanso 11:ab578a151f67 6
evanso 6:12e8433382b3 7 Map::Map() {
evanso 6:12e8433382b3 8
evanso 6:12e8433382b3 9 }
evanso 6:12e8433382b3 10
evanso 6:12e8433382b3 11 Map::~Map() {
evanso 6:12e8433382b3 12
evanso 6:12e8433382b3 13 }
evanso 6:12e8433382b3 14
evanso 13:12276eed13ac 15 void Map::init(Gamepad &pad) {
evanso 11:ab578a151f67 16 map_length_ = MAP_TERRAIN_X_LENGTH;
evanso 11:ab578a151f67 17 position_x_map_ = MAP_TERRAIN_X_POSITION;
evanso 9:1ddb8dc93e48 18 position_y_map_ = MAP_TERRAIN_Y_POSITION;
evanso 11:ab578a151f67 19
evanso 11:ab578a151f67 20 // Initialises random arrays to make random map
evanso 13:12276eed13ac 21 get_random_arrays(pad);
evanso 6:12e8433382b3 22 }
evanso 7:0af4ced868f5 23
evanso 13:12276eed13ac 24 void Map::get_random_arrays(Gamepad &pad){
evanso 13:12276eed13ac 25 srand(pad.read_adc()*64000);
evanso 9:1ddb8dc93e48 26 for(int i = 0; i < 11; i++){
evanso 9:1ddb8dc93e48 27 rand_heights_[i]= rand() % 8 + 5;
evanso 11:ab578a151f67 28 rand_lengths_[i]= rand() % 16 + 15;
evanso 7:0af4ced868f5 29 }
evanso 9:1ddb8dc93e48 30 //printf loop to check correct random numbers are generated
evanso 11:ab578a151f67 31 //for (int i = 0; i < 11; i++){
evanso 9:1ddb8dc93e48 32 //usb.printf("map height random array = %d\n", rand_heights_[i]);
evanso 7:0af4ced868f5 33 //}
evanso 7:0af4ced868f5 34 }
evanso 7:0af4ced868f5 35
evanso 9:1ddb8dc93e48 36 void Map::draw_triangle(N5110 &lcd,int triangle_height){
evanso 7:0af4ced868f5 37 // draws triangle by drawing two lines with one line having negative gadient
evanso 9:1ddb8dc93e48 38 lcd.drawLine(position_x_map_, position_y_map_, position_x_map_ + triangle_height, position_y_map_ - triangle_height,1);
evanso 9:1ddb8dc93e48 39 lcd.drawLine(position_x_map_ + triangle_height, position_y_map_ - triangle_height,position_x_map_ + 2*triangle_height,position_y_map_,1);
evanso 11:ab578a151f67 40
evanso 11:ab578a151f67 41 // changes the position of the map next draw line starts at the end of the drawn triangle
evanso 9:1ddb8dc93e48 42 position_x_map_ = position_x_map_ + 2*triangle_height,position_y_map_;
evanso 7:0af4ced868f5 43 }
evanso 7:0af4ced868f5 44
evanso 7:0af4ced868f5 45 void Map::draw_line(N5110 &lcd,int line_length){
evanso 7:0af4ced868f5 46 lcd.drawLine(position_x_map_, position_y_map_, position_x_map_ + line_length, position_y_map_,1);
evanso 11:ab578a151f67 47
evanso 11:ab578a151f67 48 // changes the position of the map next draw triangle starts at the end of the drawn line
evanso 9:1ddb8dc93e48 49 position_x_map_ += line_length;
evanso 7:0af4ced868f5 50 }
evanso 7:0af4ced868f5 51
evanso 7:0af4ced868f5 52 void Map::draw_map(N5110 &lcd, int move_map){
evanso 8:dd1037c5435b 53 //usb.printf("position_x_map_ = %d\n", position_x_map_);
evanso 8:dd1037c5435b 54 //usb.printf("move map = %d\n", move_map);
evanso 9:1ddb8dc93e48 55
evanso 9:1ddb8dc93e48 56 reset_position_x_map_to_origonal_ = position_x_map_;
evanso 9:1ddb8dc93e48 57 int map_length_ = 0;
evanso 9:1ddb8dc93e48 58
evanso 9:1ddb8dc93e48 59 //prints main part of map
evanso 9:1ddb8dc93e48 60 for(int i = 0; i < 11; i++){
evanso 9:1ddb8dc93e48 61 draw_triangle(lcd,rand_heights_[i]);
evanso 9:1ddb8dc93e48 62 draw_line(lcd,rand_lengths_[i]);
evanso 9:1ddb8dc93e48 63 final_random_element_used_ = i;
evanso 11:ab578a151f67 64
evanso 11:ab578a151f67 65 // calculates the length of the random map produced
evanso 9:1ddb8dc93e48 66 map_length_ += rand_lengths_[i] + 2*rand_heights_[i];
evanso 11:ab578a151f67 67
evanso 11:ab578a151f67 68 // stops random maps lengths being to large only want it about 3 screen widths
evanso 11:ab578a151f67 69 if (map_length_ >252){
evanso 9:1ddb8dc93e48 70 break;
evanso 9:1ddb8dc93e48 71 }
evanso 9:1ddb8dc93e48 72 }
evanso 9:1ddb8dc93e48 73
evanso 9:1ddb8dc93e48 74 //checks is map need duplicating on forward and backwards loop and fills gap
evanso 11:ab578a151f67 75 check_duplicates_map_forward(lcd);
evanso 11:ab578a151f67 76 check_duplicates_map_backwards(lcd);
evanso 9:1ddb8dc93e48 77
evanso 11:ab578a151f67 78 // Resets postion of map and moves it
evanso 9:1ddb8dc93e48 79 position_x_map_ = reset_position_x_map_to_origonal_ + move_map;
evanso 9:1ddb8dc93e48 80
evanso 11:ab578a151f67 81 // Moves map to different persition so make it look like its looping
evanso 9:1ddb8dc93e48 82 if(position_x_map_+ map_length_ < 0){
evanso 9:1ddb8dc93e48 83 position_x_map_ = 0;
evanso 11:ab578a151f67 84 } else if(position_x_map_ > 84){
evanso 9:1ddb8dc93e48 85 position_x_map_ = 84 - map_length_;
evanso 9:1ddb8dc93e48 86 }
evanso 9:1ddb8dc93e48 87 }
evanso 9:1ddb8dc93e48 88
evanso 13:12276eed13ac 89 void Map::check_duplicates_map_forward(N5110 &lcd){
evanso 9:1ddb8dc93e48 90 // 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 91 if(reset_position_x_map_to_origonal_ + map_length_ <84 ){
evanso 9:1ddb8dc93e48 92 for(int i = 0; i < 4; i++){
evanso 9:1ddb8dc93e48 93 draw_triangle(lcd,rand_heights_[i]);
evanso 9:1ddb8dc93e48 94 draw_line(lcd,rand_lengths_[i]);
evanso 9:1ddb8dc93e48 95 }
evanso 9:1ddb8dc93e48 96 }
evanso 9:1ddb8dc93e48 97
evanso 9:1ddb8dc93e48 98 }
evanso 9:1ddb8dc93e48 99
evanso 11:ab578a151f67 100 void Map::check_duplicates_map_backwards(N5110 &lcd){
evanso 9:1ddb8dc93e48 101 // 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 102 if(reset_position_x_map_to_origonal_ > 0 ){
evanso 9:1ddb8dc93e48 103 int print_reverse_position = 0;
evanso 11:ab578a151f67 104
evanso 11:ab578a151f67 105 // prints the last 4 parts of map to fill gap
evanso 9:1ddb8dc93e48 106 for(int i = final_random_element_used_ ; i > final_random_element_used_ - 4; i--){
evanso 9:1ddb8dc93e48 107 position_x_map_ = reset_position_x_map_to_origonal_ - rand_lengths_[i] - print_reverse_position;
evanso 9:1ddb8dc93e48 108 draw_line(lcd,rand_lengths_[i]);
evanso 9:1ddb8dc93e48 109 print_reverse_position += rand_lengths_[i];
evanso 9:1ddb8dc93e48 110 position_x_map_ = reset_position_x_map_to_origonal_ - 2*rand_heights_[i] - print_reverse_position;
evanso 9:1ddb8dc93e48 111 draw_triangle(lcd,rand_heights_[i]);
evanso 9:1ddb8dc93e48 112 print_reverse_position += 2*rand_heights_[i];
evanso 9:1ddb8dc93e48 113 }
evanso 9:1ddb8dc93e48 114 }
evanso 7:0af4ced868f5 115 }
evanso 7:0af4ced868f5 116
evanso 7:0af4ced868f5 117 int Map::get_position_x_map(){
evanso 7:0af4ced868f5 118 return position_x_map_;
evanso 7:0af4ced868f5 119 }
evanso 7:0af4ced868f5 120
evanso 9:1ddb8dc93e48 121
evanso 9:1ddb8dc93e48 122
evanso 9:1ddb8dc93e48 123
evanso 9:1ddb8dc93e48 124