Game

Dependencies:   mbed

Committer:
HenryWTriff
Date:
Sat Mar 28 10:31:41 2020 +0000
Revision:
11:7b12992156de
Parent:
10:29126a41b1da
Child:
12:74f31212292f
Comments Added

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
HenryWTriff 11:7b12992156de 17
eencae 0:b7f1f47bb26a 18 */
eencae 0:b7f1f47bb26a 19
HenryWTriff 2:d08b6a1eaf2b 20 //LIBRARIES
eencae 0:b7f1f47bb26a 21 #include "mbed.h"
eencae 0:b7f1f47bb26a 22 #include "Gamepad.h"
eencae 0:b7f1f47bb26a 23 #include "N5110.h"
HenryWTriff 6:5f76dd718dc3 24 #include "FXOS8700CQ.h"
HenryWTriff 10:29126a41b1da 25 #include "SDFileSystem.h"
HenryWTriff 2:d08b6a1eaf2b 26 #include "Graphics.h"
HenryWTriff 6:5f76dd718dc3 27 #include "Mechanics.h"
HenryWTriff 6:5f76dd718dc3 28 #include "Menu.h"
HenryWTriff 6:5f76dd718dc3 29 #include "LEDs.h"
HenryWTriff 6:5f76dd718dc3 30 #include "Ghost.h"
HenryWTriff 6:5f76dd718dc3 31 #include <string>
eencae 0:b7f1f47bb26a 32
HenryWTriff 2:d08b6a1eaf2b 33 //OBJECTS
HenryWTriff 11:7b12992156de 34 Gamepad Device; //Controller
HenryWTriff 11:7b12992156de 35 N5110 LCD; //LCD
HenryWTriff 11:7b12992156de 36 FXOS8700CQ Gyro(I2C_SDA,I2C_SCL); //Gyroscope
HenryWTriff 11:7b12992156de 37 SDFileSystem SD(PTE3, PTE1, PTE2, PTE4, "sd"); //SD card (For recording ghost data)
HenryWTriff 11:7b12992156de 38 Graphics Graphics; //Graphics Class
HenryWTriff 11:7b12992156de 39 Mechanics Mechanics; //Mechanics Class
HenryWTriff 11:7b12992156de 40 Menu Menu; //Menu Class
HenryWTriff 11:7b12992156de 41 LEDs LEDs; //LEDs Class
HenryWTriff 11:7b12992156de 42 Ghost Ghost; //Ghost Class (For racing against a previos version of you)
HenryWTriff 3:ceed6d026b8b 43
HenryWTriff 3:ceed6d026b8b 44 #ifndef STRUCTS
HenryWTriff 3:ceed6d026b8b 45 #define STRUCTS
HenryWTriff 3:ceed6d026b8b 46
HenryWTriff 3:ceed6d026b8b 47 //STRUCTS
HenryWTriff 3:ceed6d026b8b 48 struct Point_2D {
HenryWTriff 3:ceed6d026b8b 49 float x;
HenryWTriff 3:ceed6d026b8b 50 float y;
HenryWTriff 3:ceed6d026b8b 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 11:7b12992156de 222 //translation = Mechanics.Get_Translation(translation, angle, speed, Map_1_Out_Of_Bounds_Square, Map_1_Out_Of_Bounds_Triangle, Map_1, Device);
HenryWTriff 8:4503c92acaf6 223
HenryWTriff 8:4503c92acaf6 224 //LEDS
HenryWTriff 11:7b12992156de 225 LEDs.Speed(leds, speed, max_speed, Device); //Change the LEDs depending on the speed
HenryWTriff 8:4503c92acaf6 226
HenryWTriff 8:4503c92acaf6 227 //GHOST
HenryWTriff 11:7b12992156de 228 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 11:7b12992156de 229 Ghost.Record(translation, race_time); //Record the position of the player
HenryWTriff 9:7b1093d3f03a 230 }
HenryWTriff 8:4503c92acaf6 231
HenryWTriff 8:4503c92acaf6 232 //GRAPHICS
HenryWTriff 11:7b12992156de 233 LCD.clear(); //Clear the screen buffer
HenryWTriff 11:7b12992156de 234 Graphics.Change_Contrast(LCD,Device); //Adjust the contrast
HenryWTriff 10:29126a41b1da 235 Graphics.Draw_Map(
HenryWTriff 10:29126a41b1da 236 translation,
HenryWTriff 10:29126a41b1da 237 angle,
HenryWTriff 10:29126a41b1da 238 squish,
HenryWTriff 10:29126a41b1da 239 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 10:29126a41b1da 240 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 10:29126a41b1da 241 (Line_2D *)Map_1_Walls,
HenryWTriff 10:29126a41b1da 242 (Point_2D *)Map_1_Flags,
HenryWTriff 10:29126a41b1da 243 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 10:29126a41b1da 244 Map_1,
HenryWTriff 10:29126a41b1da 245 car_model,
HenryWTriff 10:29126a41b1da 246 Ghost.Play(ghost_enable, race_time),
HenryWTriff 10:29126a41b1da 247 LCD
HenryWTriff 11:7b12992156de 248 ); //Draw the graphics
HenryWTriff 11:7b12992156de 249 Graphics.Draw_Laps(laps, LCD); //Draw the lap counter
HenryWTriff 11:7b12992156de 250 Graphics.Draw_Time(false, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the time
HenryWTriff 11:7b12992156de 251 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 252 wait((1 / float(game_fps))); //Wait for a short period of time
HenryWTriff 11:7b12992156de 253 race_time++; //Increase the race time
HenryWTriff 8:4503c92acaf6 254
HenryWTriff 8:4503c92acaf6 255 }
HenryWTriff 11:7b12992156de 256 //RACE OVER
HenryWTriff 11:7b12992156de 257 LEDs.Clear(Device); //Turn off the LEDs
HenryWTriff 7:2ce6e90f6d47 258 LCD.clear();
HenryWTriff 7:2ce6e90f6d47 259 Graphics.Draw_Map(
HenryWTriff 7:2ce6e90f6d47 260 translation,
HenryWTriff 7:2ce6e90f6d47 261 angle,
HenryWTriff 7:2ce6e90f6d47 262 squish,
HenryWTriff 7:2ce6e90f6d47 263 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 7:2ce6e90f6d47 264 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 7:2ce6e90f6d47 265 (Line_2D *)Map_1_Walls,
HenryWTriff 7:2ce6e90f6d47 266 (Point_2D *)Map_1_Flags,
HenryWTriff 7:2ce6e90f6d47 267 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 7:2ce6e90f6d47 268 Map_1,
HenryWTriff 7:2ce6e90f6d47 269 car_model,
HenryWTriff 9:7b1093d3f03a 270 Ghost.Play(false, race_time),
HenryWTriff 7:2ce6e90f6d47 271 LCD
HenryWTriff 11:7b12992156de 272 ); //Draw the graphics
HenryWTriff 11:7b12992156de 273 Graphics.Finish(LCD); //Display the finish logo
HenryWTriff 11:7b12992156de 274 Graphics.Draw_Time(true, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the race time
HenryWTriff 11:7b12992156de 275 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 276 if(ghost_enable == true) { //If ghost mode enabled
HenryWTriff 11:7b12992156de 277 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 278 }
HenryWTriff 8:4503c92acaf6 279
HenryWTriff 11:7b12992156de 280 //RESET ALL VARIABLES
HenryWTriff 8:4503c92acaf6 281 angle = 0;
HenryWTriff 8:4503c92acaf6 282 Point_2D test = {0,0};
HenryWTriff 8:4503c92acaf6 283 translation = test;
HenryWTriff 8:4503c92acaf6 284 squish = 0.15;
HenryWTriff 8:4503c92acaf6 285 speed = 0;
HenryWTriff 8:4503c92acaf6 286 max_speed = 4;
HenryWTriff 8:4503c92acaf6 287 handling = 2;
HenryWTriff 8:4503c92acaf6 288 lap_gate = 0;
HenryWTriff 8:4503c92acaf6 289 laps = 1;
HenryWTriff 8:4503c92acaf6 290 race_time = 0;
HenryWTriff 8:4503c92acaf6 291
HenryWTriff 8:4503c92acaf6 292 wait(3);
HenryWTriff 7:2ce6e90f6d47 293 }
HenryWTriff 11:7b12992156de 294 } else if(Menu.Get_Map() == Medium) {
HenryWTriff 8:4503c92acaf6 295 while(1) {
HenryWTriff 8:4503c92acaf6 296
HenryWTriff 11:7b12992156de 297 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 11:7b12992156de 298 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 299 }
HenryWTriff 8:4503c92acaf6 300 //COUNTDOWN
HenryWTriff 8:4503c92acaf6 301 for(int count = 3; count >= 0; count--) {
HenryWTriff 11:7b12992156de 302 //Draw the map and the count down numbers
HenryWTriff 8:4503c92acaf6 303 LCD.clear();
HenryWTriff 8:4503c92acaf6 304 Graphics.Draw_Map(
HenryWTriff 8:4503c92acaf6 305 translation,
HenryWTriff 8:4503c92acaf6 306 angle,
HenryWTriff 8:4503c92acaf6 307 squish,
HenryWTriff 8:4503c92acaf6 308 (Line_2D *) Map_2_Track_Lines,
HenryWTriff 8:4503c92acaf6 309 (Line_2D *)Map_2_Track_Dotted_Lines,
HenryWTriff 8:4503c92acaf6 310 (Line_2D *)Map_2_Walls,
HenryWTriff 8:4503c92acaf6 311 (Point_2D *)Map_2_Flags,
HenryWTriff 8:4503c92acaf6 312 (Triangle_2D *)Map_2_Boost_Plates,
HenryWTriff 8:4503c92acaf6 313 Map_2,
HenryWTriff 8:4503c92acaf6 314 car_model,
HenryWTriff 9:7b1093d3f03a 315 Ghost.Play(false, race_time),
HenryWTriff 8:4503c92acaf6 316 LCD
HenryWTriff 8:4503c92acaf6 317 );
HenryWTriff 8:4503c92acaf6 318 Graphics.Start_Sequence(count, LCD);
HenryWTriff 11:7b12992156de 319 LEDs.Start_Sequence(leds, count, Device); //Display the LED traffic light count down
HenryWTriff 8:4503c92acaf6 320 LCD.refresh();
HenryWTriff 8:4503c92acaf6 321 wait(1);
HenryWTriff 8:4503c92acaf6 322 }
HenryWTriff 8:4503c92acaf6 323 LEDs.Clear(Device);
HenryWTriff 6:5f76dd718dc3 324
HenryWTriff 8:4503c92acaf6 325 while(laps <= number_of_laps) {
HenryWTriff 8:4503c92acaf6 326 //MECHANICS
HenryWTriff 11:7b12992156de 327 laps = Mechanics.Get_Laps(laps, Map_2_Gates, Map_2.number_of_gates, translation, lap_gate); //Get the current lap count
HenryWTriff 11:7b12992156de 328 lap_gate = Mechanics.Get_Gate(Map_2_Gates, Map_2.number_of_gates, translation, lap_gate); //Get the current lap_gate
HenryWTriff 11:7b12992156de 329 angle = Mechanics.Get_Angle(angle, handling, gyro_enabled, Gyro, Device); //Get the current angle
HenryWTriff 11:7b12992156de 330 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 331 speed = Mechanics.Get_Speed(
HenryWTriff 8:4503c92acaf6 332 speed,
HenryWTriff 8:4503c92acaf6 333 max_speed,
HenryWTriff 8:4503c92acaf6 334 acceleration,
HenryWTriff 8:4503c92acaf6 335 deceleration,
HenryWTriff 8:4503c92acaf6 336 off_track_speed,
HenryWTriff 8:4503c92acaf6 337 translation,
HenryWTriff 8:4503c92acaf6 338 Map_2_Off_Track_Square,
HenryWTriff 8:4503c92acaf6 339 Map_2_Off_Track_Triangle,
HenryWTriff 8:4503c92acaf6 340 Map_2_Out_Of_Bounds_Square,
HenryWTriff 8:4503c92acaf6 341 Map_2_Out_Of_Bounds_Triangle,
HenryWTriff 8:4503c92acaf6 342 Map_2_Boost_Plates,
HenryWTriff 8:4503c92acaf6 343 Map_2,
HenryWTriff 8:4503c92acaf6 344 Device
HenryWTriff 11:7b12992156de 345 ); //Get the speed of the player
HenryWTriff 8:4503c92acaf6 346 //LEDS
HenryWTriff 11:7b12992156de 347 LEDs.Speed(leds, speed, max_speed, Device); //Change the LEDs depending on the speed
HenryWTriff 8:4503c92acaf6 348
HenryWTriff 8:4503c92acaf6 349 //GHOST
HenryWTriff 11:7b12992156de 350 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 11:7b12992156de 351 Ghost.Record(translation, race_time); //Record the position of the player
HenryWTriff 9:7b1093d3f03a 352 }
HenryWTriff 6:5f76dd718dc3 353
HenryWTriff 8:4503c92acaf6 354 //GRAPHICS
HenryWTriff 11:7b12992156de 355 LCD.clear(); //Clear the screen buffer
HenryWTriff 11:7b12992156de 356 Graphics.Change_Contrast(LCD,Device); //Adjust the contrast
HenryWTriff 10:29126a41b1da 357 Graphics.Draw_Map(
HenryWTriff 10:29126a41b1da 358 translation,
HenryWTriff 10:29126a41b1da 359 angle,
HenryWTriff 10:29126a41b1da 360 squish,
HenryWTriff 10:29126a41b1da 361 (Line_2D *) Map_2_Track_Lines,
HenryWTriff 10:29126a41b1da 362 (Line_2D *)Map_2_Track_Dotted_Lines,
HenryWTriff 10:29126a41b1da 363 (Line_2D *)Map_2_Walls,
HenryWTriff 10:29126a41b1da 364 (Point_2D *)Map_2_Flags,
HenryWTriff 10:29126a41b1da 365 (Triangle_2D *)Map_2_Boost_Plates,
HenryWTriff 10:29126a41b1da 366 Map_2,
HenryWTriff 10:29126a41b1da 367 car_model,
HenryWTriff 10:29126a41b1da 368 Ghost.Play(ghost_enable, race_time),
HenryWTriff 10:29126a41b1da 369 LCD
HenryWTriff 11:7b12992156de 370 ); //Draw the graphics
HenryWTriff 11:7b12992156de 371 Graphics.Draw_Laps(laps, LCD); //Draw the lap counter
HenryWTriff 11:7b12992156de 372 Graphics.Draw_Time(false, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the time
HenryWTriff 11:7b12992156de 373 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 374 wait((1 / float(game_fps))); //Wait for a short period of time
HenryWTriff 11:7b12992156de 375 race_time++; //Increase the race time
HenryWTriff 6:5f76dd718dc3 376
HenryWTriff 8:4503c92acaf6 377 }
HenryWTriff 8:4503c92acaf6 378
HenryWTriff 6:5f76dd718dc3 379
HenryWTriff 11:7b12992156de 380 LEDs.Clear(Device); //Turn off the LEDs
HenryWTriff 6:5f76dd718dc3 381 LCD.clear();
HenryWTriff 6:5f76dd718dc3 382 Graphics.Draw_Map(
HenryWTriff 6:5f76dd718dc3 383 translation,
HenryWTriff 6:5f76dd718dc3 384 angle,
HenryWTriff 6:5f76dd718dc3 385 squish,
HenryWTriff 8:4503c92acaf6 386 (Line_2D *) Map_2_Track_Lines,
HenryWTriff 8:4503c92acaf6 387 (Line_2D *)Map_2_Track_Dotted_Lines,
HenryWTriff 8:4503c92acaf6 388 (Line_2D *)Map_2_Walls,
HenryWTriff 8:4503c92acaf6 389 (Point_2D *)Map_2_Flags,
HenryWTriff 8:4503c92acaf6 390 (Triangle_2D *)Map_2_Boost_Plates,
HenryWTriff 8:4503c92acaf6 391 Map_2,
HenryWTriff 7:2ce6e90f6d47 392 car_model,
HenryWTriff 9:7b1093d3f03a 393 Ghost.Play(false, race_time),
HenryWTriff 9:7b1093d3f03a 394 LCD
HenryWTriff 11:7b12992156de 395 ); //Draw the graphics
HenryWTriff 11:7b12992156de 396 Graphics.Finish(LCD); //Display the finish logo
HenryWTriff 11:7b12992156de 397 Graphics.Draw_Time(true, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the race time
HenryWTriff 11:7b12992156de 398 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 399 if(ghost_enable == true) { //If ghost mode enabled
HenryWTriff 11:7b12992156de 400 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 401 }
HenryWTriff 9:7b1093d3f03a 402
HenryWTriff 11:7b12992156de 403 //RESET ALL VARIABLES
HenryWTriff 9:7b1093d3f03a 404 angle = 0;
HenryWTriff 9:7b1093d3f03a 405 Point_2D test = {0,0};
HenryWTriff 9:7b1093d3f03a 406 translation = test;
HenryWTriff 9:7b1093d3f03a 407 squish = 0.15;
HenryWTriff 9:7b1093d3f03a 408 speed = 0;
HenryWTriff 9:7b1093d3f03a 409 max_speed = 4;
HenryWTriff 9:7b1093d3f03a 410 handling = 2;
HenryWTriff 9:7b1093d3f03a 411 lap_gate = 0;
HenryWTriff 9:7b1093d3f03a 412 laps = 1;
HenryWTriff 9:7b1093d3f03a 413 race_time = 0;
HenryWTriff 9:7b1093d3f03a 414
HenryWTriff 9:7b1093d3f03a 415 wait(3);
HenryWTriff 9:7b1093d3f03a 416 }
HenryWTriff 11:7b12992156de 417 } else if(Menu.Get_Map() == Large) {
HenryWTriff 9:7b1093d3f03a 418 while(1) {
HenryWTriff 9:7b1093d3f03a 419
HenryWTriff 11:7b12992156de 420 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 11:7b12992156de 421 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 422 }
HenryWTriff 10:29126a41b1da 423
HenryWTriff 9:7b1093d3f03a 424 //COUNTDOWN
HenryWTriff 11:7b12992156de 425 for(int count = 3; count >= 0; count--) { //Loop for the countdown
HenryWTriff 11:7b12992156de 426 //Draw the map and the count down numbers
HenryWTriff 9:7b1093d3f03a 427 LCD.clear();
HenryWTriff 9:7b1093d3f03a 428 Graphics.Draw_Map(
HenryWTriff 9:7b1093d3f03a 429 translation,
HenryWTriff 9:7b1093d3f03a 430 angle,
HenryWTriff 9:7b1093d3f03a 431 squish,
HenryWTriff 9:7b1093d3f03a 432 (Line_2D *) Map_3_Track_Lines,
HenryWTriff 9:7b1093d3f03a 433 (Line_2D *)Map_3_Track_Dotted_Lines,
HenryWTriff 9:7b1093d3f03a 434 (Line_2D *)Map_3_Walls,
HenryWTriff 9:7b1093d3f03a 435 (Point_2D *)Map_3_Flags,
HenryWTriff 9:7b1093d3f03a 436 (Triangle_2D *)Map_3_Boost_Plates,
HenryWTriff 9:7b1093d3f03a 437 Map_3,
HenryWTriff 9:7b1093d3f03a 438 car_model,
HenryWTriff 9:7b1093d3f03a 439 Ghost.Play(false, race_time),
HenryWTriff 9:7b1093d3f03a 440 LCD
HenryWTriff 9:7b1093d3f03a 441 );
HenryWTriff 9:7b1093d3f03a 442 Graphics.Start_Sequence(count, LCD);
HenryWTriff 9:7b1093d3f03a 443 LCD.refresh();
HenryWTriff 11:7b12992156de 444 LEDs.Start_Sequence(leds, count, Device); //Display the LED traffic light count down
HenryWTriff 9:7b1093d3f03a 445 wait(1);
HenryWTriff 9:7b1093d3f03a 446 }
HenryWTriff 9:7b1093d3f03a 447 LEDs.Clear(Device);
HenryWTriff 9:7b1093d3f03a 448
HenryWTriff 10:29126a41b1da 449
HenryWTriff 11:7b12992156de 450 while(laps <= number_of_laps) { //Loop until the number of laps have been completed
HenryWTriff 9:7b1093d3f03a 451 //MECHANICS
HenryWTriff 11:7b12992156de 452 laps = Mechanics.Get_Laps(laps, Map_3_Gates, Map_3.number_of_gates, translation, lap_gate); //Get the current lap count
HenryWTriff 11:7b12992156de 453 lap_gate = Mechanics.Get_Gate(Map_3_Gates, Map_3.number_of_gates, translation, lap_gate); //Get the current lap_gate
HenryWTriff 11:7b12992156de 454 angle = Mechanics.Get_Angle(angle, handling, gyro_enabled, Gyro, Device); //Get the current angle
HenryWTriff 11:7b12992156de 455 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 456 speed = Mechanics.Get_Speed(
HenryWTriff 9:7b1093d3f03a 457 speed,
HenryWTriff 9:7b1093d3f03a 458 max_speed,
HenryWTriff 9:7b1093d3f03a 459 acceleration,
HenryWTriff 9:7b1093d3f03a 460 deceleration,
HenryWTriff 9:7b1093d3f03a 461 off_track_speed,
HenryWTriff 9:7b1093d3f03a 462 translation,
HenryWTriff 9:7b1093d3f03a 463 Map_3_Off_Track_Square,
HenryWTriff 9:7b1093d3f03a 464 Map_3_Off_Track_Triangle,
HenryWTriff 9:7b1093d3f03a 465 Map_3_Out_Of_Bounds_Square,
HenryWTriff 9:7b1093d3f03a 466 Map_3_Out_Of_Bounds_Triangle,
HenryWTriff 9:7b1093d3f03a 467 Map_3_Boost_Plates,
HenryWTriff 9:7b1093d3f03a 468 Map_3,
HenryWTriff 9:7b1093d3f03a 469 Device
HenryWTriff 11:7b12992156de 470 );//Get the speed of the player
HenryWTriff 9:7b1093d3f03a 471
HenryWTriff 9:7b1093d3f03a 472 //LEDS
HenryWTriff 11:7b12992156de 473 LEDs.Speed(leds, speed, max_speed, Device); //Change the LEDs depending on the speed
HenryWTriff 9:7b1093d3f03a 474
HenryWTriff 9:7b1093d3f03a 475 //GHOST
HenryWTriff 11:7b12992156de 476 if(ghost_enable == true) { //If ghost mode is enabled
HenryWTriff 11:7b12992156de 477 Ghost.Record(translation, race_time); //Record the position of the player
HenryWTriff 9:7b1093d3f03a 478 }
HenryWTriff 9:7b1093d3f03a 479
HenryWTriff 9:7b1093d3f03a 480 //GRAPHICS
HenryWTriff 11:7b12992156de 481 LCD.clear(); //Clear the screen
HenryWTriff 11:7b12992156de 482 Graphics.Change_Contrast(LCD,Device); //Adjust the contrast
HenryWTriff 10:29126a41b1da 483 Graphics.Draw_Map(
HenryWTriff 10:29126a41b1da 484 translation,
HenryWTriff 10:29126a41b1da 485 angle,
HenryWTriff 10:29126a41b1da 486 squish,
HenryWTriff 10:29126a41b1da 487 (Line_2D *) Map_3_Track_Lines,
HenryWTriff 10:29126a41b1da 488 (Line_2D *)Map_3_Track_Dotted_Lines,
HenryWTriff 10:29126a41b1da 489 (Line_2D *)Map_3_Walls,
HenryWTriff 10:29126a41b1da 490 (Point_2D *)Map_3_Flags,
HenryWTriff 10:29126a41b1da 491 (Triangle_2D *)Map_3_Boost_Plates,
HenryWTriff 10:29126a41b1da 492 Map_3,
HenryWTriff 10:29126a41b1da 493 car_model,
HenryWTriff 10:29126a41b1da 494 Ghost.Play(ghost_enable, race_time),
HenryWTriff 10:29126a41b1da 495 LCD
HenryWTriff 11:7b12992156de 496 ); //Draw the graphics
HenryWTriff 11:7b12992156de 497 Graphics.Draw_Laps(laps, LCD); //Draw the lap counter
HenryWTriff 11:7b12992156de 498 Graphics.Draw_Time(false, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the time
HenryWTriff 11:7b12992156de 499 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 500 wait((1 / float(game_fps))); //Wait for a short period of time
HenryWTriff 11:7b12992156de 501 race_time++; //Increase the race time
HenryWTriff 9:7b1093d3f03a 502 }
HenryWTriff 11:7b12992156de 503
HenryWTriff 11:7b12992156de 504 LEDs.Clear(Device); //Turn off the LEDs
HenryWTriff 9:7b1093d3f03a 505 LCD.clear();
HenryWTriff 9:7b1093d3f03a 506 Graphics.Draw_Map(
HenryWTriff 9:7b1093d3f03a 507 translation,
HenryWTriff 9:7b1093d3f03a 508 angle,
HenryWTriff 9:7b1093d3f03a 509 squish,
HenryWTriff 9:7b1093d3f03a 510 (Line_2D *) Map_3_Track_Lines,
HenryWTriff 9:7b1093d3f03a 511 (Line_2D *)Map_3_Track_Dotted_Lines,
HenryWTriff 9:7b1093d3f03a 512 (Line_2D *)Map_3_Walls,
HenryWTriff 9:7b1093d3f03a 513 (Point_2D *)Map_3_Flags,
HenryWTriff 9:7b1093d3f03a 514 (Triangle_2D *)Map_3_Boost_Plates,
HenryWTriff 9:7b1093d3f03a 515 Map_3,
HenryWTriff 9:7b1093d3f03a 516 car_model,
HenryWTriff 9:7b1093d3f03a 517 Ghost.Play(false, race_time),
HenryWTriff 6:5f76dd718dc3 518 LCD
HenryWTriff 11:7b12992156de 519 ); //Draw the graphics
HenryWTriff 11:7b12992156de 520 Graphics.Finish(LCD); //Display the finish logo
HenryWTriff 11:7b12992156de 521 Graphics.Draw_Time(true, Mechanics.Convert_To_Time(game_fps, race_time), LCD); //Draw the race time
HenryWTriff 11:7b12992156de 522 LCD.refresh(); //Refresh the display
HenryWTriff 11:7b12992156de 523 if(ghost_enable == true) { //If ghost mode enabled
HenryWTriff 11:7b12992156de 524 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 525 }
HenryWTriff 7:2ce6e90f6d47 526
HenryWTriff 11:7b12992156de 527 //RESET ALL VARIABLES
HenryWTriff 8:4503c92acaf6 528 angle = 0;
HenryWTriff 8:4503c92acaf6 529 Point_2D test = {0,0};
HenryWTriff 8:4503c92acaf6 530 translation = test;
HenryWTriff 8:4503c92acaf6 531 squish = 0.15;
HenryWTriff 8:4503c92acaf6 532 speed = 0;
HenryWTriff 8:4503c92acaf6 533 max_speed = 4;
HenryWTriff 8:4503c92acaf6 534 handling = 2;
HenryWTriff 8:4503c92acaf6 535 lap_gate = 0;
HenryWTriff 8:4503c92acaf6 536 laps = 1;
HenryWTriff 8:4503c92acaf6 537 race_time = 0;
HenryWTriff 6:5f76dd718dc3 538
HenryWTriff 8:4503c92acaf6 539 wait(3);
HenryWTriff 8:4503c92acaf6 540 }
HenryWTriff 2:d08b6a1eaf2b 541 }
eencae 0:b7f1f47bb26a 542 }
eencae 0:b7f1f47bb26a 543