ELEC2645 (2018/19) / Mbed 2 deprecated henririgby98

Dependencies:   mbed

Committer:
henririgby98
Date:
Wed May 08 22:53:22 2019 +0000
Revision:
9:436b88b70fdd
Parent:
8:3c15554e6723
Child:
10:2b52d7e06712
Menu (start)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
henririgby98 4:d744920089ea 1 ///////// pre-processor directives ////////
henririgby98 2:794ed187ffcd 2 #include "mbed.h"
henririgby98 2:794ed187ffcd 3 #include "Gamepad.h"
henririgby98 2:794ed187ffcd 4 #include "N5110.h"
henririgby98 4:d744920089ea 5 #include "SpaceRebEngine.h"
henririgby98 2:794ed187ffcd 6
henririgby98 5:0da65740cd5e 7 #define SPACEINVADER_WIDTH 8
henririgby98 5:0da65740cd5e 8 #define SPACEINVADER_HEIGHT 11
henririgby98 4:d744920089ea 9 #define MISSILES_SIZE 2
henririgby98 4:d744920089ea 10 #define MISSILES_SPEED 3
henririgby98 4:d744920089ea 11
henririgby98 4:d744920089ea 12 /////////////// structs /////////////////
henririgby98 4:d744920089ea 13 struct UserInput {
henririgby98 4:d744920089ea 14 Direction d;
henririgby98 4:d744920089ea 15 float mag;
henririgby98 4:d744920089ea 16 };
henririgby98 4:d744920089ea 17 /////////////// objects ///////////////
henririgby98 2:794ed187ffcd 18 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
henririgby98 2:794ed187ffcd 19 Gamepad pad;
henririgby98 4:d744920089ea 20 SpaceRebEngine spacerebellion;
henririgby98 4:d744920089ea 21
henririgby98 4:d744920089ea 22 ///////////// prototypes ///////////////
henririgby98 4:d744920089ea 23 void init();
henririgby98 4:d744920089ea 24 void update_game(UserInput input);
henririgby98 4:d744920089ea 25 void render();
henririgby98 4:d744920089ea 26 void welcome();
henririgby98 9:436b88b70fdd 27 void menu();
henririgby98 7:e0cab3e73df9 28 void Game1Over();
henririgby98 8:3c15554e6723 29 void x1_1();
henririgby98 8:3c15554e6723 30 void x1_2();
henririgby98 8:3c15554e6723 31 void x2_1();
henririgby98 8:3c15554e6723 32 void x2_2();
henririgby98 8:3c15554e6723 33 void x3_1();
henririgby98 8:3c15554e6723 34 void x3_2();
henririgby98 7:e0cab3e73df9 35 ///////////// gloabal variable ////////////////
henririgby98 7:e0cab3e73df9 36 bool end = false;
henririgby98 7:e0cab3e73df9 37 float counter = 1.0;
henririgby98 7:e0cab3e73df9 38 int score = 0;
henririgby98 7:e0cab3e73df9 39 int speed = MISSILES_SPEED;
henririgby98 8:3c15554e6723 40 int i=0;
henririgby98 8:3c15554e6723 41 int X_1[11][11] = {
henririgby98 8:3c15554e6723 42 { 1,1,0,0,0,0,0,0,0,0,0 },
henririgby98 8:3c15554e6723 43 { 1,1,1,0,0,0,0,0,0,0,0 },
henririgby98 8:3c15554e6723 44 { 0,1,1,1,0,0,0,0,0,0,0 },
henririgby98 8:3c15554e6723 45 { 0,0,1,1,1,0,0,0,0,0,0 },
henririgby98 8:3c15554e6723 46 { 0,0,0,1,1,1,0,0,0,0,0 },
henririgby98 8:3c15554e6723 47 { 0,0,0,0,1,1,1,0,0,0,0 },
henririgby98 8:3c15554e6723 48 { 0,0,0,0,0,1,1,1,0,0,0 },
henririgby98 8:3c15554e6723 49 { 0,0,0,0,0,0,1,1,1,0,0 },
henririgby98 8:3c15554e6723 50 { 0,0,0,0,0,0,0,1,1,1,0 },
henririgby98 8:3c15554e6723 51 { 0,0,0,0,0,0,0,0,1,1,1 },
henririgby98 8:3c15554e6723 52 { 0,0,0,0,0,0,0,0,0,1,1 },
henririgby98 8:3c15554e6723 53 };
henririgby98 8:3c15554e6723 54 int X_2[11][11] = {
henririgby98 8:3c15554e6723 55 { 1,1,0,0,0,0,0,0,0,1,1 },
henririgby98 8:3c15554e6723 56 { 1,1,1,0,0,0,0,0,1,1,1 },
henririgby98 8:3c15554e6723 57 { 0,1,1,1,0,0,0,1,1,1,0 },
henririgby98 8:3c15554e6723 58 { 0,0,1,1,1,0,1,1,1,0,0 },
henririgby98 8:3c15554e6723 59 { 0,0,0,1,1,1,1,1,0,0,0 },
henririgby98 8:3c15554e6723 60 { 0,0,0,0,1,1,1,0,0,0,0 },
henririgby98 8:3c15554e6723 61 { 0,0,0,1,1,1,1,1,0,0,0 },
henririgby98 8:3c15554e6723 62 { 0,0,1,1,1,0,1,1,1,0,0 },
henririgby98 8:3c15554e6723 63 { 0,1,1,1,0,0,0,1,1,1,0 },
henririgby98 8:3c15554e6723 64 { 1,1,1,0,0,0,0,0,1,1,1 },
henririgby98 8:3c15554e6723 65 { 1,1,0,0,0,0,0,0,0,1,1 },
henririgby98 8:3c15554e6723 66 };
henririgby98 8:3c15554e6723 67 int invader[8][11] = {
henririgby98 8:3c15554e6723 68 { 0,0,1,0,0,0,0,0,1,0,0 },
henririgby98 8:3c15554e6723 69 { 0,0,0,1,0,0,0,1,0,0,0 },
henririgby98 8:3c15554e6723 70 { 0,0,1,1,1,1,1,1,1,0,0 },
henririgby98 8:3c15554e6723 71 { 0,1,1,0,1,1,1,0,1,1,0 },
henririgby98 8:3c15554e6723 72 { 1,1,1,1,1,1,1,1,1,1,1 },
henririgby98 8:3c15554e6723 73 { 1,0,1,1,1,1,1,1,1,0,1 },
henririgby98 8:3c15554e6723 74 { 1,0,1,0,0,0,0,0,1,0,1 },
henririgby98 8:3c15554e6723 75 { 0,0,0,1,1,0,1,1,0,0,0 },
henririgby98 8:3c15554e6723 76 };
henririgby98 4:d744920089ea 77 ///////////// functions ////////////////
henririgby98 4:d744920089ea 78 int main()
henririgby98 4:d744920089ea 79 {
henririgby98 7:e0cab3e73df9 80 start:
henririgby98 7:e0cab3e73df9 81 end = false;
henririgby98 4:d744920089ea 82 int fps = 8; // frames per second
henririgby98 7:e0cab3e73df9 83
henririgby98 4:d744920089ea 84 init(); // initialise and then display welcome screen...
henririgby98 4:d744920089ea 85 welcome(); // waiting for the user to start
henririgby98 2:794ed187ffcd 86
henririgby98 9:436b88b70fdd 87 menu();
henririgby98 9:436b88b70fdd 88
henririgby98 4:d744920089ea 89 render(); // first draw the initial frame
henririgby98 4:d744920089ea 90 wait(1.0f/fps); // and wait for one frame period
henririgby98 4:d744920089ea 91
henririgby98 4:d744920089ea 92 // game loop - read input, update the game state and render the display
henririgby98 7:e0cab3e73df9 93 while (!end) {
henririgby98 4:d744920089ea 94 spacerebellion.read_input(pad);
henririgby98 4:d744920089ea 95 spacerebellion.update(pad);
henririgby98 4:d744920089ea 96 render();
henririgby98 7:e0cab3e73df9 97 end = spacerebellion.game_end();
henririgby98 4:d744920089ea 98 wait(1.0f/fps);
henririgby98 7:e0cab3e73df9 99 counter = counter + 1/8;
henririgby98 4:d744920089ea 100 }
henririgby98 7:e0cab3e73df9 101 lcd.clear();
henririgby98 8:3c15554e6723 102 i = 0;
henririgby98 8:3c15554e6723 103 while(i < 200) {
henririgby98 8:3c15554e6723 104 lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_BLACK);
henririgby98 8:3c15554e6723 105 lcd.refresh();
henririgby98 8:3c15554e6723 106 i++;
henririgby98 8:3c15554e6723 107 }
henririgby98 8:3c15554e6723 108 lcd.clear();
henririgby98 8:3c15554e6723 109 i = 0;
henririgby98 8:3c15554e6723 110 while(i < 200) {
henririgby98 8:3c15554e6723 111 x1_1();
henririgby98 8:3c15554e6723 112 lcd.refresh();
henririgby98 8:3c15554e6723 113 pad.tone(1200.0,0.2);
henririgby98 8:3c15554e6723 114 i++;
henririgby98 8:3c15554e6723 115 }
henririgby98 8:3c15554e6723 116 i = 0;
henririgby98 8:3c15554e6723 117 while(i < 200) {
henririgby98 8:3c15554e6723 118 x1_2();
henririgby98 8:3c15554e6723 119 lcd.refresh();
henririgby98 8:3c15554e6723 120 pad.tone(1500.0,0.2);
henririgby98 8:3c15554e6723 121 i++;
henririgby98 8:3c15554e6723 122 }
henririgby98 8:3c15554e6723 123 i = 0;
henririgby98 8:3c15554e6723 124 while(i < 200) {
henririgby98 8:3c15554e6723 125 x2_1();
henririgby98 8:3c15554e6723 126 lcd.refresh();
henririgby98 8:3c15554e6723 127 pad.tone(1200.0,0.2);
henririgby98 8:3c15554e6723 128 i++;
henririgby98 8:3c15554e6723 129 }
henririgby98 8:3c15554e6723 130 i = 0;
henririgby98 8:3c15554e6723 131 while(i < 200) {
henririgby98 8:3c15554e6723 132 x2_2();
henririgby98 8:3c15554e6723 133 lcd.refresh();
henririgby98 8:3c15554e6723 134 pad.tone(1500.0,0.2);
henririgby98 8:3c15554e6723 135 i++;
henririgby98 8:3c15554e6723 136 }
henririgby98 8:3c15554e6723 137 i = 0;
henririgby98 8:3c15554e6723 138 while(i < 200) {
henririgby98 8:3c15554e6723 139 x3_1();
henririgby98 8:3c15554e6723 140 lcd.refresh();
henririgby98 8:3c15554e6723 141 pad.tone(1200.0,0.2);
henririgby98 8:3c15554e6723 142 i++;
henririgby98 8:3c15554e6723 143 }
henririgby98 8:3c15554e6723 144 i = 0;
henririgby98 8:3c15554e6723 145 while(i < 200) {
henririgby98 8:3c15554e6723 146 x3_2();
henririgby98 8:3c15554e6723 147 lcd.refresh();
henririgby98 8:3c15554e6723 148 pad.tone(1500.0,0.2);
henririgby98 8:3c15554e6723 149 i++;
henririgby98 8:3c15554e6723 150 }
henririgby98 8:3c15554e6723 151 lcd.clear();
henririgby98 7:e0cab3e73df9 152 Game1Over();
henririgby98 7:e0cab3e73df9 153 goto start;
henririgby98 4:d744920089ea 154 }
henririgby98 4:d744920089ea 155
henririgby98 4:d744920089ea 156 // initialies all classes and libraries
henririgby98 4:d744920089ea 157 void init()
henririgby98 4:d744920089ea 158 {
henririgby98 4:d744920089ea 159 // need to initialise LCD and Gamepad
henririgby98 4:d744920089ea 160 lcd.init();
henririgby98 4:d744920089ea 161 pad.init();
henririgby98 4:d744920089ea 162
henririgby98 4:d744920089ea 163 // initialise the game with correct ball and paddle sizes
henririgby98 4:d744920089ea 164 spacerebellion.init(SPACEINVADER_WIDTH,SPACEINVADER_HEIGHT,MISSILES_SIZE,MISSILES_SPEED);
henririgby98 4:d744920089ea 165
henririgby98 4:d744920089ea 166 }
henririgby98 2:794ed187ffcd 167
henririgby98 4:d744920089ea 168 // this function draws each frame on the LCD
henririgby98 4:d744920089ea 169 void render()
henririgby98 4:d744920089ea 170 {
henririgby98 4:d744920089ea 171 // clear screen, re-draw and refresh
henririgby98 4:d744920089ea 172 lcd.clear();
henririgby98 4:d744920089ea 173 spacerebellion.draw(lcd);
henririgby98 4:d744920089ea 174 lcd.refresh();
henririgby98 4:d744920089ea 175 }
henririgby98 4:d744920089ea 176
henririgby98 4:d744920089ea 177 // simple splash screen displayed on start-up
henririgby98 4:d744920089ea 178 void welcome() {
henririgby98 4:d744920089ea 179
henririgby98 8:3c15554e6723 180 lcd.printString(" Space ",0,1);
henririgby98 8:3c15554e6723 181 lcd.printString(" Rebellion! ",0,2);
henririgby98 8:3c15554e6723 182 lcd.printString(" Press Start...",0,4);
henririgby98 8:3c15554e6723 183 lcd.drawSprite(8,3,8,11,(int *)invader); //adds spaceinvader into top left corner
henririgby98 8:3c15554e6723 184 lcd.drawSprite(WIDTH - 16,3,8,11,(int *)invader); //adds spaceinvader into top right corner
henririgby98 4:d744920089ea 185 lcd.refresh();
henririgby98 4:d744920089ea 186
henririgby98 4:d744920089ea 187 // wait flashing LEDs until start button is pressed
henririgby98 4:d744920089ea 188 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
henririgby98 4:d744920089ea 189 pad.leds_on();
henririgby98 4:d744920089ea 190 wait(0.1);
henririgby98 4:d744920089ea 191 pad.leds_off();
henririgby98 4:d744920089ea 192 wait(0.1);
henririgby98 2:794ed187ffcd 193 }
henririgby98 9:436b88b70fdd 194 lcd.clear();
henririgby98 9:436b88b70fdd 195 lcd.refresh();
henririgby98 9:436b88b70fdd 196 }
henririgby98 9:436b88b70fdd 197
henririgby98 9:436b88b70fdd 198 void menu() {
henririgby98 9:436b88b70fdd 199
henririgby98 9:436b88b70fdd 200 lcd.printString(" MENU ",0,0);
henririgby98 9:436b88b70fdd 201 lcd.printString("A ==> Story ",0,1);
henririgby98 9:436b88b70fdd 202 lcd.printString("B ==> Play ",0,2);
henririgby98 9:436b88b70fdd 203 lcd.printString("X ==> Controls ",0,3);
henririgby98 9:436b88b70fdd 204 lcd.printString("Y ==> Credits ",0,4);
henririgby98 9:436b88b70fdd 205 lcd.refresh();
henririgby98 9:436b88b70fdd 206
henririgby98 9:436b88b70fdd 207 // wait flashing LEDs until start button is pressed
henririgby98 9:436b88b70fdd 208 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
henririgby98 9:436b88b70fdd 209 pad.leds_on();
henririgby98 9:436b88b70fdd 210 wait(0.1);
henririgby98 9:436b88b70fdd 211 pad.leds_off();
henririgby98 9:436b88b70fdd 212 wait(0.1);
henririgby98 9:436b88b70fdd 213 }
henririgby98 4:d744920089ea 214
henririgby98 2:794ed187ffcd 215 }
henririgby98 7:e0cab3e73df9 216
henririgby98 7:e0cab3e73df9 217 void Game1Over() {
henririgby98 7:e0cab3e73df9 218 lcd.printString(" You died! ",0,1);
henririgby98 7:e0cab3e73df9 219 lcd.printString(" Score =",0,2);
henririgby98 7:e0cab3e73df9 220 spacerebellion.print_scores(lcd);
henririgby98 8:3c15554e6723 221 lcd.drawSprite(5,3,11,11,(int *)X_2);
henririgby98 8:3c15554e6723 222 lcd.drawSprite(WIDTH - 13,3,11,11,(int *)X_2);
henririgby98 8:3c15554e6723 223 lcd.printString(" Press BACK...",0,4);
henririgby98 7:e0cab3e73df9 224 lcd.refresh();
henririgby98 7:e0cab3e73df9 225 // wait flashing LEDs until start button is pressed
henririgby98 7:e0cab3e73df9 226 while ( pad.check_event(Gamepad::BACK_PRESSED) == false) {
henririgby98 7:e0cab3e73df9 227 pad.leds_on();
henririgby98 7:e0cab3e73df9 228 wait(0.1);
henririgby98 7:e0cab3e73df9 229 pad.leds_off();
henririgby98 7:e0cab3e73df9 230 wait(0.1);
henririgby98 7:e0cab3e73df9 231 }
henririgby98 7:e0cab3e73df9 232
henririgby98 7:e0cab3e73df9 233 }
henririgby98 7:e0cab3e73df9 234
henririgby98 8:3c15554e6723 235 void x1_1() {
henririgby98 8:3c15554e6723 236 lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT);
henririgby98 8:3c15554e6723 237 lcd.drawSprite(WIDTH/2 - 27,HEIGHT/2 - 6,11,11,(int *)X_1);
henririgby98 8:3c15554e6723 238 }
henririgby98 8:3c15554e6723 239
henririgby98 8:3c15554e6723 240 void x1_2() {
henririgby98 8:3c15554e6723 241 lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT);
henririgby98 8:3c15554e6723 242 lcd.drawSprite(WIDTH/2 - 27,HEIGHT/2 - 6,11,11,(int *)X_2);
henririgby98 8:3c15554e6723 243 }
henririgby98 8:3c15554e6723 244
henririgby98 8:3c15554e6723 245 void x2_1() {
henririgby98 8:3c15554e6723 246 lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT);
henririgby98 8:3c15554e6723 247 lcd.drawSprite(WIDTH/2 - 6,HEIGHT/2 - 6,11,11,(int *)X_1);
henririgby98 8:3c15554e6723 248 }
henririgby98 8:3c15554e6723 249
henririgby98 8:3c15554e6723 250 void x2_2() {
henririgby98 8:3c15554e6723 251 lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT);
henririgby98 8:3c15554e6723 252 lcd.drawSprite(WIDTH/2 - 6,HEIGHT/2 - 6,11,11,(int *)X_2);
henririgby98 8:3c15554e6723 253 }
henririgby98 8:3c15554e6723 254
henririgby98 8:3c15554e6723 255 void x3_1() {
henririgby98 8:3c15554e6723 256 lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT);
henririgby98 8:3c15554e6723 257 lcd.drawSprite(WIDTH/2 + 15,HEIGHT/2 - 6,11,11,(int *)X_1);
henririgby98 8:3c15554e6723 258 }
henririgby98 8:3c15554e6723 259
henririgby98 8:3c15554e6723 260 void x3_2() {
henririgby98 8:3c15554e6723 261 lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT);
henririgby98 8:3c15554e6723 262 lcd.drawSprite(WIDTH/2 + 15,HEIGHT/2 - 6,11,11,(int *)X_2);
henririgby98 8:3c15554e6723 263 }