ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el18jgb

Dependencies:   mbed

Committer:
el18jgb
Date:
Thu May 21 13:54:14 2020 +0000
Revision:
19:33c77517cb88
Parent:
18:c600a6545e81
Child:
20:6db651a3cfec
highscore saving and reading from sd card, more testing and better area for collisions based on sprute size;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:b7f1f47bb26a 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
el18jgb 1:1144f48b5965 7 Name:Joe Body
el18jgb 1:1144f48b5965 8 Username:el18jgb
el18jgb 1:1144f48b5965 9 Student ID Number:201215898
el18jgb 1:1144f48b5965 10 Date:11/03/2020
eencae 0:b7f1f47bb26a 11 */
eencae 0:b7f1f47bb26a 12
eencae 0:b7f1f47bb26a 13 // includes
eencae 0:b7f1f47bb26a 14 #include "mbed.h"
eencae 0:b7f1f47bb26a 15 #include "Gamepad.h"
eencae 0:b7f1f47bb26a 16 #include "N5110.h"
el18jgb 4:6f898b000797 17 #include "Aim.h"
el18jgb 2:56b31902c800 18 #include "Heston.h"
el18jgb 5:c37f4ed2cad3 19 #include "Eng.h"
el18jgb 14:66a1965318cb 20 #include "Menu.h"
el18jgb 18:c600a6545e81 21 #include "FXOS8700CQ.h"
el18jgb 19:33c77517cb88 22 #include "SDFileSystem.h"
el18jgb 19:33c77517cb88 23 #include "Highscore.h"
el18jgb 19:33c77517cb88 24
eencae 0:b7f1f47bb26a 25
eencae 0:b7f1f47bb26a 26
eencae 0:b7f1f47bb26a 27 // objects
eencae 0:b7f1f47bb26a 28 Gamepad pad;
eencae 0:b7f1f47bb26a 29 N5110 lcd;
el18jgb 14:66a1965318cb 30 Menu menu;
el18jgb 5:c37f4ed2cad3 31 Eng eng;
el18jgb 18:c600a6545e81 32 FXOS8700CQ acc(I2C_SDA,I2C_SCL);
el18jgb 19:33c77517cb88 33 Highscore hs;
el18jgb 19:33c77517cb88 34 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd");
el18jgb 1:1144f48b5965 35
el18jgb 5:c37f4ed2cad3 36 // flag - must be volatile as changes within ISR
el18jgb 5:c37f4ed2cad3 37 // g_ prefix makes it easier to distinguish it as global
el18jgb 5:c37f4ed2cad3 38 volatile int g_timer_flag = 0;
el18jgb 5:c37f4ed2cad3 39
el18jgb 5:c37f4ed2cad3 40 // function prototypes
el18jgb 5:c37f4ed2cad3 41 void timer_isr();
el18jgb 1:1144f48b5965 42
el18jgb 1:1144f48b5965 43
el18jgb 1:1144f48b5965 44 void init();
el18jgb 1:1144f48b5965 45 void render();
el18jgb 18:c600a6545e81 46 void play(Gamepad &pad, N5110 &lcd, FXOS8700CQ &acc);
el18jgb 1:1144f48b5965 47 //void read_input(Gamepad &pad);
eencae 0:b7f1f47bb26a 48
eencae 0:b7f1f47bb26a 49 int main()
eencae 0:b7f1f47bb26a 50 {
el18jgb 14:66a1965318cb 51 //int fps = 10; // frames per second
el18jgb 14:66a1965318cb 52 //int A_timer = 0;
el18jgb 1:1144f48b5965 53 init(); // initialise and then display welcome screen...
el18jgb 1:1144f48b5965 54 while (1) {
el18jgb 16:7c612029d9c9 55 menu.display(lcd, pad);
el18jgb 16:7c612029d9c9 56 int mode = menu.getmode();
el18jgb 14:66a1965318cb 57 wait(0.1); // and wait for one frame period
el18jgb 16:7c612029d9c9 58 if (mode == 0){
el18jgb 16:7c612029d9c9 59 menu.display(lcd, pad);
el18jgb 16:7c612029d9c9 60 }
el18jgb 14:66a1965318cb 61 if (mode == 1){
el18jgb 18:c600a6545e81 62 play(pad, lcd, acc);
el18jgb 8:0b9a824c75fe 63 }
el18jgb 19:33c77517cb88 64 else if (mode == 2){
el18jgb 19:33c77517cb88 65 menu.highs_screen(lcd, pad, hs, sd);
el18jgb 19:33c77517cb88 66 }
el18jgb 14:66a1965318cb 67 else if (mode == 3){
el18jgb 14:66a1965318cb 68 menu.instructions(lcd, pad);
el18jgb 14:66a1965318cb 69 }
el18jgb 16:7c612029d9c9 70 mode = 0;
el18jgb 1:1144f48b5965 71 }
eencae 0:b7f1f47bb26a 72
eencae 0:b7f1f47bb26a 73 }
eencae 0:b7f1f47bb26a 74
el18jgb 1:1144f48b5965 75 // initialies all classes and libraries
el18jgb 1:1144f48b5965 76 void init()
el18jgb 1:1144f48b5965 77 {
el18jgb 1:1144f48b5965 78 // need to initialise LCD and Gamepad
el18jgb 1:1144f48b5965 79 lcd.init();
el18jgb 1:1144f48b5965 80 pad.init();
el18jgb 18:c600a6545e81 81
el18jgb 18:c600a6545e81 82 acc.init();
el18jgb 5:c37f4ed2cad3 83
el18jgb 5:c37f4ed2cad3 84 eng.init();
el18jgb 18:c600a6545e81 85
el18jgb 1:1144f48b5965 86
el18jgb 1:1144f48b5965 87 }
el18jgb 1:1144f48b5965 88
el18jgb 1:1144f48b5965 89 // this function draws each frame on the LCD
el18jgb 1:1144f48b5965 90 void render()
el18jgb 1:1144f48b5965 91 {
el18jgb 1:1144f48b5965 92 // clear screen, re-draw and refresh
el18jgb 1:1144f48b5965 93 lcd.clear();
el18jgb 5:c37f4ed2cad3 94
el18jgb 5:c37f4ed2cad3 95 eng.draw(lcd);
el18jgb 1:1144f48b5965 96 lcd.refresh();
el18jgb 1:1144f48b5965 97 }
el18jgb 1:1144f48b5965 98
el18jgb 14:66a1965318cb 99
el18jgb 18:c600a6545e81 100 void play(Gamepad &pad, N5110 &lcd, FXOS8700CQ &acc)
el18jgb 14:66a1965318cb 101 {
el18jgb 14:66a1965318cb 102 int A_timer = 0;
el18jgb 16:7c612029d9c9 103 eng.init();
el18jgb 14:66a1965318cb 104 while (1) {
el18jgb 14:66a1965318cb 105 //read_input(pad);
el18jgb 14:66a1965318cb 106 int fire = 0;
el18jgb 14:66a1965318cb 107 if (A_timer <= 0){
el18jgb 14:66a1965318cb 108 fire = 0;
el18jgb 14:66a1965318cb 109 if (pad.A_held()){
el18jgb 14:66a1965318cb 110 fire = 1;
el18jgb 14:66a1965318cb 111 A_timer = 6;
el18jgb 14:66a1965318cb 112
el18jgb 14:66a1965318cb 113 }
el18jgb 14:66a1965318cb 114 }
el18jgb 14:66a1965318cb 115
el18jgb 14:66a1965318cb 116
el18jgb 18:c600a6545e81 117 eng.update(pad, fire, lcd, acc);
el18jgb 14:66a1965318cb 118 render();
el18jgb 14:66a1965318cb 119 wait(0.1);
el18jgb 14:66a1965318cb 120
el18jgb 19:33c77517cb88 121 //if (fire == 1){
el18jgb 19:33c77517cb88 122 int x = eng.checkgame(lcd);
el18jgb 19:33c77517cb88 123 if (x == 1) {
el18jgb 19:33c77517cb88 124 eng.gameover(lcd, pad, hs, sd);
el18jgb 19:33c77517cb88 125 break;
el18jgb 19:33c77517cb88 126 }
el18jgb 19:33c77517cb88 127 //}
el18jgb 15:01a69bdb85e9 128
el18jgb 14:66a1965318cb 129 A_timer--;
el18jgb 14:66a1965318cb 130
el18jgb 14:66a1965318cb 131 eng.tik();
el18jgb 14:66a1965318cb 132 //printf("fire = %d\n", fire);
el18jgb 14:66a1965318cb 133 //printf("shot cooldown = %d\n", A_timer);
el18jgb 14:66a1965318cb 134
el18jgb 14:66a1965318cb 135 }
el18jgb 14:66a1965318cb 136 }