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

Dependencies:   mbed

Committer:
fy14lkaa
Date:
Sun Apr 21 14:42:03 2019 +0000
Revision:
43:df52eec1a127
Parent:
31:5c9309ddf84c
Child:
50:f538885a788b
declared a function to return the position of the spaceship in vector2D

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 43:df52eec1a127 32 N5110lcd(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 12:45b1249b3d9a 120 space.read_input(pad);
fy14lkaa 12:45b1249b3d9a 121 space.update(pad);
fy14lkaa 13:9d6ee753eca6 122 render();
fy14lkaa 13:9d6ee753eca6 123 _d2 = pad.get_direction();
fy14lkaa 13:9d6ee753eca6 124
fy14lkaa 13:9d6ee753eca6 125 lcd.clear();
fy14lkaa 12:45b1249b3d9a 126
fy14lkaa 28:4786e81ce3e3 127 lcd.drawSprite(x_Alien,y_Alien,12,10,(int *)Alien);
fy14lkaa 3:985fab783b92 128 lcd.drawSprite(x_bullet,y_bullet,4,10,(int *)bullet);
fy14lkaa 13:9d6ee753eca6 129 lcd.drawSprite(x_space_ship,y_space_ship,10,12,(int *) space_ship);
fy14lkaa 13:9d6ee753eca6 130
fy14lkaa 13:9d6ee753eca6 131 if (_d2==N){
fy14lkaa 13:9d6ee753eca6 132 y= y-2;
fy14lkaa 13:9d6ee753eca6 133 }
fy14lkaa 13:9d6ee753eca6 134
fy14lkaa 13:9d6ee753eca6 135 else if (_d2==E){
fy14lkaa 12:45b1249b3d9a 136 bullet_fired=1;
fy14lkaa 12:45b1249b3d9a 137 x_bullet=11;
fy14lkaa 12:45b1249b3d9a 138 y_bullet=y;
fy14lkaa 13:9d6ee753eca6 139 }
fy14lkaa 13:9d6ee753eca6 140
fy14lkaa 13:9d6ee753eca6 141 if (y>=40){
fy14lkaa 13:9d6ee753eca6 142 y=40;
fy14lkaa 13:9d6ee753eca6 143 }
fy14lkaa 13:9d6ee753eca6 144
fy14lkaa 13:9d6ee753eca6 145 else if(y<=0){
fy14lkaa 13:9d6ee753eca6 146 y =0;
fy14lkaa 13:9d6ee753eca6 147 }
fy14lkaa 13:9d6ee753eca6 148
fy14lkaa 13:9d6ee753eca6 149 if(bullet_fired==1){
fy14lkaa 3:985fab783b92 150 x_bullet+=4;
fy14lkaa 13:9d6ee753eca6 151 }
fy14lkaa 13:9d6ee753eca6 152
fy14lkaa 28:4786e81ce3e3 153 if(x_bullet>=x_Alien && y_bullet >=y_Alien && y_bullet <=y_Alien+10)
fy14lkaa 13:9d6ee753eca6 154 {
fy14lkaa 3:985fab783b92 155 y=0;
fy14lkaa 12:45b1249b3d9a 156 }
fy14lkaa 13:9d6ee753eca6 157
fy14lkaa 13:9d6ee753eca6 158 wait(1.0f/fps);
fy14lkaa 12:45b1249b3d9a 159
fy14lkaa 3:985fab783b92 160 lcd.refresh();
fy14lkaa 13:9d6ee753eca6 161
fy14lkaa 13:9d6ee753eca6 162
fy14lkaa 13:9d6ee753eca6 163 }
fy14lkaa 13:9d6ee753eca6 164 }
fy14lkaa 13:9d6ee753eca6 165
fy14lkaa 13:9d6ee753eca6 166
fy14lkaa 13:9d6ee753eca6 167 // initialies all classes and libraries
fy14lkaa 13:9d6ee753eca6 168 void init() {
fy14lkaa 0:e2af4c8e462e 169 // need to initialise LCD and Gamepad
fy14lkaa 0:e2af4c8e462e 170 lcd.init();
fy14lkaa 13:9d6ee753eca6 171 pad.init();
fy14lkaa 28:4786e81ce3e3 172 space.init(space_ship_width,space_ship_height,bullet_size,Alien_size,speed);
fy14lkaa 13:9d6ee753eca6 173
fy14lkaa 3:985fab783b92 174 }
fy14lkaa 13:9d6ee753eca6 175
fy14lkaa 13:9d6ee753eca6 176 // this function draws each frame on the LCD
fy14lkaa 13:9d6ee753eca6 177 void render(){
fy14lkaa 0:e2af4c8e462e 178 // clear screen, re-draw and refresh
fy14lkaa 0:e2af4c8e462e 179 lcd.clear();
fy14lkaa 12:45b1249b3d9a 180 space.draw(lcd);
fy14lkaa 0:e2af4c8e462e 181 lcd.refresh();
fy14lkaa 0:e2af4c8e462e 182 }
fy14lkaa 3:985fab783b92 183
fy14lkaa 0:e2af4c8e462e 184 // simple splash screen displayed on start-up
fy14lkaa 0:e2af4c8e462e 185 void welcome() {
fy14lkaa 0:e2af4c8e462e 186
fy14lkaa 12:45b1249b3d9a 187 lcd.printString("SpaceInvaders!",0,1);
fy14lkaa 13:9d6ee753eca6 188 lcd.printString("Press Start ",0,4);
fy14lkaa 0:e2af4c8e462e 189 lcd.refresh();
fy14lkaa 0:e2af4c8e462e 190
fy14lkaa 0:e2af4c8e462e 191 // wait flashing LEDs until start button is pressed
fy14lkaa 0:e2af4c8e462e 192 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
fy14lkaa 0:e2af4c8e462e 193 pad.leds_on();
fy14lkaa 3:985fab783b92 194 wait(0.1); //wait 0.1 seconds
fy14lkaa 0:e2af4c8e462e 195 pad.leds_off();
fy14lkaa 0:e2af4c8e462e 196 wait(0.1);
fy14lkaa 0:e2af4c8e462e 197 }
fy14lkaa 0:e2af4c8e462e 198
fy14lkaa 13:9d6ee753eca6 199
fy14lkaa 13:9d6ee753eca6 200
fy14lkaa 13:9d6ee753eca6 201
fy14lkaa 3:985fab783b92 202 }