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

Dependencies:   mbed

Committer:
fy14lkaa
Date:
Mon Apr 22 13:17:23 2019 +0000
Revision:
50:f538885a788b
Parent:
43:df52eec1a127
Child:
54:095eae44895b
added comments to space_ship.h to explain the public (accessors and mutators methods) and private (member variables) of space_ship class.

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