Albert Tan Mulligan Submission

Dependencies:   mbed

Committer:
Albutt
Date:
Fri May 22 15:46:14 2020 +0000
Revision:
7:0434857199cf
Parent:
6:546eba371942
Child:
8:0c6d6ed55851
Bullets in Vectors for infinite Vectors;

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
Albutt 1:a52187d01a78 7 Name: Albert Tan Mulligan
Albutt 1:a52187d01a78 8 Username: el18ajst
Albutt 1:a52187d01a78 9 Student ID Number:201241153
Albutt 1:a52187d01a78 10 Date:10/4/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"
Albutt 2:c25ec0da7636 17 #include "Character.h"
Albutt 4:b16b6078a432 18 #include "Bullets.h"
Albutt 5:51fd6635141f 19 #include "Enemy.h"
Albutt 6:546eba371942 20 #include <vector>
Albutt 2:c25ec0da7636 21 Serial pc(USBTX, USBRX);
Albutt 3:fcc9cf213a61 22 //STRUCTS
Albutt 3:fcc9cf213a61 23 struct State {
Albutt 3:fcc9cf213a61 24 int number;
Albutt 3:fcc9cf213a61 25 int next_state[2];
Albutt 3:fcc9cf213a61 26 };
Albutt 3:fcc9cf213a61 27
Albutt 3:fcc9cf213a61 28 //OBJECTS
eencae 0:b7f1f47bb26a 29 Gamepad pad;
eencae 0:b7f1f47bb26a 30 N5110 lcd;
Albutt 2:c25ec0da7636 31 Character p1;
Albutt 7:0434857199cf 32 vector<Bullets> shots;
Albutt 6:546eba371942 33 volatile int enemy_number = 1;
Albutt 6:546eba371942 34 vector<Enemy> enemies;
Albutt 3:fcc9cf213a61 35 //Variables
Albutt 3:fcc9cf213a61 36 State fsm[3] = {
Albutt 3:fcc9cf213a61 37 {0,{1,1}},
Albutt 3:fcc9cf213a61 38 {1,{2,2}},
Albutt 3:fcc9cf213a61 39 {2,{1,0}}
Albutt 3:fcc9cf213a61 40 };
Albutt 3:fcc9cf213a61 41 volatile int Current_State = 0;
Albutt 6:546eba371942 42 volatile int timer = 0;
Albutt 3:fcc9cf213a61 43 //PROTOTYPES
Albutt 3:fcc9cf213a61 44 void menu();
Albutt 3:fcc9cf213a61 45 void GameRun();
Albutt 3:fcc9cf213a61 46 void Pause();
Albutt 3:fcc9cf213a61 47 void LevelUp();
Albutt 3:fcc9cf213a61 48 //FUNCTIONS
eencae 0:b7f1f47bb26a 49 int main()
Albutt 3:fcc9cf213a61 50 {
Albutt 3:fcc9cf213a61 51 //pc.printf("Main Open");
Albutt 3:fcc9cf213a61 52 //SETUPS
Albutt 3:fcc9cf213a61 53 pad.init();
Albutt 2:c25ec0da7636 54 lcd.init();
Albutt 3:fcc9cf213a61 55 lcd.clear();
Albutt 3:fcc9cf213a61 56 //testing CoolTerm
Albutt 3:fcc9cf213a61 57 //pc.printf("CoolTerm is Connected\n");
Albutt 3:fcc9cf213a61 58 //pc.printf("CurrentState = %d\n", Current_State);
Albutt 2:c25ec0da7636 59
Albutt 3:fcc9cf213a61 60 while(1){
Albutt 3:fcc9cf213a61 61 if(Current_State == 0){
Albutt 3:fcc9cf213a61 62 menu();
Albutt 3:fcc9cf213a61 63 }
Albutt 3:fcc9cf213a61 64 else if (Current_State == 1){
Albutt 3:fcc9cf213a61 65 GameRun();
Albutt 3:fcc9cf213a61 66 }
Albutt 3:fcc9cf213a61 67 else if (Current_State ==2){
Albutt 3:fcc9cf213a61 68 Pause();
Albutt 3:fcc9cf213a61 69 }
Albutt 3:fcc9cf213a61 70 }
Albutt 3:fcc9cf213a61 71 }
Albutt 3:fcc9cf213a61 72
Albutt 3:fcc9cf213a61 73 void menu(){
Albutt 3:fcc9cf213a61 74 //pc.printf("Menu Open");
Albutt 3:fcc9cf213a61 75 lcd.printString(" BoxHead ",0,1);
Albutt 4:b16b6078a432 76 lcd.printString(" Choose your",0,3);
Albutt 4:b16b6078a432 77 lcd.printString(" Weapon",0,4);
Albutt 3:fcc9cf213a61 78 lcd.refresh();
Albutt 3:fcc9cf213a61 79 while (1) {
Albutt 3:fcc9cf213a61 80 //pc.printf("While Loop + %d", g_pad.Button_A_flag);
Albutt 3:fcc9cf213a61 81 if (pad.A_pressed()) {
Albutt 3:fcc9cf213a61 82 //pc.printf("Button_A");
Albutt 3:fcc9cf213a61 83 Current_State = fsm[0].next_state[0];
Albutt 6:546eba371942 84 enemies.push_back(Enemy(timer));
Albutt 3:fcc9cf213a61 85 p1.init(40,22);
Albutt 3:fcc9cf213a61 86 return;
Albutt 3:fcc9cf213a61 87 }
Albutt 3:fcc9cf213a61 88 if (pad.X_pressed()) {
Albutt 3:fcc9cf213a61 89 //pc.printf("Button_X");
Albutt 3:fcc9cf213a61 90 Current_State = fsm[0].next_state[0];
Albutt 6:546eba371942 91 enemies.push_back(Enemy(timer));
Albutt 3:fcc9cf213a61 92 p1.init(40,22);
Albutt 3:fcc9cf213a61 93 return;
Albutt 3:fcc9cf213a61 94 }
Albutt 3:fcc9cf213a61 95 if (pad.Y_pressed()) {
Albutt 3:fcc9cf213a61 96 //pc.printf("Button_Y");
Albutt 3:fcc9cf213a61 97 Current_State = fsm[0].next_state[0];
Albutt 6:546eba371942 98 enemies.push_back(Enemy(timer));
Albutt 3:fcc9cf213a61 99 p1.init(40,22);
Albutt 3:fcc9cf213a61 100 return;
Albutt 3:fcc9cf213a61 101 }
Albutt 4:b16b6078a432 102 sleep();
Albutt 3:fcc9cf213a61 103 }
Albutt 3:fcc9cf213a61 104 }
Albutt 3:fcc9cf213a61 105
Albutt 3:fcc9cf213a61 106 void GameRun(){
Albutt 3:fcc9cf213a61 107 //pc.printf("Game Open");
Albutt 2:c25ec0da7636 108 Direction dir = pad.get_direction();
Albutt 2:c25ec0da7636 109 float mag = pad.get_mag();
Albutt 2:c25ec0da7636 110 while(1){
Albutt 6:546eba371942 111 timer++;
Albutt 3:fcc9cf213a61 112 //movement code
Albutt 2:c25ec0da7636 113 dir = pad.get_direction();
Albutt 2:c25ec0da7636 114 mag = pad.get_mag();
Albutt 4:b16b6078a432 115
Albutt 4:b16b6078a432 116 if (pad.A_pressed()) {
Albutt 7:0434857199cf 117 shots.push_back(Bullets(p1.get_x()+2, p1.get_y()+2, dir));
Albutt 4:b16b6078a432 118 }
Albutt 6:546eba371942 119 if (enemies.size()== 0) {
Albutt 6:546eba371942 120 LevelUp();
Albutt 4:b16b6078a432 121 }
Albutt 2:c25ec0da7636 122 p1.update(dir, mag);
Albutt 6:546eba371942 123 for(int i = 0; i<enemies.size(); i++){
Albutt 6:546eba371942 124 enemies.at(i).update(p1.get_x()+2, p1.get_y()+2);
Albutt 6:546eba371942 125 }
Albutt 7:0434857199cf 126 for(int i = 0; i<shots.size(); i++){
Albutt 7:0434857199cf 127 if(shots.at(i).get_x()>84||shots.at(i).get_x()<0||shots.at(i).get_y()>48||shots.at(i).get_x()<0){
Albutt 7:0434857199cf 128 shots.erase(shots.begin()+i);
Albutt 7:0434857199cf 129 }
Albutt 7:0434857199cf 130 shots.at(i).update();
Albutt 7:0434857199cf 131 }
Albutt 4:b16b6078a432 132 lcd.clear();
Albutt 6:546eba371942 133 for(int i = 0; i<enemies.size(); i++){
Albutt 6:546eba371942 134 enemies.at(i).draw(lcd);
Albutt 6:546eba371942 135 }
Albutt 7:0434857199cf 136 for(int i = 0; i<shots.size(); i++){
Albutt 7:0434857199cf 137 shots.at(i).draw(lcd);
Albutt 7:0434857199cf 138 }
Albutt 2:c25ec0da7636 139 p1.draw(lcd);
Albutt 2:c25ec0da7636 140 lcd.refresh();
Albutt 4:b16b6078a432 141 wait(1.0f/10.0f);
Albutt 3:fcc9cf213a61 142 if (pad.start_pressed()) {
Albutt 3:fcc9cf213a61 143 Current_State = fsm[Current_State].next_state[0];
Albutt 3:fcc9cf213a61 144 return;
Albutt 3:fcc9cf213a61 145
Albutt 3:fcc9cf213a61 146 }
Albutt 2:c25ec0da7636 147 }
eencae 0:b7f1f47bb26a 148 }
Albutt 3:fcc9cf213a61 149 void Pause(){
Albutt 4:b16b6078a432 150 lcd.printString(" PAUSED ",0,1);
Albutt 3:fcc9cf213a61 151 lcd.refresh();
Albutt 3:fcc9cf213a61 152 // put the MCU to sleep until an interrupt wakes it up
Albutt 3:fcc9cf213a61 153 if (pad.start_pressed()) {
Albutt 3:fcc9cf213a61 154 Current_State = fsm[Current_State].next_state[0];
Albutt 3:fcc9cf213a61 155 return;
eencae 0:b7f1f47bb26a 156
Albutt 3:fcc9cf213a61 157 }
Albutt 3:fcc9cf213a61 158 if (pad.B_pressed()) {
Albutt 3:fcc9cf213a61 159 Current_State = fsm[Current_State].next_state[1];
Albutt 3:fcc9cf213a61 160 lcd.clear();
Albutt 3:fcc9cf213a61 161 return;
Albutt 3:fcc9cf213a61 162
Albutt 3:fcc9cf213a61 163 }
Albutt 3:fcc9cf213a61 164 sleep();
Albutt 3:fcc9cf213a61 165 }
Albutt 3:fcc9cf213a61 166 void LevelUp(){
Albutt 3:fcc9cf213a61 167
Albutt 6:546eba371942 168 lcd.printString("NEXT LEVEL ",0,1);
Albutt 6:546eba371942 169 lcd.refresh();
Albutt 3:fcc9cf213a61 170 wait(2.0);
Albutt 6:546eba371942 171 enemy_number *= 2;
Albutt 6:546eba371942 172 for(int i = 0; i < enemy_number; i++){
Albutt 6:546eba371942 173 enemies.push_back(Enemy(timer));
Albutt 6:546eba371942 174 }
Albutt 3:fcc9cf213a61 175 p1.level_up();
Albutt 6:546eba371942 176 Current_State = 1;
Albutt 3:fcc9cf213a61 177 return;
Albutt 3:fcc9cf213a61 178 }