Dependencies:   mbed

Committer:
HenryWTriff
Date:
Tue Feb 11 17:28:56 2020 +0000
Revision:
5:2d9f3c36bcb9
Parent:
4:9f41fc1c2ad1
Child:
6:5f76dd718dc3
Off-track reduces speed, out of bounds is a thing, lap counter

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 2:d08b6a1eaf2b 17 #include "Graphics.h"
HenryWTriff 3:ceed6d026b8b 18 #include "Controls.h"
eencae 0:b7f1f47bb26a 19
HenryWTriff 2:d08b6a1eaf2b 20 //OBJECTS
HenryWTriff 2:d08b6a1eaf2b 21 Gamepad Device;
HenryWTriff 2:d08b6a1eaf2b 22 N5110 LCD;
HenryWTriff 2:d08b6a1eaf2b 23 Graphics Graphics;
HenryWTriff 3:ceed6d026b8b 24 Controls Controls;
HenryWTriff 5:2d9f3c36bcb9 25 Mechanics Mechanics;
HenryWTriff 3:ceed6d026b8b 26
HenryWTriff 3:ceed6d026b8b 27 #ifndef STRUCTS
HenryWTriff 3:ceed6d026b8b 28 #define STRUCTS
HenryWTriff 3:ceed6d026b8b 29
HenryWTriff 3:ceed6d026b8b 30 //STRUCTS
HenryWTriff 3:ceed6d026b8b 31 struct Point_2D {
HenryWTriff 3:ceed6d026b8b 32 float x;
HenryWTriff 3:ceed6d026b8b 33 float y;
HenryWTriff 3:ceed6d026b8b 34 };
HenryWTriff 3:ceed6d026b8b 35 struct Line_2D {
HenryWTriff 3:ceed6d026b8b 36 Point_2D from;
HenryWTriff 3:ceed6d026b8b 37 Point_2D to;
HenryWTriff 3:ceed6d026b8b 38 };
HenryWTriff 3:ceed6d026b8b 39
HenryWTriff 5:2d9f3c36bcb9 40 struct Square_2D {
HenryWTriff 5:2d9f3c36bcb9 41 Point_2D TL;
HenryWTriff 5:2d9f3c36bcb9 42 Point_2D BR;
HenryWTriff 5:2d9f3c36bcb9 43 };
HenryWTriff 5:2d9f3c36bcb9 44 struct Triangle_2D {
HenryWTriff 5:2d9f3c36bcb9 45 Point_2D TL;
HenryWTriff 5:2d9f3c36bcb9 46 Point_2D BR;
HenryWTriff 5:2d9f3c36bcb9 47 int Type;
HenryWTriff 5:2d9f3c36bcb9 48 };
HenryWTriff 5:2d9f3c36bcb9 49
HenryWTriff 3:ceed6d026b8b 50 struct Map_Data {
HenryWTriff 3:ceed6d026b8b 51 int number_of_track_lines;
HenryWTriff 3:ceed6d026b8b 52 int number_of_dotted_lines;
HenryWTriff 3:ceed6d026b8b 53 int number_of_flags;
HenryWTriff 5:2d9f3c36bcb9 54 int number_of_walls;
HenryWTriff 5:2d9f3c36bcb9 55 int number_of_off_track_squares;
HenryWTriff 5:2d9f3c36bcb9 56 int number_of_off_track_triangles;
HenryWTriff 5:2d9f3c36bcb9 57 int number_of_out_of_bounds_squares;
HenryWTriff 5:2d9f3c36bcb9 58 int number_of_out_of_bounds_triangles;
HenryWTriff 5:2d9f3c36bcb9 59 int number_of_gates;
HenryWTriff 3:ceed6d026b8b 60 };
HenryWTriff 3:ceed6d026b8b 61
HenryWTriff 3:ceed6d026b8b 62 #endif
eencae 0:b7f1f47bb26a 63
HenryWTriff 2:d08b6a1eaf2b 64 //MAP - 1
HenryWTriff 5:2d9f3c36bcb9 65 Map_Data Map_1 = {36,1,2,16,14,19,8,5,12};
HenryWTriff 3:ceed6d026b8b 66
HenryWTriff 2:d08b6a1eaf2b 67 //Lines
HenryWTriff 3:ceed6d026b8b 68 const Line_2D Map_1_Track_Lines[36] = {
HenryWTriff 2:d08b6a1eaf2b 69 //Inside Line
HenryWTriff 3:ceed6d026b8b 70 {{-20,0},{-20,80}},
HenryWTriff 3:ceed6d026b8b 71 {{-20,80},{-40,100}},
HenryWTriff 3:ceed6d026b8b 72 {{-40,100},{-80,100}},
HenryWTriff 3:ceed6d026b8b 73 {{-80,100},{-100,80}},
HenryWTriff 3:ceed6d026b8b 74 {{-100,80},{-100,40}},
HenryWTriff 3:ceed6d026b8b 75 {{-100,40},{-140,0}},
HenryWTriff 3:ceed6d026b8b 76 {{-140,0},{-220,0}},
HenryWTriff 3:ceed6d026b8b 77 {{-220,0},{-260,40}},
HenryWTriff 3:ceed6d026b8b 78 {{-260,40},{-260,80}},
HenryWTriff 3:ceed6d026b8b 79 {{-260,80},{-280,100}},
HenryWTriff 3:ceed6d026b8b 80 {{-280,100},{-320,100}},
HenryWTriff 3:ceed6d026b8b 81 {{-320,100},{-360,60}},
HenryWTriff 3:ceed6d026b8b 82 {{-360,60},{-360,-100}},
HenryWTriff 3:ceed6d026b8b 83 {{-360,-100},{-300,-160}},
HenryWTriff 3:ceed6d026b8b 84 {{-300,-160},{-220,-80}},
HenryWTriff 3:ceed6d026b8b 85 {{-220,-80},{-100,-80}},
HenryWTriff 3:ceed6d026b8b 86 {{-100,-80},{-20,0}},
HenryWTriff 3:ceed6d026b8b 87 //Outside Line
HenryWTriff 3:ceed6d026b8b 88 {{20,-20},{20,100}},
HenryWTriff 3:ceed6d026b8b 89 {{20,100},{-20,140}},
HenryWTriff 3:ceed6d026b8b 90 {{-20,140},{-100,140}},
HenryWTriff 3:ceed6d026b8b 91 {{-100,140},{-140,100}},
HenryWTriff 3:ceed6d026b8b 92 {{-140,100},{-140,60}},
HenryWTriff 3:ceed6d026b8b 93 {{-140,60},{-160,40}},
HenryWTriff 3:ceed6d026b8b 94 {{-160,40},{-200,40}},
HenryWTriff 3:ceed6d026b8b 95 {{-200,40},{-220,60}},
HenryWTriff 3:ceed6d026b8b 96 {{-220,60},{-220,100}},
HenryWTriff 3:ceed6d026b8b 97 {{-220,100},{-260,140}},
HenryWTriff 3:ceed6d026b8b 98 {{-260,140},{-340,140}},
HenryWTriff 3:ceed6d026b8b 99 {{-340,140},{-400,80}},
HenryWTriff 3:ceed6d026b8b 100 {{-400,80},{-400,-120}},
HenryWTriff 3:ceed6d026b8b 101 {{-400,-120},{-320,-200}},
HenryWTriff 3:ceed6d026b8b 102 {{-320,-200},{-280,-200}},
HenryWTriff 3:ceed6d026b8b 103 {{-280,-200},{-200,-120}},
HenryWTriff 3:ceed6d026b8b 104 {{-200,-120},{-80,-120}},
HenryWTriff 3:ceed6d026b8b 105 {{-80,-120},{20,-20}},
HenryWTriff 3:ceed6d026b8b 106 };
HenryWTriff 3:ceed6d026b8b 107
HenryWTriff 5:2d9f3c36bcb9 108 //Dotted Lines
HenryWTriff 3:ceed6d026b8b 109 const Line_2D Map_1_Track_Dotted_Lines[1] = {
HenryWTriff 3:ceed6d026b8b 110 {{-20,0},{20,0}},
HenryWTriff 3:ceed6d026b8b 111 };
HenryWTriff 3:ceed6d026b8b 112
HenryWTriff 5:2d9f3c36bcb9 113 //Flags
HenryWTriff 3:ceed6d026b8b 114 Point_2D Map_1_Flags[2] = {
HenryWTriff 3:ceed6d026b8b 115 {-20,0},
HenryWTriff 3:ceed6d026b8b 116 {24,0}
HenryWTriff 2:d08b6a1eaf2b 117 };
HenryWTriff 2:d08b6a1eaf2b 118
HenryWTriff 5:2d9f3c36bcb9 119 //Walls
HenryWTriff 5:2d9f3c36bcb9 120 Line_2D Map_1_Walls[16] = {
HenryWTriff 5:2d9f3c36bcb9 121 //Inside
HenryWTriff 5:2d9f3c36bcb9 122 {{-40,80},{-40,0}},
HenryWTriff 5:2d9f3c36bcb9 123 {{-40,0},{-100,-60}},
HenryWTriff 5:2d9f3c36bcb9 124 {{-100,-60},{-240,-60}},
HenryWTriff 5:2d9f3c36bcb9 125 {{-240,-60},{-300,-120}},
HenryWTriff 5:2d9f3c36bcb9 126 {{-300,-120},{-340,-60}},
HenryWTriff 5:2d9f3c36bcb9 127 {{-340,-60},{-340,60}},
HenryWTriff 5:2d9f3c36bcb9 128 {{-340,60},{-280,60}},
HenryWTriff 5:2d9f3c36bcb9 129 {{-280,60},{-280,-20}},
HenryWTriff 5:2d9f3c36bcb9 130 {{-280,-20},{-100,-20}},
HenryWTriff 5:2d9f3c36bcb9 131 {{-100,-20},{-80,0}},
HenryWTriff 5:2d9f3c36bcb9 132 {{-80,0},{-80,80}},
HenryWTriff 5:2d9f3c36bcb9 133 {{-80,80},{-40,80}},
HenryWTriff 5:2d9f3c36bcb9 134 //Outside
HenryWTriff 5:2d9f3c36bcb9 135 {{40,160},{40,-220}},
HenryWTriff 5:2d9f3c36bcb9 136 {{40,-220},{-420,-220}},
HenryWTriff 5:2d9f3c36bcb9 137 {{-420,-220},{-420,160}},
HenryWTriff 5:2d9f3c36bcb9 138 {{-420,160},{40,160}},
HenryWTriff 5:2d9f3c36bcb9 139 };
HenryWTriff 5:2d9f3c36bcb9 140
HenryWTriff 5:2d9f3c36bcb9 141 //Off track? objects
HenryWTriff 5:2d9f3c36bcb9 142 Square_2D Map_1_Off_Track_Square[14] = {
HenryWTriff 5:2d9f3c36bcb9 143 //Inside
HenryWTriff 5:2d9f3c36bcb9 144 {{-100,80},{-20,0}},
HenryWTriff 5:2d9f3c36bcb9 145 {{-80,100},{-40,80}},
HenryWTriff 5:2d9f3c36bcb9 146 {{-260,0},{-100,-80}},
HenryWTriff 5:2d9f3c36bcb9 147 {{-360,60},{-260,-100}},
HenryWTriff 5:2d9f3c36bcb9 148 {{-320,100},{-280,60}},
HenryWTriff 5:2d9f3c36bcb9 149 {{-280,80},{-260,60}},
HenryWTriff 5:2d9f3c36bcb9 150 {{-300,-100},{-260,-120}},
HenryWTriff 5:2d9f3c36bcb9 151 {{-200,60},{-60,40}},
HenryWTriff 5:2d9f3c36bcb9 152 {{-220,140},{-140,60}},
HenryWTriff 5:2d9f3c36bcb9 153 {{-200,-120},{20,-200}},
HenryWTriff 5:2d9f3c36bcb9 154 {{-400,200},{20,140}},
HenryWTriff 5:2d9f3c36bcb9 155 {{-500,200},{-400,-300}},
HenryWTriff 5:2d9f3c36bcb9 156 {{20,200},{100,-300}},
HenryWTriff 5:2d9f3c36bcb9 157 {{-400,-200},{20,-300}}
HenryWTriff 5:2d9f3c36bcb9 158 };
HenryWTriff 5:2d9f3c36bcb9 159
HenryWTriff 5:2d9f3c36bcb9 160 //Off track? objects
HenryWTriff 5:2d9f3c36bcb9 161 Triangle_2D Map_1_Off_Track_Triangle[19] = {
HenryWTriff 5:2d9f3c36bcb9 162 {{-40,100},{-20,80},1},
HenryWTriff 5:2d9f3c36bcb9 163 {{-100,100},{-80,80},4},
HenryWTriff 5:2d9f3c36bcb9 164 {{-140,40},{-100,0},4},
HenryWTriff 5:2d9f3c36bcb9 165 {{-100,0},{-20,-80},2}, //
HenryWTriff 5:2d9f3c36bcb9 166 {{-260,40},{-220,0},1},
HenryWTriff 5:2d9f3c36bcb9 167 {{-260,-80},{-220,-120},2},
HenryWTriff 5:2d9f3c36bcb9 168 {{-200,-120},{-260,-160},2},
HenryWTriff 5:2d9f3c36bcb9 169 {{-280,100},{-260,80},1},
HenryWTriff 5:2d9f3c36bcb9 170 {{-360,100},{-320,60},4},
HenryWTriff 5:2d9f3c36bcb9 171 {{-360,-100},{-300,-160},3},
HenryWTriff 5:2d9f3c36bcb9 172 //Outside
HenryWTriff 5:2d9f3c36bcb9 173 {{-20,140},{20,100},3},
HenryWTriff 5:2d9f3c36bcb9 174 {{-80,-20},{20,-120},4},
HenryWTriff 5:2d9f3c36bcb9 175 {{-140,140},{-100,100},2},
HenryWTriff 5:2d9f3c36bcb9 176 {{-160,60},{-140,40},2}, //
HenryWTriff 5:2d9f3c36bcb9 177 {{-220,60},{-200,40},3},
HenryWTriff 5:2d9f3c36bcb9 178 {{-280,-120},{-200,-200},4},
HenryWTriff 5:2d9f3c36bcb9 179 {{-260,140},{-240,100},3},
HenryWTriff 5:2d9f3c36bcb9 180 {{-400,140},{-340,80},2}, //
HenryWTriff 5:2d9f3c36bcb9 181 {{-400,-120},{-320,-200},1}
HenryWTriff 5:2d9f3c36bcb9 182 };
HenryWTriff 5:2d9f3c36bcb9 183
HenryWTriff 5:2d9f3c36bcb9 184 Square_2D Map_1_Out_Of_Bounds_Square[8] = {
HenryWTriff 5:2d9f3c36bcb9 185 //Inside
HenryWTriff 5:2d9f3c36bcb9 186 {{-80,80},{-40,0}},
HenryWTriff 5:2d9f3c36bcb9 187 {{-340,60},{-280,-60}},
HenryWTriff 5:2d9f3c36bcb9 188 {{-280,-20},{-100,-60}},
HenryWTriff 5:2d9f3c36bcb9 189 {{-80,0},{-60,-20}},
HenryWTriff 5:2d9f3c36bcb9 190 //Outside
HenryWTriff 5:2d9f3c36bcb9 191 {{40,160},{60,-220}},
HenryWTriff 5:2d9f3c36bcb9 192 {{-420,-220},{40,-240}},
HenryWTriff 5:2d9f3c36bcb9 193 {{-440,160},{-420,-220}},
HenryWTriff 5:2d9f3c36bcb9 194 {{-420,180},{40,160}}
HenryWTriff 5:2d9f3c36bcb9 195 };
HenryWTriff 5:2d9f3c36bcb9 196
HenryWTriff 5:2d9f3c36bcb9 197 Triangle_2D Map_1_Out_Of_Bounds_Triangle[5] = {
HenryWTriff 5:2d9f3c36bcb9 198 //Inside
HenryWTriff 5:2d9f3c36bcb9 199 {{-60,0},{-40,-20},2},
HenryWTriff 5:2d9f3c36bcb9 200 {{-100,0},{-80,-20},4},
HenryWTriff 5:2d9f3c36bcb9 201 {{-100,-20},{-60,-60},2},
HenryWTriff 5:2d9f3c36bcb9 202 {{-300,-60},{-240,-120},2},
HenryWTriff 5:2d9f3c36bcb9 203 {{-340,-60},{-300,-120},3}
HenryWTriff 5:2d9f3c36bcb9 204 };
HenryWTriff 5:2d9f3c36bcb9 205
HenryWTriff 5:2d9f3c36bcb9 206 Square_2D Map_1_Gates[12] = {
HenryWTriff 5:2d9f3c36bcb9 207 {{-40,0},{40,-10}},
HenryWTriff 5:2d9f3c36bcb9 208 {{-40,80},{40,70}},
HenryWTriff 5:2d9f3c36bcb9 209 {{-80,160},{-70,80}},
HenryWTriff 5:2d9f3c36bcb9 210 {{-160,70},{-80,60}},
HenryWTriff 5:2d9f3c36bcb9 211 {{-200,60},{-190,-20}},
HenryWTriff 5:2d9f3c36bcb9 212 {{-310,160},{-300,60}},
HenryWTriff 5:2d9f3c36bcb9 213 {{-420,10},{-340,0}},
HenryWTriff 5:2d9f3c36bcb9 214 {{-420,-90},{-300, -100}},
HenryWTriff 5:2d9f3c36bcb9 215 {{-300,-100},{-290,-220}},
HenryWTriff 5:2d9f3c36bcb9 216 {{-200,-60},{-190,-220}},
HenryWTriff 5:2d9f3c36bcb9 217 {{-110,-60},{-100,-220}},
HenryWTriff 5:2d9f3c36bcb9 218 {{-100,-40},{40,-60}}
HenryWTriff 5:2d9f3c36bcb9 219 };
HenryWTriff 5:2d9f3c36bcb9 220
HenryWTriff 2:d08b6a1eaf2b 221 //GLOBAL VARIABLES
HenryWTriff 2:d08b6a1eaf2b 222
HenryWTriff 2:d08b6a1eaf2b 223 //Transform
HenryWTriff 2:d08b6a1eaf2b 224 int angle = 0;
HenryWTriff 2:d08b6a1eaf2b 225 Point_2D translation = {0,0};
HenryWTriff 2:d08b6a1eaf2b 226 float squish = 0.15;
HenryWTriff 2:d08b6a1eaf2b 227
HenryWTriff 3:ceed6d026b8b 228 //Vehicle parameters
HenryWTriff 3:ceed6d026b8b 229 float speed = 0;
HenryWTriff 3:ceed6d026b8b 230 float max_speed = 4;
HenryWTriff 4:9f41fc1c2ad1 231 int handling = 2;
HenryWTriff 3:ceed6d026b8b 232
HenryWTriff 5:2d9f3c36bcb9 233 //Mechanics
HenryWTriff 5:2d9f3c36bcb9 234 bool off_track = false;
HenryWTriff 5:2d9f3c36bcb9 235 bool out_of_bounds = false;
HenryWTriff 5:2d9f3c36bcb9 236 int lap_gate = 0;
HenryWTriff 5:2d9f3c36bcb9 237 int laps = 1;
HenryWTriff 5:2d9f3c36bcb9 238 bool direction = true;
HenryWTriff 5:2d9f3c36bcb9 239
HenryWTriff 2:d08b6a1eaf2b 240 //Game parameters
HenryWTriff 4:9f41fc1c2ad1 241 int game_fps = 50;
eencae 0:b7f1f47bb26a 242
eencae 0:b7f1f47bb26a 243 int main()
eencae 0:b7f1f47bb26a 244 {
HenryWTriff 2:d08b6a1eaf2b 245 LCD.init();
HenryWTriff 2:d08b6a1eaf2b 246 Device.init();
HenryWTriff 2:d08b6a1eaf2b 247 while(1) {
HenryWTriff 5:2d9f3c36bcb9 248
HenryWTriff 5:2d9f3c36bcb9 249 //MECHANICS
HenryWTriff 5:2d9f3c36bcb9 250 off_track = Mechanics.Is_Offtrack(translation, Map_1_Off_Track_Square, Map_1_Off_Track_Triangle, Map_1);
HenryWTriff 5:2d9f3c36bcb9 251 out_of_bounds = Mechanics.Is_Out_Of_Bounds(translation, Map_1_Out_Of_Bounds_Square, Map_1_Out_Of_Bounds_Triangle, Map_1);
HenryWTriff 5:2d9f3c36bcb9 252 laps = Mechanics.Get_Laps(laps, Map_1_Gates, Map_1.number_of_gates, translation, lap_gate);
HenryWTriff 5:2d9f3c36bcb9 253 lap_gate = Mechanics.Get_Gate(Map_1_Gates, Map_1.number_of_gates, translation, lap_gate);
HenryWTriff 5:2d9f3c36bcb9 254
HenryWTriff 5:2d9f3c36bcb9 255 //CONTROLS
HenryWTriff 3:ceed6d026b8b 256 angle = Controls.Get_Angle(angle, handling, Device);
HenryWTriff 5:2d9f3c36bcb9 257 translation = Controls.Get_Translation(translation, angle, speed, out_of_bounds, Device);
HenryWTriff 5:2d9f3c36bcb9 258 speed = Controls.Get_Speed(speed, max_speed, off_track, out_of_bounds, Device);
HenryWTriff 5:2d9f3c36bcb9 259
HenryWTriff 5:2d9f3c36bcb9 260 //GRAPHICS
HenryWTriff 5:2d9f3c36bcb9 261 LCD.clear();
HenryWTriff 3:ceed6d026b8b 262 Graphics.Change_Contrast(LCD,Device);
HenryWTriff 5:2d9f3c36bcb9 263 Graphics.Draw_Map(
HenryWTriff 5:2d9f3c36bcb9 264 translation,
HenryWTriff 5:2d9f3c36bcb9 265 angle,
HenryWTriff 5:2d9f3c36bcb9 266 squish,
HenryWTriff 5:2d9f3c36bcb9 267 (Line_2D *) Map_1_Track_Lines,
HenryWTriff 5:2d9f3c36bcb9 268 (Line_2D *)Map_1_Track_Dotted_Lines,
HenryWTriff 5:2d9f3c36bcb9 269 (Line_2D *)Map_1_Walls,
HenryWTriff 5:2d9f3c36bcb9 270 (Point_2D *)Map_1_Flags,
HenryWTriff 5:2d9f3c36bcb9 271 Map_1,
HenryWTriff 5:2d9f3c36bcb9 272 LCD
HenryWTriff 5:2d9f3c36bcb9 273 );
HenryWTriff 5:2d9f3c36bcb9 274 Graphics.Draw_Laps(laps, LCD);
HenryWTriff 5:2d9f3c36bcb9 275 LCD.refresh();
HenryWTriff 5:2d9f3c36bcb9 276 wait((1 / float(game_fps)));
HenryWTriff 2:d08b6a1eaf2b 277 }
HenryWTriff 2:d08b6a1eaf2b 278
HenryWTriff 2:d08b6a1eaf2b 279
eencae 0:b7f1f47bb26a 280 }
eencae 0:b7f1f47bb26a 281