Laila Al Badwawi 200906179 SpaceInvaders I declare this my own independent work and understand the university rules on plagiarism.

Dependencies:   mbed

Committer:
fy14lkaa
Date:
Sat Apr 27 15:48:20 2019 +0000
Revision:
57:45c5de9cefdf
Parent:
54:095eae44895b
Child:
91:f9e2ff484014
added draw function for the alien in space invaders engine.cpp .

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fy14lkaa 3:985fab783b92 1 ///////// pre-processor directives ////////
fy14lkaa 0:e2af4c8e462e 2 #include "mbed.h"
fy14lkaa 0:e2af4c8e462e 3 #include "Gamepad.h"
fy14lkaa 0:e2af4c8e462e 4 #include "N5110.h"
fy14lkaa 8:eec0d7fc365f 5 #include "SpaceInvadersEngine.h"
fy14lkaa 54:095eae44895b 6
fy14lkaa 8:eec0d7fc365f 7
fy14lkaa 54:095eae44895b 8 /*#ifdef WITH_TESTING
fy14lkaa 43:df52eec1a127 9 # include "tests.h"
fy14lkaa 54:095eae44895b 10 #endif*/
fy14lkaa 0:e2af4c8e462e 11
fy14lkaa 5:476696df08dd 12 // structs //
fy14lkaa 0:e2af4c8e462e 13 struct UserInput {
fy14lkaa 0:e2af4c8e462e 14 Direction d;
fy14lkaa 0:e2af4c8e462e 15 float mag;
fy14lkaa 54:095eae44895b 16
fy14lkaa 0:e2af4c8e462e 17 };
fy14lkaa 5:476696df08dd 18
fy14lkaa 13:9d6ee753eca6 19 ////////////// objects ///////////////
fy14lkaa 50:f538885a788b 20 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
fy14lkaa 0:e2af4c8e462e 21 Gamepad pad;
fy14lkaa 12:45b1249b3d9a 22 SpaceInvadersEngine space;
fy14lkaa 12:45b1249b3d9a 23
fy14lkaa 13:9d6ee753eca6 24
fy14lkaa 3:985fab783b92 25 ///////////// prototypes ///////////////
fy14lkaa 0:e2af4c8e462e 26 void init();
fy14lkaa 0:e2af4c8e462e 27 void update_game(UserInput input);
fy14lkaa 0:e2af4c8e462e 28 void render();
fy14lkaa 0:e2af4c8e462e 29 void welcome();
fy14lkaa 12:45b1249b3d9a 30
fy14lkaa 13:9d6ee753eca6 31
fy14lkaa 3:985fab783b92 32 const int bullet[4][10] = {
fy14lkaa 3:985fab783b92 33 { 0,0,0,0,0,1,1,1,0,0 },
fy14lkaa 3:985fab783b92 34 { 0,0,0,0,0,1,1,1,0,0 },
fy14lkaa 3:985fab783b92 35 { 0,0,0,1,1,1,1,0,0,0 },
fy14lkaa 3:985fab783b92 36 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 37 };
fy14lkaa 13:9d6ee753eca6 38
fy14lkaa 13:9d6ee753eca6 39
fy14lkaa 28:4786e81ce3e3 40 const int Alien[12][10] = {
fy14lkaa 3:985fab783b92 41 { 0,0,0,0,0,1,1,1,0,0 },
fy14lkaa 3:985fab783b92 42 { 0,0,0,0,0,1,1,1,0,0 },
fy14lkaa 3:985fab783b92 43 { 0,0,0,1,1,1,1,0,0,0 },
fy14lkaa 3:985fab783b92 44 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 45 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 46 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 47 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 48 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 49 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 50 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 51 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 52 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 0:e2af4c8e462e 53
fy14lkaa 3:985fab783b92 54 };
fy14lkaa 12:45b1249b3d9a 55
fy14lkaa 5:476696df08dd 56
fy14lkaa 5:476696df08dd 57
fy14lkaa 5:476696df08dd 58
fy14lkaa 54:095eae44895b 59 const int space_ship[10][12]= {
fy14lkaa 54:095eae44895b 60 {0,0,0,0,0,0,0,0,0,0,0,0},
fy14lkaa 54:095eae44895b 61 {0,0,0,1,1,0,0,0,0,0,0,0},
fy14lkaa 54:095eae44895b 62 {0,0,0,1,1,0,0,0,0,0,0,0},
fy14lkaa 54:095eae44895b 63 {0,1,1,1,1,1,1,1,0,0,0,0},
fy14lkaa 54:095eae44895b 64 {0,1,1,1,1,1,1,1,1,0,0,0},
fy14lkaa 54:095eae44895b 65 {0,1,1,1,1,1,1,1,1,1,1,0},
fy14lkaa 54:095eae44895b 66 {0,1,1,1,1,1,1,1,1,0,0,0},
fy14lkaa 54:095eae44895b 67 {0,1,1,1,1,1,1,1,0,0,0,0},
fy14lkaa 54:095eae44895b 68 {0,0,0,1,1,0,0,0,0,0,0,0},
fy14lkaa 54:095eae44895b 69 {0,0,0,1,1,0,0,0,0,0,0,0},
fy14lkaa 5:476696df08dd 70
fy14lkaa 5:476696df08dd 71 };
fy14lkaa 12:45b1249b3d9a 72
fy14lkaa 12:45b1249b3d9a 73
fy14lkaa 13:9d6ee753eca6 74 ///////////// functions ////////////////
fy14lkaa 54:095eae44895b 75 int main()
fy14lkaa 54:095eae44895b 76 {
fy14lkaa 54:095eae44895b 77 /* #ifdef WITH_TESTING
fy14lkaa 54:095eae44895b 78 int number_of_failures = run_all_tests();
fy14lkaa 43:df52eec1a127 79
fy14lkaa 54:095eae44895b 80 if(number_of_failures > 0) return number_of_failures;
fy14lkaa 54:095eae44895b 81 #endif
fy14lkaa 54:095eae44895b 82 */
fy14lkaa 12:45b1249b3d9a 83
fy14lkaa 0:e2af4c8e462e 84 int fps = 8; // frames per second
fy14lkaa 54:095eae44895b 85
fy14lkaa 0:e2af4c8e462e 86 init(); // initialise and then display welcome screen...
fy14lkaa 0:e2af4c8e462e 87 welcome(); // waiting for the user to start
fy14lkaa 54:095eae44895b 88
fy14lkaa 54:095eae44895b 89 render(); // first draw the initial frame
fy14lkaa 0:e2af4c8e462e 90 wait(1.0f/fps); // and wait for one frame period
fy14lkaa 54:095eae44895b 91
fy14lkaa 3:985fab783b92 92 int y=0;
fy14lkaa 54:095eae44895b 93
fy14lkaa 3:985fab783b92 94 //define the x position of bullet from the space ship
fy14lkaa 3:985fab783b92 95 int x_bullet=0;
fy14lkaa 54:095eae44895b 96
fy14lkaa 3:985fab783b92 97 //define the y position of the bullet from the space ship
fy14lkaa 3:985fab783b92 98 int y_bullet=0;
fy14lkaa 28:4786e81ce3e3 99 int y_Alien=10;
fy14lkaa 28:4786e81ce3e3 100 int x_Alien=70;
fy14lkaa 3:985fab783b92 101 int bullet_fired=0;
fy14lkaa 12:45b1249b3d9a 102 int x_space_ship=0;
fy14lkaa 5:476696df08dd 103 int y_space_ship=40;
fy14lkaa 54:095eae44895b 104
fy14lkaa 54:095eae44895b 105
fy14lkaa 3:985fab783b92 106 // game loop - read input, update the game state and render the display
fy14lkaa 0:e2af4c8e462e 107 while (1) {
fy14lkaa 54:095eae44895b 108
fy14lkaa 54:095eae44895b 109 space.read_input(pad);
fy14lkaa 12:45b1249b3d9a 110 space.update(pad);
fy14lkaa 54:095eae44895b 111 render();
fy14lkaa 54:095eae44895b 112
fy14lkaa 57:45c5de9cefdf 113 }
fy14lkaa 57:45c5de9cefdf 114
fy14lkaa 57:45c5de9cefdf 115 Direction _d2 = pad.get_direction();
fy14lkaa 54:095eae44895b 116
fy14lkaa 57:45c5de9cefdf 117 /*lcd.drawSprite(x_Alien,y_Alien,12,10,(int *)Alien);
fy14lkaa 57:45c5de9cefdf 118 lcd.drawSprite(x_bullet,y_bullet,4,10,(int *)bullet);
fy14lkaa 57:45c5de9cefdf 119 lcd.drawSprite(x_space_ship,y_space_ship,10,12,(int *) space_ship);*/
fy14lkaa 54:095eae44895b 120
fy14lkaa 57:45c5de9cefdf 121 if (_d2==N) {
fy14lkaa 57:45c5de9cefdf 122 y=y-2;
fy14lkaa 57:45c5de9cefdf 123 }
fy14lkaa 54:095eae44895b 124
fy14lkaa 57:45c5de9cefdf 125 else if (_d2==E) {
fy14lkaa 57:45c5de9cefdf 126 bullet_fired=1;
fy14lkaa 57:45c5de9cefdf 127 x_bullet=11;
fy14lkaa 57:45c5de9cefdf 128 y_bullet=y;
fy14lkaa 57:45c5de9cefdf 129 }
fy14lkaa 54:095eae44895b 130
fy14lkaa 57:45c5de9cefdf 131 if (y>=40) {
fy14lkaa 57:45c5de9cefdf 132 y=40;
fy14lkaa 57:45c5de9cefdf 133 }
fy14lkaa 54:095eae44895b 134
fy14lkaa 57:45c5de9cefdf 135 else if(y<=0) {
fy14lkaa 57:45c5de9cefdf 136 y =0;
fy14lkaa 57:45c5de9cefdf 137 }
fy14lkaa 54:095eae44895b 138
fy14lkaa 57:45c5de9cefdf 139 if(bullet_fired==1) {
fy14lkaa 57:45c5de9cefdf 140 x_bullet+=4;
fy14lkaa 57:45c5de9cefdf 141 }
fy14lkaa 54:095eae44895b 142
fy14lkaa 57:45c5de9cefdf 143 if(x_bullet>=x_Alien && y_bullet >=y_Alien && y_bullet <=y_Alien+10) {
fy14lkaa 57:45c5de9cefdf 144 y=0;
fy14lkaa 57:45c5de9cefdf 145 }
fy14lkaa 54:095eae44895b 146
fy14lkaa 57:45c5de9cefdf 147 wait(1.0f/fps);
fy14lkaa 54:095eae44895b 148
fy14lkaa 54:095eae44895b 149
fy14lkaa 54:095eae44895b 150
fy14lkaa 54:095eae44895b 151 }
fy14lkaa 54:095eae44895b 152
fy14lkaa 54:095eae44895b 153
fy14lkaa 54:095eae44895b 154 // initialies all classes and libraries
fy14lkaa 54:095eae44895b 155 void init()
fy14lkaa 54:095eae44895b 156 {
fy14lkaa 54:095eae44895b 157 // need to initialise LCD and Gamepad
fy14lkaa 0:e2af4c8e462e 158 lcd.init();
fy14lkaa 54:095eae44895b 159 pad.init();
fy14lkaa 54:095eae44895b 160 int space_ship_width = 5;
fy14lkaa 54:095eae44895b 161 int space_ship_height = 5;
fy14lkaa 54:095eae44895b 162 int bullet_size = 3;
fy14lkaa 54:095eae44895b 163 int Alien_size = 5;
fy14lkaa 54:095eae44895b 164 int speed = 2;
fy14lkaa 54:095eae44895b 165
fy14lkaa 54:095eae44895b 166 space.init(space_ship_width,space_ship_height,bullet_size,Alien_size,speed);
fy14lkaa 54:095eae44895b 167
fy14lkaa 3:985fab783b92 168 }
fy14lkaa 54:095eae44895b 169
fy14lkaa 54:095eae44895b 170 // this function draws each frame on the LCD
fy14lkaa 54:095eae44895b 171 void render()
fy14lkaa 54:095eae44895b 172 {
fy14lkaa 0:e2af4c8e462e 173 // clear screen, re-draw and refresh
fy14lkaa 54:095eae44895b 174 lcd.clear();
fy14lkaa 12:45b1249b3d9a 175 space.draw(lcd);
fy14lkaa 0:e2af4c8e462e 176 lcd.refresh();
fy14lkaa 0:e2af4c8e462e 177 }
fy14lkaa 3:985fab783b92 178
fy14lkaa 0:e2af4c8e462e 179 // simple splash screen displayed on start-up
fy14lkaa 54:095eae44895b 180 void welcome()
fy14lkaa 54:095eae44895b 181 {
fy14lkaa 54:095eae44895b 182 lcd.printString("SpaceInvaders!",0,1);
fy14lkaa 13:9d6ee753eca6 183 lcd.printString("Press Start ",0,4);
fy14lkaa 0:e2af4c8e462e 184 lcd.refresh();
fy14lkaa 54:095eae44895b 185
fy14lkaa 54:095eae44895b 186 // wait flashing LEDs until start button is pressed
fy14lkaa 0:e2af4c8e462e 187 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
fy14lkaa 0:e2af4c8e462e 188 pad.leds_on();
fy14lkaa 54:095eae44895b 189 wait(0.1); //wait 0.1 seconds
fy14lkaa 0:e2af4c8e462e 190 pad.leds_off();
fy14lkaa 0:e2af4c8e462e 191 wait(0.1);
fy14lkaa 0:e2af4c8e462e 192 }
fy14lkaa 54:095eae44895b 193
fy14lkaa 54:095eae44895b 194
fy14lkaa 54:095eae44895b 195
fy14lkaa 54:095eae44895b 196
fy14lkaa 3:985fab783b92 197 }