ELEC2645 (2018/19) / Mbed 2 deprecated henririgby98

Dependencies:   mbed

Committer:
henririgby98
Date:
Wed May 08 22:32:36 2019 +0000
Revision:
8:3c15554e6723
Parent:
7:e0cab3e73df9
Child:
9:436b88b70fdd
complete game

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