Albert Tan Mulligan Submission

Dependencies:   mbed

Committer:
Albutt
Date:
Mon May 18 15:42:26 2020 +0000
Revision:
4:b16b6078a432
Parent:
3:fcc9cf213a61
Child:
5:51fd6635141f
Bullets w/o despawn

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