Game

Dependencies:   mbed

Committer:
HenryWTriff
Date:
Sat Mar 28 15:02:43 2020 +0000
Revision:
23:920faed43d55
Parent:
16:17f91f51358f
Child:
25:31761087a83f
Adding struct documentation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HenryWTriff 2:d08b6a1eaf2b 1 /*
eencae 0:b7f1f47bb26a 2 ELEC2645 Embedded Systems Project
eencae 0:b7f1f47bb26a 3 School of Electronic & Electrical Engineering
eencae 0:b7f1f47bb26a 4 University of Leeds
eencae 0:b7f1f47bb26a 5 2019/20
eencae 0:b7f1f47bb26a 6
HenryWTriff 1:8c335af04679 7 Name: Henry Triff
HenryWTriff 1:8c335af04679 8 Username: el18ht
HenryWTriff 1:8c335af04679 9 Student ID Number: 201224295
HenryWTriff 1:8c335af04679 10 Date: 10/02/2020
HenryWTriff 11:7b12992156de 11
HenryWTriff 11:7b12992156de 12 INFO
HenryWTriff 11:7b12992156de 13 > For a complete guide on how maps are drawn see Maps.h
HenryWTriff 11:7b12992156de 14 > Before using ghost mode, ensure that you format the SD card in settings as this will cause the game to freeze
HenryWTriff 11:7b12992156de 15 > When playing, i would recommend starting with the Basic car. The Alien space ship is REALLY REALLY hard to control
HenryWTriff 11:7b12992156de 16 because it is so fast
eencae 0:b7f1f47bb26a 17 */
eencae 0:b7f1f47bb26a 18
HenryWTriff 2:d08b6a1eaf2b 19 //LIBRARIES
eencae 0:b7f1f47bb26a 20 #include "mbed.h"
eencae 0:b7f1f47bb26a 21 #include "Gamepad.h"
eencae 0:b7f1f47bb26a 22 #include "N5110.h"
HenryWTriff 6:5f76dd718dc3 23 #include "FXOS8700CQ.h"
HenryWTriff 10:29126a41b1da 24 #include "SDFileSystem.h"
HenryWTriff 2:d08b6a1eaf2b 25 #include "Graphics.h"
HenryWTriff 6:5f76dd718dc3 26 #include "Mechanics.h"
HenryWTriff 6:5f76dd718dc3 27 #include "Menu.h"
HenryWTriff 6:5f76dd718dc3 28 #include "LEDs.h"
HenryWTriff 6:5f76dd718dc3 29 #include "Ghost.h"
HenryWTriff 6:5f76dd718dc3 30 #include <string>
eencae 0:b7f1f47bb26a 31
HenryWTriff 2:d08b6a1eaf2b 32 //OBJECTS
HenryWTriff 11:7b12992156de 33 Gamepad Device; //Controller
HenryWTriff 11:7b12992156de 34 N5110 LCD; //LCD
HenryWTriff 11:7b12992156de 35 FXOS8700CQ Gyro(I2C_SDA,I2C_SCL); //Gyroscope
HenryWTriff 11:7b12992156de 36 SDFileSystem SD(PTE3, PTE1, PTE2, PTE4, "sd"); //SD card (For recording ghost data)
HenryWTriff 11:7b12992156de 37 Graphics Graphics; //Graphics Class
HenryWTriff 11:7b12992156de 38 Mechanics Mechanics; //Mechanics Class
HenryWTriff 11:7b12992156de 39 Menu Menu; //Menu Class
HenryWTriff 11:7b12992156de 40 LEDs LEDs; //LEDs Class
HenryWTriff 11:7b12992156de 41 Ghost Ghost; //Ghost Class (For racing against a previos version of you)
HenryWTriff 3:ceed6d026b8b 42
HenryWTriff 3:ceed6d026b8b 43 #ifndef STRUCTS
HenryWTriff 3:ceed6d026b8b 44 #define STRUCTS
HenryWTriff 3:ceed6d026b8b 45
HenryWTriff 3:ceed6d026b8b 46 //STRUCTS
HenryWTriff 3:ceed6d026b8b 47 struct Point_2D {
HenryWTriff 23:920faed43d55 48 float x;
HenryWTriff 3:ceed6d026b8b 49 float y;
HenryWTriff 3:ceed6d026b8b 50 };
HenryWTriff 23:920faed43d55 51
HenryWTriff 3:ceed6d026b8b 52 struct Line_2D {
HenryWTriff 3:ceed6d026b8b 53 Point_2D from;
HenryWTriff 3:ceed6d026b8b 54 Point_2D to;
HenryWTriff 3:ceed6d026b8b 55 };
HenryWTriff 3:ceed6d026b8b 56
HenryWTriff 5:2d9f3c36bcb9 57 struct Square_2D {
HenryWTriff 5:2d9f3c36bcb9 58 Point_2D TL;
HenryWTriff 5:2d9f3c36bcb9 59 Point_2D BR;
HenryWTriff 5:2d9f3c36bcb9 60 };
HenryWTriff 5:2d9f3c36bcb9 61 struct Triangle_2D {
HenryWTriff 5:2d9f3c36bcb9 62 Point_2D TL;
HenryWTriff 5:2d9f3c36bcb9 63 Point_2D BR;
HenryWTriff 11:7b12992156de 64 int Type; //The direction of the hypoentuse on the right angled triangle ( 1 = Top right, 2 = Bottom right, 3 = Bottom left, 4 = Top Left )
HenryWTriff 5:2d9f3c36bcb9 65 };
HenryWTriff 5:2d9f3c36bcb9 66
HenryWTriff 3:ceed6d026b8b 67 struct Map_Data {
HenryWTriff 11:7b12992156de 68 //Information about the number of elements in each array
HenryWTriff 3:ceed6d026b8b 69 int number_of_track_lines;
HenryWTriff 3:ceed6d026b8b 70 int number_of_dotted_lines;
HenryWTriff 3:ceed6d026b8b 71 int number_of_flags;
HenryWTriff 5:2d9f3c36bcb9 72 int number_of_walls;
HenryWTriff 5:2d9f3c36bcb9 73 int number_of_off_track_squares;
HenryWTriff 5:2d9f3c36bcb9 74 int number_of_off_track_triangles;
HenryWTriff 5:2d9f3c36bcb9 75 int number_of_out_of_bounds_squares;
HenryWTriff 5:2d9f3c36bcb9 76 int number_of_out_of_bounds_triangles;
HenryWTriff 5:2d9f3c36bcb9 77 int number_of_gates;
HenryWTriff 6:5f76dd718dc3 78 int number_of_boost_plates;
HenryWTriff 6:5f76dd718dc3 79 };
HenryWTriff 6:5f76dd718dc3 80
HenryWTriff 6:5f76dd718dc3 81 struct Time {
HenryWTriff 6:5f76dd718dc3 82 int mins;
HenryWTriff 6:5f76dd718dc3 83 int secs;
HenryWTriff 6:5f76dd718dc3 84 int milis;
HenryWTriff 6:5f76dd718dc3 85 };
HenryWTriff 6:5f76dd718dc3 86
HenryWTriff 6:5f76dd718dc3 87 struct Gyro_Data {
HenryWTriff 6:5f76dd718dc3 88 float ax;
HenryWTriff 6:5f76dd718dc3 89 float ay;
HenryWTriff 6:5f76dd718dc3 90 float az;
HenryWTriff 6:5f76dd718dc3 91 float mx;
HenryWTriff 6:5f76dd718dc3 92 float my;
HenryWTriff 6:5f76dd718dc3 93 float mz;
HenryWTriff 3:ceed6d026b8b 94 };
HenryWTriff 3:ceed6d026b8b 95
HenryWTriff 3:ceed6d026b8b 96 #endif
eencae 0:b7f1f47bb26a 97
HenryWTriff 8:4503c92acaf6 98 #include "Maps.h"
HenryWTriff 6:5f76dd718dc3 99
HenryWTriff 2:d08b6a1eaf2b 100 //GLOBAL VARIABLES
HenryWTriff 10:29126a41b1da 101 #ifndef ENUMS
HenryWTriff 10:29126a41b1da 102 #define ENUMS
HenryWTriff 11:7b12992156de 103 enum track {Small, Medium, Large}; //Track Names
HenryWTriff 11:7b12992156de 104 enum cars {Basic, Offroad, Drifter, Sportscar, Racecar, Stupid}; //Car Names (Stupid is now the alien space ship)
HenryWTriff 10:29126a41b1da 105 #endif
HenryWTriff 7:2ce6e90f6d47 106
HenryWTriff 2:d08b6a1eaf2b 107 //Transform
HenryWTriff 11:7b12992156de 108 int angle = 0; //The angle of roation of the track
HenryWTriff 11:7b12992156de 109 Point_2D translation = {0,0}; //The translationof the track
HenryWTriff 11:7b12992156de 110 float squish = 0.15; //The amount of squish of the track
HenryWTriff 2:d08b6a1eaf2b 111
HenryWTriff 3:ceed6d026b8b 112 //Vehicle parameters
HenryWTriff 11:7b12992156de 113 float speed; //Current speed (Rate of change of translation [see above] )
HenryWTriff 11:7b12992156de 114 float max_speed; //Max speed the car can go
HenryWTriff 11:7b12992156de 115 int handling; //The maximum rate of change of angle of the track per frame
HenryWTriff 11:7b12992156de 116 float off_track_speed; //Maximum off track speed
HenryWTriff 7:2ce6e90f6d47 117 float acceleration;
HenryWTriff 7:2ce6e90f6d47 118 float deceleration;
HenryWTriff 11:7b12992156de 119 int car_model = Basic;
HenryWTriff 3:ceed6d026b8b 120
HenryWTriff 5:2d9f3c36bcb9 121 //Mechanics
HenryWTriff 11:7b12992156de 122 int lap_gate = 0; //The initial lap gate
HenryWTriff 11:7b12992156de 123 int laps = 1; //The current lap number
HenryWTriff 11:7b12992156de 124 int number_of_laps = 3; //The number of laps
HenryWTriff 11:7b12992156de 125 int race_time = 0; //The number of frames elapsed so far since the start of the race
HenryWTriff 9:7b1093d3f03a 126 bool ghost_enable = false;
HenryWTriff 5:2d9f3c36bcb9 127
HenryWTriff 11:7b12992156de 128 //Game Settings
HenryWTriff 11:7b12992156de 129 int game_fps = 50; //Frame rate
HenryWTriff 11:7b12992156de 130 bool leds = true; //Turning the LEDs on / off (Useful for people with epilepsy as they flash quickly)
HenryWTriff 11:7b12992156de 131 bool gyro_enabled = false; //Gyro steering option
eencae 0:b7f1f47bb26a 132
eencae 0:b7f1f47bb26a 133 int main()
eencae 0:b7f1f47bb26a 134 {
HenryWTriff 11:7b12992156de 135 LCD.init(); //Initialising the LCD
HenryWTriff 11:7b12992156de 136 Device.init(); //Initialising the Gamepad
HenryWTriff 11:7b12992156de 137 Gyro.init(); //Initialising the gyro
HenryWTriff 11:7b12992156de 138 Graphics.Change_Contrast(LCD,Device); //Adust Contrast to the amount on the pot
HenryWTriff 6:5f76dd718dc3 139
HenryWTriff 10:29126a41b1da 140 //START LOGO
HenryWTriff 10:29126a41b1da 141 Graphics.Draw_Logo(LCD);
HenryWTriff 10:29126a41b1da 142
HenryWTriff 6:5f76dd718dc3 143 //MENU
HenryWTriff 7:2ce6e90f6d47 144 do {
HenryWTriff 11:7b12992156de 145 while(Menu.Main_Menu(LCD, Device) == true) {
HenryWTriff 11:7b12992156de 146 Ghost.SD_init(SD); //Format SD Card
HenryWTriff 7:2ce6e90f6d47 147 }
HenryWTriff 11:7b12992156de 148 } while(Menu.Game_Setup(LCD, Device) == false);
HenryWTriff 7:2ce6e90f6d47 149
HenryWTriff 11:7b12992156de 150 //RETRIEVING STATIC VARIABLES FROM MENU CLASS
HenryWTriff 11:7b12992156de 151 car_model = Menu.Get_Car();
HenryWTriff 11:7b12992156de 152 number_of_laps = Menu.Get_Laps();
HenryWTriff 11:7b12992156de 153 ghost_enable = Menu.Get_Mode();
HenryWTriff 11:7b12992156de 154 leds = Menu.Get_Setting_LED();
HenryWTriff 11:7b12992156de 155 gyro_enabled = Menu.Get_Setting_Gyro();
HenryWTriff 7:2ce6e90f6d47 156
HenryWTriff 7:2ce6e90f6d47 157 //CAR PARAMETERS SETUP
HenryWTriff 7:2ce6e90f6d47 158 max_speed = Mechanics.Get_Max_Speed(car_model);
HenryWTriff 7:2ce6e90f6d47 159 acceleration = Mechanics.Get_Acceleration(car_model);
HenryWTriff 7:2ce6e90f6d47 160 deceleration = Mechanics.Get_Deceleration(car_model);
HenryWTriff 7:2ce6e90f6d47 161 off_track_speed = Mechanics.Get_Off_Road_Speed(car_model);
HenryWTriff 7:2ce6e90f6d47 162 handling = Mechanics.Get_Handling(car_model);
HenryWTriff 11:7b12992156de 163
HenryWTriff 11:7b12992156de 164 //printf("CAR: %i\n",car_model);
HenryWTriff 11:7b12992156de 165 //printf("LAPS: %i\n",number_of_laps);
HenryWTriff 11:7b12992156de 166 //printf("MAP: %i\n",Menu.Get_Map());
HenryWTriff 11:7b12992156de 167
HenryWTriff 11:7b12992156de 168 if(Menu.Get_Map() == Small) {
HenryWTriff 8:4503c92acaf6 169
HenryWTriff 11:7b12992156de 170 while(1) { //Main Game While loop
HenryWTriff 11:7b12992156de 171 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 11:7b12992156de 172 Ghost.SD_Read(Small, car_model, SD); //Copy the ghost data from the SD card over to the flash memory (Make take a second)
HenryWTriff 10:29126a41b1da 173 }
HenryWTriff 8:4503c92acaf6 174
HenryWTriff 8:4503c92acaf6 175 //COUNTDOWN
HenryWTriff 11:7b12992156de 176 for(int count = 3; count >= 0; count--) { //Loop for the countdown
HenryWTriff 11:7b12992156de 177 //Draw the map and the count down numbers
HenryWTriff 11:7b12992156de 178 LCD.clear();
HenryWTriff 8:4503c92acaf6 179 Graphics.Draw_Map(
HenryWTriff 8:4503c92acaf6 180 translation,
HenryWTriff 8:4503c92acaf6 181 angle,
HenryWTriff 8:4503c92acaf6 182 squish,
HenryWTriff 8:4503c92acaf6 183 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 8:4503c92acaf6 184 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 8:4503c92acaf6 185 (Line_2D *)Map_1_Walls,
HenryWTriff 8:4503c92acaf6 186 (Point_2D *)Map_1_Flags,
HenryWTriff 8:4503c92acaf6 187 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 8:4503c92acaf6 188 Map_1,
HenryWTriff 8:4503c92acaf6 189 car_model,
HenryWTriff 9:7b1093d3f03a 190 Ghost.Play(false, race_time),
HenryWTriff 8:4503c92acaf6 191 LCD
HenryWTriff 8:4503c92acaf6 192 );
HenryWTriff 8:4503c92acaf6 193 Graphics.Start_Sequence(count, LCD);
HenryWTriff 8:4503c92acaf6 194 LCD.refresh();
HenryWTriff 11:7b12992156de 195 LEDs.Start_Sequence(leds, count, Device); //Display the LED traffic light count down
HenryWTriff 8:4503c92acaf6 196 wait(1);
HenryWTriff 8:4503c92acaf6 197 }
HenryWTriff 8:4503c92acaf6 198 LEDs.Clear(Device);
HenryWTriff 8:4503c92acaf6 199
HenryWTriff 10:29126a41b1da 200
HenryWTriff 11:7b12992156de 201 while(laps <= number_of_laps) { //Loop until the number of laps have been completed
HenryWTriff 8:4503c92acaf6 202 //MECHANICS
HenryWTriff 11:7b12992156de 203 laps = Mechanics.Get_Laps(laps, Map_1_Gates, Map_1.number_of_gates, translation, lap_gate); //Get the current lap count
HenryWTriff 11:7b12992156de 204 lap_gate = Mechanics.Get_Gate(Map_1_Gates, Map_1.number_of_gates, translation, lap_gate); //Get the current lap_gate
HenryWTriff 11:7b12992156de 205 angle = Mechanics.Get_Angle(angle, handling, gyro_enabled, Gyro, Device); //Get the current angle
HenryWTriff 11:7b12992156de 206 translation = Mechanics.Get_Translation(translation, angle, speed, Map_1_Out_Of_Bounds_Square, Map_1_Out_Of_Bounds_Triangle, Map_1, Device); //Get the translation
HenryWTriff 8:4503c92acaf6 207 speed = Mechanics.Get_Speed(
HenryWTriff 8:4503c92acaf6 208 speed,
HenryWTriff 8:4503c92acaf6 209 max_speed,
HenryWTriff 8:4503c92acaf6 210 acceleration,
HenryWTriff 8:4503c92acaf6 211 deceleration,
HenryWTriff 8:4503c92acaf6 212 off_track_speed,
HenryWTriff 8:4503c92acaf6 213 translation,
HenryWTriff 8:4503c92acaf6 214 Map_1_Off_Track_Square,
HenryWTriff 8:4503c92acaf6 215 Map_1_Off_Track_Triangle,
HenryWTriff 8:4503c92acaf6 216 Map_1_Out_Of_Bounds_Square,
HenryWTriff 8:4503c92acaf6 217 Map_1_Out_Of_Bounds_Triangle,
HenryWTriff 8:4503c92acaf6 218 Map_1_Boost_Plates,
HenryWTriff 8:4503c92acaf6 219 Map_1,
HenryWTriff 8:4503c92acaf6 220 Device
HenryWTriff 11:7b12992156de 221 ); //Get the speed of the player
HenryWTriff 16:17f91f51358f 222
HenryWTriff 8:4503c92acaf6 223 //LEDS
HenryWTriff 11:7b12992156de 224 LEDs.Speed(leds, speed, max_speed, Device); //Change the LEDs depending on the speed
HenryWTriff 8:4503c92acaf6 225
HenryWTriff 8:4503c92acaf6 226 //GHOST
HenryWTriff 11:7b12992156de 227 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 11:7b12992156de 228 Ghost.Record(translation, race_time); //Record the position of the player
HenryWTriff 9:7b1093d3f03a 229 }
HenryWTriff 8:4503c92acaf6 230
HenryWTriff 8:4503c92acaf6 231 //GRAPHICS
HenryWTriff 11:7b12992156de 232 LCD.clear(); //Clear the screen buffer
HenryWTriff 11:7b12992156de 233 Graphics.Change_Contrast(LCD,Device); //Adjust the contrast
HenryWTriff 10:29126a41b1da 234 Graphics.Draw_Map(
HenryWTriff 10:29126a41b1da 235 translation,
HenryWTriff 10:29126a41b1da 236 angle,
HenryWTriff 10:29126a41b1da 237 squish,
HenryWTriff 10:29126a41b1da 238 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 10:29126a41b1da 239 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 10:29126a41b1da 240 (Line_2D *)Map_1_Walls,
HenryWTriff 10:29126a41b1da 241 (Point_2D *)Map_1_Flags,
HenryWTriff 10:29126a41b1da 242 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 10:29126a41b1da 243 Map_1,
HenryWTriff 10:29126a41b1da 244 car_model,
HenryWTriff 10:29126a41b1da 245 Ghost.Play(ghost_enable, race_time),
HenryWTriff 10:29126a41b1da 246 LCD
HenryWTriff 11:7b12992156de 247 ); //Draw the graphics
HenryWTriff 11:7b12992156de 248 Graphics.Draw_Laps(laps, LCD); //Draw the lap counter
HenryWTriff 11:7b12992156de 249 Graphics.Draw_Time(false, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the time
HenryWTriff 11:7b12992156de 250 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 251 wait((1 / float(game_fps))); //Wait for a short period of time
HenryWTriff 11:7b12992156de 252 race_time++; //Increase the race time
HenryWTriff 8:4503c92acaf6 253
HenryWTriff 8:4503c92acaf6 254 }
HenryWTriff 11:7b12992156de 255 //RACE OVER
HenryWTriff 11:7b12992156de 256 LEDs.Clear(Device); //Turn off the LEDs
HenryWTriff 7:2ce6e90f6d47 257 LCD.clear();
HenryWTriff 7:2ce6e90f6d47 258 Graphics.Draw_Map(
HenryWTriff 7:2ce6e90f6d47 259 translation,
HenryWTriff 7:2ce6e90f6d47 260 angle,
HenryWTriff 7:2ce6e90f6d47 261 squish,
HenryWTriff 7:2ce6e90f6d47 262 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 7:2ce6e90f6d47 263 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 7:2ce6e90f6d47 264 (Line_2D *)Map_1_Walls,
HenryWTriff 7:2ce6e90f6d47 265 (Point_2D *)Map_1_Flags,
HenryWTriff 7:2ce6e90f6d47 266 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 7:2ce6e90f6d47 267 Map_1,
HenryWTriff 7:2ce6e90f6d47 268 car_model,
HenryWTriff 9:7b1093d3f03a 269 Ghost.Play(false, race_time),
HenryWTriff 7:2ce6e90f6d47 270 LCD
HenryWTriff 11:7b12992156de 271 ); //Draw the graphics
HenryWTriff 11:7b12992156de 272 Graphics.Finish(LCD); //Display the finish logo
HenryWTriff 11:7b12992156de 273 Graphics.Draw_Time(true, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the race time
HenryWTriff 11:7b12992156de 274 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 275 if(ghost_enable == true) { //If ghost mode enabled
HenryWTriff 11:7b12992156de 276 Ghost.Copy(race_time, Small, car_model, SD); //Copy over the ghost data to the SD card (if race time is quicker)
HenryWTriff 10:29126a41b1da 277 }
HenryWTriff 8:4503c92acaf6 278
HenryWTriff 11:7b12992156de 279 //RESET ALL VARIABLES
HenryWTriff 8:4503c92acaf6 280 angle = 0;
HenryWTriff 8:4503c92acaf6 281 Point_2D test = {0,0};
HenryWTriff 8:4503c92acaf6 282 translation = test;
HenryWTriff 8:4503c92acaf6 283 squish = 0.15;
HenryWTriff 8:4503c92acaf6 284 speed = 0;
HenryWTriff 8:4503c92acaf6 285 max_speed = 4;
HenryWTriff 8:4503c92acaf6 286 handling = 2;
HenryWTriff 8:4503c92acaf6 287 lap_gate = 0;
HenryWTriff 8:4503c92acaf6 288 laps = 1;
HenryWTriff 8:4503c92acaf6 289 race_time = 0;
HenryWTriff 8:4503c92acaf6 290
HenryWTriff 8:4503c92acaf6 291 wait(3);
HenryWTriff 7:2ce6e90f6d47 292 }
HenryWTriff 11:7b12992156de 293 } else if(Menu.Get_Map() == Medium) {
HenryWTriff 8:4503c92acaf6 294 while(1) {
HenryWTriff 8:4503c92acaf6 295
HenryWTriff 11:7b12992156de 296 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 11:7b12992156de 297 Ghost.SD_Read(Medium, car_model, SD);//Copy the ghost data from the SD card over to the flash memory (Make take a second)
HenryWTriff 10:29126a41b1da 298 }
HenryWTriff 8:4503c92acaf6 299 //COUNTDOWN
HenryWTriff 8:4503c92acaf6 300 for(int count = 3; count >= 0; count--) {
HenryWTriff 11:7b12992156de 301 //Draw the map and the count down numbers
HenryWTriff 8:4503c92acaf6 302 LCD.clear();
HenryWTriff 8:4503c92acaf6 303 Graphics.Draw_Map(
HenryWTriff 8:4503c92acaf6 304 translation,
HenryWTriff 8:4503c92acaf6 305 angle,
HenryWTriff 8:4503c92acaf6 306 squish,
HenryWTriff 8:4503c92acaf6 307 (Line_2D *) Map_2_Track_Lines,
HenryWTriff 8:4503c92acaf6 308 (Line_2D *)Map_2_Track_Dotted_Lines,
HenryWTriff 8:4503c92acaf6 309 (Line_2D *)Map_2_Walls,
HenryWTriff 8:4503c92acaf6 310 (Point_2D *)Map_2_Flags,
HenryWTriff 8:4503c92acaf6 311 (Triangle_2D *)Map_2_Boost_Plates,
HenryWTriff 8:4503c92acaf6 312 Map_2,
HenryWTriff 8:4503c92acaf6 313 car_model,
HenryWTriff 9:7b1093d3f03a 314 Ghost.Play(false, race_time),
HenryWTriff 8:4503c92acaf6 315 LCD
HenryWTriff 8:4503c92acaf6 316 );
HenryWTriff 8:4503c92acaf6 317 Graphics.Start_Sequence(count, LCD);
HenryWTriff 11:7b12992156de 318 LEDs.Start_Sequence(leds, count, Device); //Display the LED traffic light count down
HenryWTriff 8:4503c92acaf6 319 LCD.refresh();
HenryWTriff 8:4503c92acaf6 320 wait(1);
HenryWTriff 8:4503c92acaf6 321 }
HenryWTriff 8:4503c92acaf6 322 LEDs.Clear(Device);
HenryWTriff 6:5f76dd718dc3 323
HenryWTriff 8:4503c92acaf6 324 while(laps <= number_of_laps) {
HenryWTriff 8:4503c92acaf6 325 //MECHANICS
HenryWTriff 11:7b12992156de 326 laps = Mechanics.Get_Laps(laps, Map_2_Gates, Map_2.number_of_gates, translation, lap_gate); //Get the current lap count
HenryWTriff 11:7b12992156de 327 lap_gate = Mechanics.Get_Gate(Map_2_Gates, Map_2.number_of_gates, translation, lap_gate); //Get the current lap_gate
HenryWTriff 11:7b12992156de 328 angle = Mechanics.Get_Angle(angle, handling, gyro_enabled, Gyro, Device); //Get the current angle
HenryWTriff 11:7b12992156de 329 translation = Mechanics.Get_Translation(translation, angle, speed, Map_2_Out_Of_Bounds_Square, Map_2_Out_Of_Bounds_Triangle, Map_2, Device); //Get the translation
HenryWTriff 8:4503c92acaf6 330 speed = Mechanics.Get_Speed(
HenryWTriff 8:4503c92acaf6 331 speed,
HenryWTriff 8:4503c92acaf6 332 max_speed,
HenryWTriff 8:4503c92acaf6 333 acceleration,
HenryWTriff 8:4503c92acaf6 334 deceleration,
HenryWTriff 8:4503c92acaf6 335 off_track_speed,
HenryWTriff 8:4503c92acaf6 336 translation,
HenryWTriff 8:4503c92acaf6 337 Map_2_Off_Track_Square,
HenryWTriff 8:4503c92acaf6 338 Map_2_Off_Track_Triangle,
HenryWTriff 8:4503c92acaf6 339 Map_2_Out_Of_Bounds_Square,
HenryWTriff 8:4503c92acaf6 340 Map_2_Out_Of_Bounds_Triangle,
HenryWTriff 8:4503c92acaf6 341 Map_2_Boost_Plates,
HenryWTriff 8:4503c92acaf6 342 Map_2,
HenryWTriff 8:4503c92acaf6 343 Device
HenryWTriff 11:7b12992156de 344 ); //Get the speed of the player
HenryWTriff 8:4503c92acaf6 345 //LEDS
HenryWTriff 11:7b12992156de 346 LEDs.Speed(leds, speed, max_speed, Device); //Change the LEDs depending on the speed
HenryWTriff 8:4503c92acaf6 347
HenryWTriff 8:4503c92acaf6 348 //GHOST
HenryWTriff 11:7b12992156de 349 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 11:7b12992156de 350 Ghost.Record(translation, race_time); //Record the position of the player
HenryWTriff 9:7b1093d3f03a 351 }
HenryWTriff 6:5f76dd718dc3 352
HenryWTriff 8:4503c92acaf6 353 //GRAPHICS
HenryWTriff 11:7b12992156de 354 LCD.clear(); //Clear the screen buffer
HenryWTriff 11:7b12992156de 355 Graphics.Change_Contrast(LCD,Device); //Adjust the contrast
HenryWTriff 10:29126a41b1da 356 Graphics.Draw_Map(
HenryWTriff 10:29126a41b1da 357 translation,
HenryWTriff 10:29126a41b1da 358 angle,
HenryWTriff 10:29126a41b1da 359 squish,
HenryWTriff 10:29126a41b1da 360 (Line_2D *) Map_2_Track_Lines,
HenryWTriff 10:29126a41b1da 361 (Line_2D *)Map_2_Track_Dotted_Lines,
HenryWTriff 10:29126a41b1da 362 (Line_2D *)Map_2_Walls,
HenryWTriff 10:29126a41b1da 363 (Point_2D *)Map_2_Flags,
HenryWTriff 10:29126a41b1da 364 (Triangle_2D *)Map_2_Boost_Plates,
HenryWTriff 10:29126a41b1da 365 Map_2,
HenryWTriff 10:29126a41b1da 366 car_model,
HenryWTriff 10:29126a41b1da 367 Ghost.Play(ghost_enable, race_time),
HenryWTriff 10:29126a41b1da 368 LCD
HenryWTriff 11:7b12992156de 369 ); //Draw the graphics
HenryWTriff 11:7b12992156de 370 Graphics.Draw_Laps(laps, LCD); //Draw the lap counter
HenryWTriff 11:7b12992156de 371 Graphics.Draw_Time(false, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the time
HenryWTriff 11:7b12992156de 372 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 373 wait((1 / float(game_fps))); //Wait for a short period of time
HenryWTriff 11:7b12992156de 374 race_time++; //Increase the race time
HenryWTriff 6:5f76dd718dc3 375
HenryWTriff 8:4503c92acaf6 376 }
HenryWTriff 8:4503c92acaf6 377
HenryWTriff 6:5f76dd718dc3 378
HenryWTriff 11:7b12992156de 379 LEDs.Clear(Device); //Turn off the LEDs
HenryWTriff 6:5f76dd718dc3 380 LCD.clear();
HenryWTriff 6:5f76dd718dc3 381 Graphics.Draw_Map(
HenryWTriff 6:5f76dd718dc3 382 translation,
HenryWTriff 6:5f76dd718dc3 383 angle,
HenryWTriff 6:5f76dd718dc3 384 squish,
HenryWTriff 8:4503c92acaf6 385 (Line_2D *) Map_2_Track_Lines,
HenryWTriff 8:4503c92acaf6 386 (Line_2D *)Map_2_Track_Dotted_Lines,
HenryWTriff 8:4503c92acaf6 387 (Line_2D *)Map_2_Walls,
HenryWTriff 8:4503c92acaf6 388 (Point_2D *)Map_2_Flags,
HenryWTriff 8:4503c92acaf6 389 (Triangle_2D *)Map_2_Boost_Plates,
HenryWTriff 8:4503c92acaf6 390 Map_2,
HenryWTriff 7:2ce6e90f6d47 391 car_model,
HenryWTriff 9:7b1093d3f03a 392 Ghost.Play(false, race_time),
HenryWTriff 9:7b1093d3f03a 393 LCD
HenryWTriff 11:7b12992156de 394 ); //Draw the graphics
HenryWTriff 11:7b12992156de 395 Graphics.Finish(LCD); //Display the finish logo
HenryWTriff 11:7b12992156de 396 Graphics.Draw_Time(true, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the race time
HenryWTriff 11:7b12992156de 397 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 398 if(ghost_enable == true) { //If ghost mode enabled
HenryWTriff 11:7b12992156de 399 Ghost.Copy(race_time, Medium, car_model, SD); //Copy over the ghost data to the SD card (if race time is quicker)
HenryWTriff 10:29126a41b1da 400 }
HenryWTriff 9:7b1093d3f03a 401
HenryWTriff 11:7b12992156de 402 //RESET ALL VARIABLES
HenryWTriff 9:7b1093d3f03a 403 angle = 0;
HenryWTriff 9:7b1093d3f03a 404 Point_2D test = {0,0};
HenryWTriff 9:7b1093d3f03a 405 translation = test;
HenryWTriff 9:7b1093d3f03a 406 squish = 0.15;
HenryWTriff 9:7b1093d3f03a 407 speed = 0;
HenryWTriff 9:7b1093d3f03a 408 max_speed = 4;
HenryWTriff 9:7b1093d3f03a 409 handling = 2;
HenryWTriff 9:7b1093d3f03a 410 lap_gate = 0;
HenryWTriff 9:7b1093d3f03a 411 laps = 1;
HenryWTriff 9:7b1093d3f03a 412 race_time = 0;
HenryWTriff 9:7b1093d3f03a 413
HenryWTriff 9:7b1093d3f03a 414 wait(3);
HenryWTriff 9:7b1093d3f03a 415 }
HenryWTriff 11:7b12992156de 416 } else if(Menu.Get_Map() == Large) {
HenryWTriff 9:7b1093d3f03a 417 while(1) {
HenryWTriff 9:7b1093d3f03a 418
HenryWTriff 11:7b12992156de 419 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 11:7b12992156de 420 Ghost.SD_Read(Large, car_model, SD); //Copy the ghost data from the SD card over to the flash memory (Make take a second)
HenryWTriff 10:29126a41b1da 421 }
HenryWTriff 10:29126a41b1da 422
HenryWTriff 9:7b1093d3f03a 423 //COUNTDOWN
HenryWTriff 11:7b12992156de 424 for(int count = 3; count >= 0; count--) { //Loop for the countdown
HenryWTriff 11:7b12992156de 425 //Draw the map and the count down numbers
HenryWTriff 9:7b1093d3f03a 426 LCD.clear();
HenryWTriff 9:7b1093d3f03a 427 Graphics.Draw_Map(
HenryWTriff 9:7b1093d3f03a 428 translation,
HenryWTriff 9:7b1093d3f03a 429 angle,
HenryWTriff 9:7b1093d3f03a 430 squish,
HenryWTriff 9:7b1093d3f03a 431 (Line_2D *) Map_3_Track_Lines,
HenryWTriff 9:7b1093d3f03a 432 (Line_2D *)Map_3_Track_Dotted_Lines,
HenryWTriff 9:7b1093d3f03a 433 (Line_2D *)Map_3_Walls,
HenryWTriff 9:7b1093d3f03a 434 (Point_2D *)Map_3_Flags,
HenryWTriff 9:7b1093d3f03a 435 (Triangle_2D *)Map_3_Boost_Plates,
HenryWTriff 9:7b1093d3f03a 436 Map_3,
HenryWTriff 9:7b1093d3f03a 437 car_model,
HenryWTriff 9:7b1093d3f03a 438 Ghost.Play(false, race_time),
HenryWTriff 9:7b1093d3f03a 439 LCD
HenryWTriff 9:7b1093d3f03a 440 );
HenryWTriff 9:7b1093d3f03a 441 Graphics.Start_Sequence(count, LCD);
HenryWTriff 9:7b1093d3f03a 442 LCD.refresh();
HenryWTriff 11:7b12992156de 443 LEDs.Start_Sequence(leds, count, Device); //Display the LED traffic light count down
HenryWTriff 9:7b1093d3f03a 444 wait(1);
HenryWTriff 9:7b1093d3f03a 445 }
HenryWTriff 9:7b1093d3f03a 446 LEDs.Clear(Device);
HenryWTriff 9:7b1093d3f03a 447
HenryWTriff 10:29126a41b1da 448
HenryWTriff 11:7b12992156de 449 while(laps <= number_of_laps) { //Loop until the number of laps have been completed
HenryWTriff 9:7b1093d3f03a 450 //MECHANICS
HenryWTriff 11:7b12992156de 451 laps = Mechanics.Get_Laps(laps, Map_3_Gates, Map_3.number_of_gates, translation, lap_gate); //Get the current lap count
HenryWTriff 11:7b12992156de 452 lap_gate = Mechanics.Get_Gate(Map_3_Gates, Map_3.number_of_gates, translation, lap_gate); //Get the current lap_gate
HenryWTriff 11:7b12992156de 453 angle = Mechanics.Get_Angle(angle, handling, gyro_enabled, Gyro, Device); //Get the current angle
HenryWTriff 11:7b12992156de 454 translation = Mechanics.Get_Translation(translation, angle, speed, Map_3_Out_Of_Bounds_Square, Map_3_Out_Of_Bounds_Triangle, Map_3, Device);//Get the translation
HenryWTriff 9:7b1093d3f03a 455 speed = Mechanics.Get_Speed(
HenryWTriff 9:7b1093d3f03a 456 speed,
HenryWTriff 9:7b1093d3f03a 457 max_speed,
HenryWTriff 9:7b1093d3f03a 458 acceleration,
HenryWTriff 9:7b1093d3f03a 459 deceleration,
HenryWTriff 9:7b1093d3f03a 460 off_track_speed,
HenryWTriff 9:7b1093d3f03a 461 translation,
HenryWTriff 9:7b1093d3f03a 462 Map_3_Off_Track_Square,
HenryWTriff 9:7b1093d3f03a 463 Map_3_Off_Track_Triangle,
HenryWTriff 9:7b1093d3f03a 464 Map_3_Out_Of_Bounds_Square,
HenryWTriff 9:7b1093d3f03a 465 Map_3_Out_Of_Bounds_Triangle,
HenryWTriff 9:7b1093d3f03a 466 Map_3_Boost_Plates,
HenryWTriff 9:7b1093d3f03a 467 Map_3,
HenryWTriff 9:7b1093d3f03a 468 Device
HenryWTriff 11:7b12992156de 469 );//Get the speed of the player
HenryWTriff 9:7b1093d3f03a 470
HenryWTriff 9:7b1093d3f03a 471 //LEDS
HenryWTriff 11:7b12992156de 472 LEDs.Speed(leds, speed, max_speed, Device); //Change the LEDs depending on the speed
HenryWTriff 9:7b1093d3f03a 473
HenryWTriff 9:7b1093d3f03a 474 //GHOST
HenryWTriff 11:7b12992156de 475 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 11:7b12992156de 476 Ghost.Record(translation, race_time); //Record the position of the player
HenryWTriff 9:7b1093d3f03a 477 }
HenryWTriff 9:7b1093d3f03a 478
HenryWTriff 9:7b1093d3f03a 479 //GRAPHICS
HenryWTriff 11:7b12992156de 480 LCD.clear(); //Clear the screen
HenryWTriff 11:7b12992156de 481 Graphics.Change_Contrast(LCD,Device); //Adjust the contrast
HenryWTriff 10:29126a41b1da 482 Graphics.Draw_Map(
HenryWTriff 10:29126a41b1da 483 translation,
HenryWTriff 10:29126a41b1da 484 angle,
HenryWTriff 10:29126a41b1da 485 squish,
HenryWTriff 10:29126a41b1da 486 (Line_2D *) Map_3_Track_Lines,
HenryWTriff 10:29126a41b1da 487 (Line_2D *)Map_3_Track_Dotted_Lines,
HenryWTriff 10:29126a41b1da 488 (Line_2D *)Map_3_Walls,
HenryWTriff 10:29126a41b1da 489 (Point_2D *)Map_3_Flags,
HenryWTriff 10:29126a41b1da 490 (Triangle_2D *)Map_3_Boost_Plates,
HenryWTriff 10:29126a41b1da 491 Map_3,
HenryWTriff 10:29126a41b1da 492 car_model,
HenryWTriff 10:29126a41b1da 493 Ghost.Play(ghost_enable, race_time),
HenryWTriff 10:29126a41b1da 494 LCD
HenryWTriff 11:7b12992156de 495 ); //Draw the graphics
HenryWTriff 11:7b12992156de 496 Graphics.Draw_Laps(laps, LCD); //Draw the lap counter
HenryWTriff 11:7b12992156de 497 Graphics.Draw_Time(false, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the time
HenryWTriff 11:7b12992156de 498 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 499 wait((1 / float(game_fps))); //Wait for a short period of time
HenryWTriff 11:7b12992156de 500 race_time++; //Increase the race time
HenryWTriff 9:7b1093d3f03a 501 }
HenryWTriff 11:7b12992156de 502
HenryWTriff 11:7b12992156de 503 LEDs.Clear(Device); //Turn off the LEDs
HenryWTriff 9:7b1093d3f03a 504 LCD.clear();
HenryWTriff 9:7b1093d3f03a 505 Graphics.Draw_Map(
HenryWTriff 9:7b1093d3f03a 506 translation,
HenryWTriff 9:7b1093d3f03a 507 angle,
HenryWTriff 9:7b1093d3f03a 508 squish,
HenryWTriff 9:7b1093d3f03a 509 (Line_2D *) Map_3_Track_Lines,
HenryWTriff 9:7b1093d3f03a 510 (Line_2D *)Map_3_Track_Dotted_Lines,
HenryWTriff 9:7b1093d3f03a 511 (Line_2D *)Map_3_Walls,
HenryWTriff 9:7b1093d3f03a 512 (Point_2D *)Map_3_Flags,
HenryWTriff 9:7b1093d3f03a 513 (Triangle_2D *)Map_3_Boost_Plates,
HenryWTriff 9:7b1093d3f03a 514 Map_3,
HenryWTriff 9:7b1093d3f03a 515 car_model,
HenryWTriff 9:7b1093d3f03a 516 Ghost.Play(false, race_time),
HenryWTriff 6:5f76dd718dc3 517 LCD
HenryWTriff 11:7b12992156de 518 ); //Draw the graphics
HenryWTriff 11:7b12992156de 519 Graphics.Finish(LCD); //Display the finish logo
HenryWTriff 11:7b12992156de 520 Graphics.Draw_Time(true, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the race time
HenryWTriff 11:7b12992156de 521 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 522 if(ghost_enable == true) { //If ghost mode enabled
HenryWTriff 11:7b12992156de 523 Ghost.Copy(race_time, Large, car_model, SD); //Copy over the ghost data to the SD card (if race time is quicker)
HenryWTriff 10:29126a41b1da 524 }
HenryWTriff 7:2ce6e90f6d47 525
HenryWTriff 11:7b12992156de 526 //RESET ALL VARIABLES
HenryWTriff 8:4503c92acaf6 527 angle = 0;
HenryWTriff 8:4503c92acaf6 528 Point_2D test = {0,0};
HenryWTriff 8:4503c92acaf6 529 translation = test;
HenryWTriff 8:4503c92acaf6 530 squish = 0.15;
HenryWTriff 8:4503c92acaf6 531 speed = 0;
HenryWTriff 8:4503c92acaf6 532 max_speed = 4;
HenryWTriff 8:4503c92acaf6 533 handling = 2;
HenryWTriff 8:4503c92acaf6 534 lap_gate = 0;
HenryWTriff 8:4503c92acaf6 535 laps = 1;
HenryWTriff 8:4503c92acaf6 536 race_time = 0;
HenryWTriff 6:5f76dd718dc3 537
HenryWTriff 8:4503c92acaf6 538 wait(3);
HenryWTriff 8:4503c92acaf6 539 }
HenryWTriff 2:d08b6a1eaf2b 540 }
eencae 0:b7f1f47bb26a 541 }
eencae 0:b7f1f47bb26a 542