Game

Dependencies:   mbed

Committer:
HenryWTriff
Date:
Wed Mar 25 15:36:01 2020 +0000
Revision:
10:29126a41b1da
Parent:
9:7b1093d3f03a
Child:
11:7b12992156de
Better ghost mode using SD card

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
eencae 0:b7f1f47bb26a 11 */
eencae 0:b7f1f47bb26a 12
HenryWTriff 2:d08b6a1eaf2b 13 //LIBRARIES
eencae 0:b7f1f47bb26a 14 #include "mbed.h"
eencae 0:b7f1f47bb26a 15 #include "Gamepad.h"
eencae 0:b7f1f47bb26a 16 #include "N5110.h"
HenryWTriff 6:5f76dd718dc3 17 #include "FXOS8700CQ.h"
HenryWTriff 10:29126a41b1da 18 #include "SDFileSystem.h"
HenryWTriff 2:d08b6a1eaf2b 19 #include "Graphics.h"
HenryWTriff 6:5f76dd718dc3 20 #include "Mechanics.h"
HenryWTriff 6:5f76dd718dc3 21 #include "Menu.h"
HenryWTriff 6:5f76dd718dc3 22 #include "LEDs.h"
HenryWTriff 6:5f76dd718dc3 23 #include "Ghost.h"
HenryWTriff 6:5f76dd718dc3 24 #include <string>
eencae 0:b7f1f47bb26a 25
HenryWTriff 2:d08b6a1eaf2b 26 //OBJECTS
HenryWTriff 2:d08b6a1eaf2b 27 Gamepad Device;
HenryWTriff 2:d08b6a1eaf2b 28 N5110 LCD;
HenryWTriff 6:5f76dd718dc3 29 FXOS8700CQ Gyro(I2C_SDA,I2C_SCL);
HenryWTriff 10:29126a41b1da 30 SDFileSystem SD(PTE3, PTE1, PTE2, PTE4, "sd");
HenryWTriff 2:d08b6a1eaf2b 31 Graphics Graphics;
HenryWTriff 5:2d9f3c36bcb9 32 Mechanics Mechanics;
HenryWTriff 6:5f76dd718dc3 33 Menu Menu;
HenryWTriff 6:5f76dd718dc3 34 LEDs LEDs;
HenryWTriff 6:5f76dd718dc3 35 Ghost Ghost;
HenryWTriff 3:ceed6d026b8b 36
HenryWTriff 3:ceed6d026b8b 37 #ifndef STRUCTS
HenryWTriff 3:ceed6d026b8b 38 #define STRUCTS
HenryWTriff 3:ceed6d026b8b 39
HenryWTriff 3:ceed6d026b8b 40 //STRUCTS
HenryWTriff 3:ceed6d026b8b 41 struct Point_2D {
HenryWTriff 3:ceed6d026b8b 42 float x;
HenryWTriff 3:ceed6d026b8b 43 float y;
HenryWTriff 3:ceed6d026b8b 44 };
HenryWTriff 3:ceed6d026b8b 45 struct Line_2D {
HenryWTriff 3:ceed6d026b8b 46 Point_2D from;
HenryWTriff 3:ceed6d026b8b 47 Point_2D to;
HenryWTriff 3:ceed6d026b8b 48 };
HenryWTriff 3:ceed6d026b8b 49
HenryWTriff 5:2d9f3c36bcb9 50 struct Square_2D {
HenryWTriff 5:2d9f3c36bcb9 51 Point_2D TL;
HenryWTriff 5:2d9f3c36bcb9 52 Point_2D BR;
HenryWTriff 5:2d9f3c36bcb9 53 };
HenryWTriff 5:2d9f3c36bcb9 54 struct Triangle_2D {
HenryWTriff 5:2d9f3c36bcb9 55 Point_2D TL;
HenryWTriff 5:2d9f3c36bcb9 56 Point_2D BR;
HenryWTriff 5:2d9f3c36bcb9 57 int Type;
HenryWTriff 5:2d9f3c36bcb9 58 };
HenryWTriff 5:2d9f3c36bcb9 59
HenryWTriff 3:ceed6d026b8b 60 struct Map_Data {
HenryWTriff 3:ceed6d026b8b 61 int number_of_track_lines;
HenryWTriff 3:ceed6d026b8b 62 int number_of_dotted_lines;
HenryWTriff 3:ceed6d026b8b 63 int number_of_flags;
HenryWTriff 5:2d9f3c36bcb9 64 int number_of_walls;
HenryWTriff 5:2d9f3c36bcb9 65 int number_of_off_track_squares;
HenryWTriff 5:2d9f3c36bcb9 66 int number_of_off_track_triangles;
HenryWTriff 5:2d9f3c36bcb9 67 int number_of_out_of_bounds_squares;
HenryWTriff 5:2d9f3c36bcb9 68 int number_of_out_of_bounds_triangles;
HenryWTriff 5:2d9f3c36bcb9 69 int number_of_gates;
HenryWTriff 6:5f76dd718dc3 70 int number_of_boost_plates;
HenryWTriff 6:5f76dd718dc3 71 };
HenryWTriff 6:5f76dd718dc3 72
HenryWTriff 6:5f76dd718dc3 73 struct Time {
HenryWTriff 6:5f76dd718dc3 74 int mins;
HenryWTriff 6:5f76dd718dc3 75 int secs;
HenryWTriff 6:5f76dd718dc3 76 int milis;
HenryWTriff 6:5f76dd718dc3 77 };
HenryWTriff 6:5f76dd718dc3 78
HenryWTriff 6:5f76dd718dc3 79 struct Gyro_Data {
HenryWTriff 6:5f76dd718dc3 80 float ax;
HenryWTriff 6:5f76dd718dc3 81 float ay;
HenryWTriff 6:5f76dd718dc3 82 float az;
HenryWTriff 6:5f76dd718dc3 83 float mx;
HenryWTriff 6:5f76dd718dc3 84 float my;
HenryWTriff 6:5f76dd718dc3 85 float mz;
HenryWTriff 3:ceed6d026b8b 86 };
HenryWTriff 3:ceed6d026b8b 87
HenryWTriff 7:2ce6e90f6d47 88 struct Menu_Data {
HenryWTriff 7:2ce6e90f6d47 89 int Menu_return;
HenryWTriff 7:2ce6e90f6d47 90 bool Back;
HenryWTriff 7:2ce6e90f6d47 91 };
HenryWTriff 7:2ce6e90f6d47 92
HenryWTriff 3:ceed6d026b8b 93 #endif
eencae 0:b7f1f47bb26a 94
HenryWTriff 8:4503c92acaf6 95 #include "Maps.h"
HenryWTriff 6:5f76dd718dc3 96
HenryWTriff 2:d08b6a1eaf2b 97 //GLOBAL VARIABLES
HenryWTriff 10:29126a41b1da 98 #ifndef ENUMS
HenryWTriff 10:29126a41b1da 99 #define ENUMS
HenryWTriff 10:29126a41b1da 100 enum track {Small, Medium, Large};
HenryWTriff 7:2ce6e90f6d47 101 enum cars {Basic, Offroad, Drifter, Sportscar, Racecar, Stupid};
HenryWTriff 10:29126a41b1da 102 #endif
HenryWTriff 7:2ce6e90f6d47 103
HenryWTriff 2:d08b6a1eaf2b 104 //Transform
HenryWTriff 2:d08b6a1eaf2b 105 int angle = 0;
HenryWTriff 2:d08b6a1eaf2b 106 Point_2D translation = {0,0};
HenryWTriff 2:d08b6a1eaf2b 107 float squish = 0.15;
HenryWTriff 2:d08b6a1eaf2b 108
HenryWTriff 3:ceed6d026b8b 109 //Vehicle parameters
HenryWTriff 7:2ce6e90f6d47 110 float speed;
HenryWTriff 7:2ce6e90f6d47 111 float max_speed;
HenryWTriff 7:2ce6e90f6d47 112 int handling;
HenryWTriff 7:2ce6e90f6d47 113 float off_track_speed;
HenryWTriff 7:2ce6e90f6d47 114 float acceleration;
HenryWTriff 7:2ce6e90f6d47 115 float deceleration;
HenryWTriff 7:2ce6e90f6d47 116 int car_model = Stupid;
HenryWTriff 3:ceed6d026b8b 117
HenryWTriff 5:2d9f3c36bcb9 118 //Mechanics
HenryWTriff 5:2d9f3c36bcb9 119 int lap_gate = 0;
HenryWTriff 5:2d9f3c36bcb9 120 int laps = 1;
HenryWTriff 6:5f76dd718dc3 121 int number_of_laps = 3;
HenryWTriff 6:5f76dd718dc3 122 int race_time = 0;
HenryWTriff 9:7b1093d3f03a 123 bool ghost_enable = false;
HenryWTriff 5:2d9f3c36bcb9 124
HenryWTriff 2:d08b6a1eaf2b 125 //Game parameters
HenryWTriff 4:9f41fc1c2ad1 126 int game_fps = 50;
HenryWTriff 6:5f76dd718dc3 127 bool back_light = true;
HenryWTriff 6:5f76dd718dc3 128 bool leds = true;
HenryWTriff 10:29126a41b1da 129 bool sound = true;
HenryWTriff 6:5f76dd718dc3 130 bool gyro_enabled = false;
eencae 0:b7f1f47bb26a 131
eencae 0:b7f1f47bb26a 132 int main()
eencae 0:b7f1f47bb26a 133 {
HenryWTriff 2:d08b6a1eaf2b 134 LCD.init();
HenryWTriff 2:d08b6a1eaf2b 135 Device.init();
HenryWTriff 6:5f76dd718dc3 136 Gyro.init();
HenryWTriff 6:5f76dd718dc3 137 Graphics.Change_Contrast(LCD,Device);
HenryWTriff 6:5f76dd718dc3 138
HenryWTriff 10:29126a41b1da 139 //START LOGO
HenryWTriff 10:29126a41b1da 140 Graphics.Draw_Logo(LCD);
HenryWTriff 10:29126a41b1da 141
HenryWTriff 6:5f76dd718dc3 142 //MENU
HenryWTriff 6:5f76dd718dc3 143
HenryWTriff 7:2ce6e90f6d47 144 Menu_Data select_main_menu = {0,true};
HenryWTriff 7:2ce6e90f6d47 145 Menu_Data select_settings_menu = {0,false};
HenryWTriff 7:2ce6e90f6d47 146 Menu_Data select_game_mode = {0,true};
HenryWTriff 7:2ce6e90f6d47 147 Menu_Data select_map = {0,true};
HenryWTriff 7:2ce6e90f6d47 148 Menu_Data select_laps = {0,true};
HenryWTriff 7:2ce6e90f6d47 149 Menu_Data select_car = {0,true};
HenryWTriff 6:5f76dd718dc3 150
HenryWTriff 7:2ce6e90f6d47 151 do {
HenryWTriff 7:2ce6e90f6d47 152
HenryWTriff 7:2ce6e90f6d47 153 select_main_menu = Menu.Main_Menu(LCD, Device);
HenryWTriff 7:2ce6e90f6d47 154
HenryWTriff 7:2ce6e90f6d47 155 if(select_main_menu.Back == false && select_main_menu.Menu_return == 2) {
HenryWTriff 10:29126a41b1da 156 bool format_done = false;
HenryWTriff 10:29126a41b1da 157 if(Menu.Settings_Menu(LCD, Device) == true && format_done == false) {
HenryWTriff 10:29126a41b1da 158 if(Menu.Format_SD(LCD, Device) == true && format_done == false) {
HenryWTriff 10:29126a41b1da 159 Ghost.SD_init(SD);
HenryWTriff 10:29126a41b1da 160 format_done = true;
HenryWTriff 10:29126a41b1da 161 }
HenryWTriff 10:29126a41b1da 162 }
HenryWTriff 7:2ce6e90f6d47 163 select_main_menu.Back = true;
HenryWTriff 7:2ce6e90f6d47 164 }
HenryWTriff 8:4503c92acaf6 165
HenryWTriff 7:2ce6e90f6d47 166 if(select_main_menu.Back == false && select_main_menu.Menu_return == 3) {
HenryWTriff 7:2ce6e90f6d47 167 Menu.Credits_Menu(LCD, Device);
HenryWTriff 7:2ce6e90f6d47 168 select_main_menu.Back = true;
HenryWTriff 7:2ce6e90f6d47 169 }
HenryWTriff 7:2ce6e90f6d47 170
HenryWTriff 7:2ce6e90f6d47 171 if(select_main_menu.Back == false && select_main_menu.Menu_return == 1) {
HenryWTriff 7:2ce6e90f6d47 172 select_game_mode = Menu.Select_Game_Mode(LCD, Device);
HenryWTriff 10:29126a41b1da 173 if(select_game_mode.Menu_return == 2) {
HenryWTriff 10:29126a41b1da 174 select_laps.Back = false;
HenryWTriff 10:29126a41b1da 175 select_laps.Menu_return = 3;
HenryWTriff 10:29126a41b1da 176 }
HenryWTriff 7:2ce6e90f6d47 177 }
HenryWTriff 7:2ce6e90f6d47 178 if(select_main_menu.Back == false && select_main_menu.Menu_return == 1 && select_game_mode.Back == false) {
HenryWTriff 7:2ce6e90f6d47 179 select_map = Menu.Select_Map(LCD, Device);
HenryWTriff 7:2ce6e90f6d47 180 }
HenryWTriff 10:29126a41b1da 181 if(select_main_menu.Back == false && select_main_menu.Menu_return == 1 && select_game_mode.Back == false && select_map.Back == false && select_laps.Back == true) {
HenryWTriff 7:2ce6e90f6d47 182 select_laps = Menu.Select_Laps(LCD, Device);
HenryWTriff 7:2ce6e90f6d47 183 }
HenryWTriff 7:2ce6e90f6d47 184 if(select_main_menu.Back == false && select_main_menu.Menu_return == 1 && select_game_mode.Back == false && select_map.Back == false && select_laps.Back == false) {
HenryWTriff 7:2ce6e90f6d47 185 select_car = Menu.Select_Car(LCD, Device);
HenryWTriff 7:2ce6e90f6d47 186 }
HenryWTriff 7:2ce6e90f6d47 187 } while(select_car.Back == true);
HenryWTriff 7:2ce6e90f6d47 188
HenryWTriff 7:2ce6e90f6d47 189 car_model = select_car.Menu_return;
HenryWTriff 7:2ce6e90f6d47 190 number_of_laps = select_laps.Menu_return;
HenryWTriff 10:29126a41b1da 191 if(select_game_mode.Menu_return == 2) {
HenryWTriff 9:7b1093d3f03a 192 ghost_enable = true;
HenryWTriff 9:7b1093d3f03a 193 }
HenryWTriff 7:2ce6e90f6d47 194 leds = Menu.Get_LED_Setting();
HenryWTriff 7:2ce6e90f6d47 195 gyro_enabled = Menu.Get_Gyro_Setting();
HenryWTriff 7:2ce6e90f6d47 196
HenryWTriff 7:2ce6e90f6d47 197 //CAR PARAMETERS SETUP
HenryWTriff 7:2ce6e90f6d47 198 max_speed = Mechanics.Get_Max_Speed(car_model);
HenryWTriff 7:2ce6e90f6d47 199 acceleration = Mechanics.Get_Acceleration(car_model);
HenryWTriff 7:2ce6e90f6d47 200 deceleration = Mechanics.Get_Deceleration(car_model);
HenryWTriff 7:2ce6e90f6d47 201 off_track_speed = Mechanics.Get_Off_Road_Speed(car_model);
HenryWTriff 7:2ce6e90f6d47 202 handling = Mechanics.Get_Handling(car_model);
HenryWTriff 7:2ce6e90f6d47 203
HenryWTriff 8:4503c92acaf6 204 if(select_map.Menu_return == 1) {
HenryWTriff 8:4503c92acaf6 205
HenryWTriff 8:4503c92acaf6 206 while(1) {
HenryWTriff 10:29126a41b1da 207 if(ghost_enable == true) {
HenryWTriff 10:29126a41b1da 208 Ghost.SD_Read(Small, car_model, SD);
HenryWTriff 10:29126a41b1da 209 }
HenryWTriff 8:4503c92acaf6 210
HenryWTriff 8:4503c92acaf6 211 //COUNTDOWN
HenryWTriff 8:4503c92acaf6 212 for(int count = 3; count >= 0; count--) {
HenryWTriff 8:4503c92acaf6 213 LCD.clear();
HenryWTriff 8:4503c92acaf6 214 Graphics.Draw_Map(
HenryWTriff 8:4503c92acaf6 215 translation,
HenryWTriff 8:4503c92acaf6 216 angle,
HenryWTriff 8:4503c92acaf6 217 squish,
HenryWTriff 8:4503c92acaf6 218 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 8:4503c92acaf6 219 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 8:4503c92acaf6 220 (Line_2D *)Map_1_Walls,
HenryWTriff 8:4503c92acaf6 221 (Point_2D *)Map_1_Flags,
HenryWTriff 8:4503c92acaf6 222 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 8:4503c92acaf6 223 Map_1,
HenryWTriff 8:4503c92acaf6 224 car_model,
HenryWTriff 9:7b1093d3f03a 225 Ghost.Play(false, race_time),
HenryWTriff 8:4503c92acaf6 226 LCD
HenryWTriff 8:4503c92acaf6 227 );
HenryWTriff 8:4503c92acaf6 228 Graphics.Start_Sequence(count, LCD);
HenryWTriff 8:4503c92acaf6 229 LEDs.Start_Sequence(leds, count, Device);
HenryWTriff 8:4503c92acaf6 230 LCD.refresh();
HenryWTriff 8:4503c92acaf6 231 wait(1);
HenryWTriff 8:4503c92acaf6 232 }
HenryWTriff 8:4503c92acaf6 233 LEDs.Clear(Device);
HenryWTriff 8:4503c92acaf6 234
HenryWTriff 10:29126a41b1da 235
HenryWTriff 8:4503c92acaf6 236 while(laps <= number_of_laps) {
HenryWTriff 8:4503c92acaf6 237 //MECHANICS
HenryWTriff 8:4503c92acaf6 238 laps = Mechanics.Get_Laps(laps, Map_1_Gates, Map_1.number_of_gates, translation, lap_gate);
HenryWTriff 8:4503c92acaf6 239 lap_gate = Mechanics.Get_Gate(Map_1_Gates, Map_1.number_of_gates, translation, lap_gate);
HenryWTriff 8:4503c92acaf6 240 angle = Mechanics.Get_Angle(angle, handling, gyro_enabled, Gyro, Device);
HenryWTriff 8:4503c92acaf6 241 speed = Mechanics.Get_Speed(
HenryWTriff 8:4503c92acaf6 242 speed,
HenryWTriff 8:4503c92acaf6 243 max_speed,
HenryWTriff 8:4503c92acaf6 244 acceleration,
HenryWTriff 8:4503c92acaf6 245 deceleration,
HenryWTriff 8:4503c92acaf6 246 off_track_speed,
HenryWTriff 8:4503c92acaf6 247 translation,
HenryWTriff 8:4503c92acaf6 248 Map_1_Off_Track_Square,
HenryWTriff 8:4503c92acaf6 249 Map_1_Off_Track_Triangle,
HenryWTriff 8:4503c92acaf6 250 Map_1_Out_Of_Bounds_Square,
HenryWTriff 8:4503c92acaf6 251 Map_1_Out_Of_Bounds_Triangle,
HenryWTriff 8:4503c92acaf6 252 Map_1_Boost_Plates,
HenryWTriff 8:4503c92acaf6 253 Map_1,
HenryWTriff 8:4503c92acaf6 254 Device
HenryWTriff 8:4503c92acaf6 255 );
HenryWTriff 8:4503c92acaf6 256 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 257
HenryWTriff 8:4503c92acaf6 258 //LEDS
HenryWTriff 8:4503c92acaf6 259 LEDs.Speed(leds, speed, max_speed, Device);
HenryWTriff 8:4503c92acaf6 260
HenryWTriff 8:4503c92acaf6 261 //GHOST
HenryWTriff 9:7b1093d3f03a 262 if(ghost_enable == true) {
HenryWTriff 9:7b1093d3f03a 263 Ghost.Record(translation, race_time);
HenryWTriff 9:7b1093d3f03a 264 }
HenryWTriff 8:4503c92acaf6 265
HenryWTriff 8:4503c92acaf6 266 //GRAPHICS
HenryWTriff 8:4503c92acaf6 267 LCD.clear();
HenryWTriff 8:4503c92acaf6 268 Graphics.Change_Contrast(LCD,Device);
HenryWTriff 10:29126a41b1da 269 Graphics.Draw_Map(
HenryWTriff 10:29126a41b1da 270 translation,
HenryWTriff 10:29126a41b1da 271 angle,
HenryWTriff 10:29126a41b1da 272 squish,
HenryWTriff 10:29126a41b1da 273 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 10:29126a41b1da 274 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 10:29126a41b1da 275 (Line_2D *)Map_1_Walls,
HenryWTriff 10:29126a41b1da 276 (Point_2D *)Map_1_Flags,
HenryWTriff 10:29126a41b1da 277 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 10:29126a41b1da 278 Map_1,
HenryWTriff 10:29126a41b1da 279 car_model,
HenryWTriff 10:29126a41b1da 280 Ghost.Play(ghost_enable, race_time),
HenryWTriff 10:29126a41b1da 281 LCD
HenryWTriff 10:29126a41b1da 282 );
HenryWTriff 8:4503c92acaf6 283 Graphics.Draw_Laps(laps, LCD);
HenryWTriff 8:4503c92acaf6 284 Graphics.Draw_Time(false, Mechanics.Convert_To_Time(game_fps, race_time), LCD);
HenryWTriff 8:4503c92acaf6 285 LCD.refresh();
HenryWTriff 8:4503c92acaf6 286 wait((1 / float(game_fps)));
HenryWTriff 8:4503c92acaf6 287 race_time++;
HenryWTriff 8:4503c92acaf6 288
HenryWTriff 8:4503c92acaf6 289 }
HenryWTriff 7:2ce6e90f6d47 290
HenryWTriff 8:4503c92acaf6 291 LEDs.Clear(Device);
HenryWTriff 7:2ce6e90f6d47 292 LCD.clear();
HenryWTriff 7:2ce6e90f6d47 293 Graphics.Draw_Map(
HenryWTriff 7:2ce6e90f6d47 294 translation,
HenryWTriff 7:2ce6e90f6d47 295 angle,
HenryWTriff 7:2ce6e90f6d47 296 squish,
HenryWTriff 7:2ce6e90f6d47 297 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 7:2ce6e90f6d47 298 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 7:2ce6e90f6d47 299 (Line_2D *)Map_1_Walls,
HenryWTriff 7:2ce6e90f6d47 300 (Point_2D *)Map_1_Flags,
HenryWTriff 7:2ce6e90f6d47 301 (Triangle_2D *)Map_1_Boost_Plates,
HenryWTriff 7:2ce6e90f6d47 302 Map_1,
HenryWTriff 7:2ce6e90f6d47 303 car_model,
HenryWTriff 9:7b1093d3f03a 304 Ghost.Play(false, race_time),
HenryWTriff 7:2ce6e90f6d47 305 LCD
HenryWTriff 7:2ce6e90f6d47 306 );
HenryWTriff 8:4503c92acaf6 307 Graphics.Finish(LCD);
HenryWTriff 8:4503c92acaf6 308 Graphics.Draw_Time(true, Mechanics.Convert_To_Time(game_fps, race_time), LCD);
HenryWTriff 7:2ce6e90f6d47 309 LCD.refresh();
HenryWTriff 10:29126a41b1da 310 if(ghost_enable == true) {
HenryWTriff 10:29126a41b1da 311 Ghost.Copy(race_time, Small, car_model, SD);
HenryWTriff 10:29126a41b1da 312 }
HenryWTriff 8:4503c92acaf6 313
HenryWTriff 8:4503c92acaf6 314 //RESET
HenryWTriff 8:4503c92acaf6 315 angle = 0;
HenryWTriff 8:4503c92acaf6 316 Point_2D test = {0,0};
HenryWTriff 8:4503c92acaf6 317 translation = test;
HenryWTriff 8:4503c92acaf6 318 squish = 0.15;
HenryWTriff 8:4503c92acaf6 319 speed = 0;
HenryWTriff 8:4503c92acaf6 320 max_speed = 4;
HenryWTriff 8:4503c92acaf6 321 handling = 2;
HenryWTriff 8:4503c92acaf6 322 lap_gate = 0;
HenryWTriff 8:4503c92acaf6 323 laps = 1;
HenryWTriff 8:4503c92acaf6 324 race_time = 0;
HenryWTriff 8:4503c92acaf6 325
HenryWTriff 8:4503c92acaf6 326 wait(3);
HenryWTriff 7:2ce6e90f6d47 327 }
HenryWTriff 8:4503c92acaf6 328 } else if(select_map.Menu_return == 2) {
HenryWTriff 8:4503c92acaf6 329 while(1) {
HenryWTriff 8:4503c92acaf6 330
HenryWTriff 10:29126a41b1da 331 if(ghost_enable == true) {
HenryWTriff 10:29126a41b1da 332 Ghost.SD_Read(Medium, car_model, SD);
HenryWTriff 10:29126a41b1da 333 }
HenryWTriff 8:4503c92acaf6 334 //COUNTDOWN
HenryWTriff 8:4503c92acaf6 335 for(int count = 3; count >= 0; count--) {
HenryWTriff 8:4503c92acaf6 336 LCD.clear();
HenryWTriff 8:4503c92acaf6 337 Graphics.Draw_Map(
HenryWTriff 8:4503c92acaf6 338 translation,
HenryWTriff 8:4503c92acaf6 339 angle,
HenryWTriff 8:4503c92acaf6 340 squish,
HenryWTriff 8:4503c92acaf6 341 (Line_2D *) Map_2_Track_Lines,
HenryWTriff 8:4503c92acaf6 342 (Line_2D *)Map_2_Track_Dotted_Lines,
HenryWTriff 8:4503c92acaf6 343 (Line_2D *)Map_2_Walls,
HenryWTriff 8:4503c92acaf6 344 (Point_2D *)Map_2_Flags,
HenryWTriff 8:4503c92acaf6 345 (Triangle_2D *)Map_2_Boost_Plates,
HenryWTriff 8:4503c92acaf6 346 Map_2,
HenryWTriff 8:4503c92acaf6 347 car_model,
HenryWTriff 9:7b1093d3f03a 348 Ghost.Play(false, race_time),
HenryWTriff 8:4503c92acaf6 349 LCD
HenryWTriff 8:4503c92acaf6 350 );
HenryWTriff 8:4503c92acaf6 351 Graphics.Start_Sequence(count, LCD);
HenryWTriff 8:4503c92acaf6 352 LEDs.Start_Sequence(leds, count, Device);
HenryWTriff 8:4503c92acaf6 353 LCD.refresh();
HenryWTriff 8:4503c92acaf6 354 wait(1);
HenryWTriff 8:4503c92acaf6 355 }
HenryWTriff 8:4503c92acaf6 356 LEDs.Clear(Device);
HenryWTriff 6:5f76dd718dc3 357
HenryWTriff 8:4503c92acaf6 358 while(laps <= number_of_laps) {
HenryWTriff 8:4503c92acaf6 359 //MECHANICS
HenryWTriff 8:4503c92acaf6 360 laps = Mechanics.Get_Laps(laps, Map_2_Gates, Map_2.number_of_gates, translation, lap_gate);
HenryWTriff 8:4503c92acaf6 361 lap_gate = Mechanics.Get_Gate(Map_2_Gates, Map_2.number_of_gates, translation, lap_gate);
HenryWTriff 8:4503c92acaf6 362 angle = Mechanics.Get_Angle(angle, handling, gyro_enabled, Gyro, Device);
HenryWTriff 8:4503c92acaf6 363 speed = Mechanics.Get_Speed(
HenryWTriff 8:4503c92acaf6 364 speed,
HenryWTriff 8:4503c92acaf6 365 max_speed,
HenryWTriff 8:4503c92acaf6 366 acceleration,
HenryWTriff 8:4503c92acaf6 367 deceleration,
HenryWTriff 8:4503c92acaf6 368 off_track_speed,
HenryWTriff 8:4503c92acaf6 369 translation,
HenryWTriff 8:4503c92acaf6 370 Map_2_Off_Track_Square,
HenryWTriff 8:4503c92acaf6 371 Map_2_Off_Track_Triangle,
HenryWTriff 8:4503c92acaf6 372 Map_2_Out_Of_Bounds_Square,
HenryWTriff 8:4503c92acaf6 373 Map_2_Out_Of_Bounds_Triangle,
HenryWTriff 8:4503c92acaf6 374 Map_2_Boost_Plates,
HenryWTriff 8:4503c92acaf6 375 Map_2,
HenryWTriff 8:4503c92acaf6 376 Device
HenryWTriff 8:4503c92acaf6 377 );
HenryWTriff 8:4503c92acaf6 378 translation = Mechanics.Get_Translation(translation, angle, speed, Map_2_Out_Of_Bounds_Square, Map_2_Out_Of_Bounds_Triangle, Map_2, Device);
HenryWTriff 8:4503c92acaf6 379
HenryWTriff 8:4503c92acaf6 380 //LEDS
HenryWTriff 8:4503c92acaf6 381 LEDs.Speed(leds, speed, max_speed, Device);
HenryWTriff 8:4503c92acaf6 382
HenryWTriff 8:4503c92acaf6 383 //GHOST
HenryWTriff 9:7b1093d3f03a 384 if(ghost_enable == true) {
HenryWTriff 9:7b1093d3f03a 385 Ghost.Record(translation, race_time);
HenryWTriff 9:7b1093d3f03a 386 }
HenryWTriff 6:5f76dd718dc3 387
HenryWTriff 8:4503c92acaf6 388 //GRAPHICS
HenryWTriff 8:4503c92acaf6 389 LCD.clear();
HenryWTriff 8:4503c92acaf6 390 Graphics.Change_Contrast(LCD,Device);
HenryWTriff 10:29126a41b1da 391 Graphics.Draw_Map(
HenryWTriff 10:29126a41b1da 392 translation,
HenryWTriff 10:29126a41b1da 393 angle,
HenryWTriff 10:29126a41b1da 394 squish,
HenryWTriff 10:29126a41b1da 395 (Line_2D *) Map_2_Track_Lines,
HenryWTriff 10:29126a41b1da 396 (Line_2D *)Map_2_Track_Dotted_Lines,
HenryWTriff 10:29126a41b1da 397 (Line_2D *)Map_2_Walls,
HenryWTriff 10:29126a41b1da 398 (Point_2D *)Map_2_Flags,
HenryWTriff 10:29126a41b1da 399 (Triangle_2D *)Map_2_Boost_Plates,
HenryWTriff 10:29126a41b1da 400 Map_2,
HenryWTriff 10:29126a41b1da 401 car_model,
HenryWTriff 10:29126a41b1da 402 Ghost.Play(ghost_enable, race_time),
HenryWTriff 10:29126a41b1da 403 LCD
HenryWTriff 10:29126a41b1da 404 );
HenryWTriff 8:4503c92acaf6 405 Graphics.Draw_Laps(laps, LCD);
HenryWTriff 8:4503c92acaf6 406 Graphics.Draw_Time(false, Mechanics.Convert_To_Time(game_fps, race_time), LCD);
HenryWTriff 8:4503c92acaf6 407 LCD.refresh();
HenryWTriff 8:4503c92acaf6 408 wait((1 / float(game_fps)));
HenryWTriff 8:4503c92acaf6 409 race_time++;
HenryWTriff 6:5f76dd718dc3 410
HenryWTriff 8:4503c92acaf6 411 }
HenryWTriff 8:4503c92acaf6 412
HenryWTriff 6:5f76dd718dc3 413
HenryWTriff 8:4503c92acaf6 414 LEDs.Clear(Device);
HenryWTriff 6:5f76dd718dc3 415 LCD.clear();
HenryWTriff 6:5f76dd718dc3 416 Graphics.Draw_Map(
HenryWTriff 6:5f76dd718dc3 417 translation,
HenryWTriff 6:5f76dd718dc3 418 angle,
HenryWTriff 6:5f76dd718dc3 419 squish,
HenryWTriff 8:4503c92acaf6 420 (Line_2D *) Map_2_Track_Lines,
HenryWTriff 8:4503c92acaf6 421 (Line_2D *)Map_2_Track_Dotted_Lines,
HenryWTriff 8:4503c92acaf6 422 (Line_2D *)Map_2_Walls,
HenryWTriff 8:4503c92acaf6 423 (Point_2D *)Map_2_Flags,
HenryWTriff 8:4503c92acaf6 424 (Triangle_2D *)Map_2_Boost_Plates,
HenryWTriff 8:4503c92acaf6 425 Map_2,
HenryWTriff 7:2ce6e90f6d47 426 car_model,
HenryWTriff 9:7b1093d3f03a 427 Ghost.Play(false, race_time),
HenryWTriff 9:7b1093d3f03a 428 LCD
HenryWTriff 9:7b1093d3f03a 429 );
HenryWTriff 9:7b1093d3f03a 430 Graphics.Finish(LCD);
HenryWTriff 9:7b1093d3f03a 431 Graphics.Draw_Time(true, Mechanics.Convert_To_Time(game_fps, race_time), LCD);
HenryWTriff 9:7b1093d3f03a 432 LCD.refresh();
HenryWTriff 10:29126a41b1da 433 if(ghost_enable == true) {
HenryWTriff 10:29126a41b1da 434 Ghost.Copy(race_time, Medium, car_model, SD);
HenryWTriff 10:29126a41b1da 435 }
HenryWTriff 9:7b1093d3f03a 436
HenryWTriff 9:7b1093d3f03a 437 //RESET
HenryWTriff 9:7b1093d3f03a 438 angle = 0;
HenryWTriff 9:7b1093d3f03a 439 Point_2D test = {0,0};
HenryWTriff 9:7b1093d3f03a 440 translation = test;
HenryWTriff 9:7b1093d3f03a 441 squish = 0.15;
HenryWTriff 9:7b1093d3f03a 442 speed = 0;
HenryWTriff 9:7b1093d3f03a 443 max_speed = 4;
HenryWTriff 9:7b1093d3f03a 444 handling = 2;
HenryWTriff 9:7b1093d3f03a 445 lap_gate = 0;
HenryWTriff 9:7b1093d3f03a 446 laps = 1;
HenryWTriff 9:7b1093d3f03a 447 race_time = 0;
HenryWTriff 9:7b1093d3f03a 448
HenryWTriff 9:7b1093d3f03a 449 wait(3);
HenryWTriff 9:7b1093d3f03a 450 }
HenryWTriff 9:7b1093d3f03a 451 } else if(select_map.Menu_return == 3) {
HenryWTriff 9:7b1093d3f03a 452 while(1) {
HenryWTriff 9:7b1093d3f03a 453
HenryWTriff 10:29126a41b1da 454 if(ghost_enable == true) {
HenryWTriff 10:29126a41b1da 455 Ghost.SD_Read(Large, car_model, SD);
HenryWTriff 10:29126a41b1da 456 }
HenryWTriff 10:29126a41b1da 457
HenryWTriff 9:7b1093d3f03a 458 //COUNTDOWN
HenryWTriff 9:7b1093d3f03a 459 for(int count = 3; count >= 0; count--) {
HenryWTriff 9:7b1093d3f03a 460 LCD.clear();
HenryWTriff 9:7b1093d3f03a 461 Graphics.Draw_Map(
HenryWTriff 9:7b1093d3f03a 462 translation,
HenryWTriff 9:7b1093d3f03a 463 angle,
HenryWTriff 9:7b1093d3f03a 464 squish,
HenryWTriff 9:7b1093d3f03a 465 (Line_2D *) Map_3_Track_Lines,
HenryWTriff 9:7b1093d3f03a 466 (Line_2D *)Map_3_Track_Dotted_Lines,
HenryWTriff 9:7b1093d3f03a 467 (Line_2D *)Map_3_Walls,
HenryWTriff 9:7b1093d3f03a 468 (Point_2D *)Map_3_Flags,
HenryWTriff 9:7b1093d3f03a 469 (Triangle_2D *)Map_3_Boost_Plates,
HenryWTriff 9:7b1093d3f03a 470 Map_3,
HenryWTriff 9:7b1093d3f03a 471 car_model,
HenryWTriff 9:7b1093d3f03a 472 Ghost.Play(false, race_time),
HenryWTriff 9:7b1093d3f03a 473 LCD
HenryWTriff 9:7b1093d3f03a 474 );
HenryWTriff 9:7b1093d3f03a 475 Graphics.Start_Sequence(count, LCD);
HenryWTriff 9:7b1093d3f03a 476 LEDs.Start_Sequence(leds, count, Device);
HenryWTriff 9:7b1093d3f03a 477 LCD.refresh();
HenryWTriff 9:7b1093d3f03a 478 wait(1);
HenryWTriff 9:7b1093d3f03a 479 }
HenryWTriff 9:7b1093d3f03a 480 LEDs.Clear(Device);
HenryWTriff 9:7b1093d3f03a 481
HenryWTriff 10:29126a41b1da 482
HenryWTriff 9:7b1093d3f03a 483 while(laps <= number_of_laps) {
HenryWTriff 9:7b1093d3f03a 484 //MECHANICS
HenryWTriff 9:7b1093d3f03a 485 laps = Mechanics.Get_Laps(laps, Map_3_Gates, Map_3.number_of_gates, translation, lap_gate);
HenryWTriff 9:7b1093d3f03a 486 lap_gate = Mechanics.Get_Gate(Map_3_Gates, Map_3.number_of_gates, translation, lap_gate);
HenryWTriff 9:7b1093d3f03a 487 angle = Mechanics.Get_Angle(angle, handling, gyro_enabled, Gyro, Device);
HenryWTriff 9:7b1093d3f03a 488 speed = Mechanics.Get_Speed(
HenryWTriff 9:7b1093d3f03a 489 speed,
HenryWTriff 9:7b1093d3f03a 490 max_speed,
HenryWTriff 9:7b1093d3f03a 491 acceleration,
HenryWTriff 9:7b1093d3f03a 492 deceleration,
HenryWTriff 9:7b1093d3f03a 493 off_track_speed,
HenryWTriff 9:7b1093d3f03a 494 translation,
HenryWTriff 9:7b1093d3f03a 495 Map_3_Off_Track_Square,
HenryWTriff 9:7b1093d3f03a 496 Map_3_Off_Track_Triangle,
HenryWTriff 9:7b1093d3f03a 497 Map_3_Out_Of_Bounds_Square,
HenryWTriff 9:7b1093d3f03a 498 Map_3_Out_Of_Bounds_Triangle,
HenryWTriff 9:7b1093d3f03a 499 Map_3_Boost_Plates,
HenryWTriff 9:7b1093d3f03a 500 Map_3,
HenryWTriff 9:7b1093d3f03a 501 Device
HenryWTriff 9:7b1093d3f03a 502 );
HenryWTriff 9:7b1093d3f03a 503 translation = Mechanics.Get_Translation(translation, angle, speed, Map_3_Out_Of_Bounds_Square, Map_3_Out_Of_Bounds_Triangle, Map_3, Device);
HenryWTriff 9:7b1093d3f03a 504
HenryWTriff 9:7b1093d3f03a 505 //LEDS
HenryWTriff 9:7b1093d3f03a 506 LEDs.Speed(leds, speed, max_speed, Device);
HenryWTriff 9:7b1093d3f03a 507
HenryWTriff 9:7b1093d3f03a 508 //GHOST
HenryWTriff 9:7b1093d3f03a 509 if(ghost_enable == true) {
HenryWTriff 9:7b1093d3f03a 510 Ghost.Record(translation, race_time);
HenryWTriff 9:7b1093d3f03a 511 }
HenryWTriff 9:7b1093d3f03a 512
HenryWTriff 9:7b1093d3f03a 513 //GRAPHICS
HenryWTriff 9:7b1093d3f03a 514 LCD.clear();
HenryWTriff 9:7b1093d3f03a 515 Graphics.Change_Contrast(LCD,Device);
HenryWTriff 10:29126a41b1da 516 Graphics.Draw_Map(
HenryWTriff 10:29126a41b1da 517 translation,
HenryWTriff 10:29126a41b1da 518 angle,
HenryWTriff 10:29126a41b1da 519 squish,
HenryWTriff 10:29126a41b1da 520 (Line_2D *) Map_3_Track_Lines,
HenryWTriff 10:29126a41b1da 521 (Line_2D *)Map_3_Track_Dotted_Lines,
HenryWTriff 10:29126a41b1da 522 (Line_2D *)Map_3_Walls,
HenryWTriff 10:29126a41b1da 523 (Point_2D *)Map_3_Flags,
HenryWTriff 10:29126a41b1da 524 (Triangle_2D *)Map_3_Boost_Plates,
HenryWTriff 10:29126a41b1da 525 Map_3,
HenryWTriff 10:29126a41b1da 526 car_model,
HenryWTriff 10:29126a41b1da 527 Ghost.Play(ghost_enable, race_time),
HenryWTriff 10:29126a41b1da 528 LCD
HenryWTriff 10:29126a41b1da 529 );
HenryWTriff 9:7b1093d3f03a 530 Graphics.Draw_Laps(laps, LCD);
HenryWTriff 9:7b1093d3f03a 531 Graphics.Draw_Time(false, Mechanics.Convert_To_Time(game_fps, race_time), LCD);
HenryWTriff 9:7b1093d3f03a 532 LCD.refresh();
HenryWTriff 9:7b1093d3f03a 533 wait((1 / float(game_fps)));
HenryWTriff 9:7b1093d3f03a 534 race_time++;
HenryWTriff 9:7b1093d3f03a 535
HenryWTriff 9:7b1093d3f03a 536 }
HenryWTriff 9:7b1093d3f03a 537
HenryWTriff 9:7b1093d3f03a 538
HenryWTriff 9:7b1093d3f03a 539 LEDs.Clear(Device);
HenryWTriff 9:7b1093d3f03a 540 LCD.clear();
HenryWTriff 9:7b1093d3f03a 541 Graphics.Draw_Map(
HenryWTriff 9:7b1093d3f03a 542 translation,
HenryWTriff 9:7b1093d3f03a 543 angle,
HenryWTriff 9:7b1093d3f03a 544 squish,
HenryWTriff 9:7b1093d3f03a 545 (Line_2D *) Map_3_Track_Lines,
HenryWTriff 9:7b1093d3f03a 546 (Line_2D *)Map_3_Track_Dotted_Lines,
HenryWTriff 9:7b1093d3f03a 547 (Line_2D *)Map_3_Walls,
HenryWTriff 9:7b1093d3f03a 548 (Point_2D *)Map_3_Flags,
HenryWTriff 9:7b1093d3f03a 549 (Triangle_2D *)Map_3_Boost_Plates,
HenryWTriff 9:7b1093d3f03a 550 Map_3,
HenryWTriff 9:7b1093d3f03a 551 car_model,
HenryWTriff 9:7b1093d3f03a 552 Ghost.Play(false, race_time),
HenryWTriff 6:5f76dd718dc3 553 LCD
HenryWTriff 6:5f76dd718dc3 554 );
HenryWTriff 8:4503c92acaf6 555 Graphics.Finish(LCD);
HenryWTriff 8:4503c92acaf6 556 Graphics.Draw_Time(true, Mechanics.Convert_To_Time(game_fps, race_time), LCD);
HenryWTriff 6:5f76dd718dc3 557 LCD.refresh();
HenryWTriff 10:29126a41b1da 558 if(ghost_enable == true) {
HenryWTriff 10:29126a41b1da 559 Ghost.Copy(race_time, Large, car_model, SD);
HenryWTriff 10:29126a41b1da 560 }
HenryWTriff 7:2ce6e90f6d47 561
HenryWTriff 8:4503c92acaf6 562 //RESET
HenryWTriff 8:4503c92acaf6 563 angle = 0;
HenryWTriff 8:4503c92acaf6 564 Point_2D test = {0,0};
HenryWTriff 8:4503c92acaf6 565 translation = test;
HenryWTriff 8:4503c92acaf6 566 squish = 0.15;
HenryWTriff 8:4503c92acaf6 567 speed = 0;
HenryWTriff 8:4503c92acaf6 568 max_speed = 4;
HenryWTriff 8:4503c92acaf6 569 handling = 2;
HenryWTriff 8:4503c92acaf6 570 lap_gate = 0;
HenryWTriff 8:4503c92acaf6 571 laps = 1;
HenryWTriff 8:4503c92acaf6 572 race_time = 0;
HenryWTriff 6:5f76dd718dc3 573
HenryWTriff 8:4503c92acaf6 574 wait(3);
HenryWTriff 8:4503c92acaf6 575 }
HenryWTriff 2:d08b6a1eaf2b 576 }
eencae 0:b7f1f47bb26a 577 }
eencae 0:b7f1f47bb26a 578