Dependencies:   mbed

Committer:
HenryWTriff
Date:
Wed Apr 29 10:53:21 2020 +0000
Revision:
25:31761087a83f
Parent:
23:920faed43d55
Child:
26:f1d3b7e31091
Added Horizon effect to graphics and fixed clipping out of bounds glitch;

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