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 20 23:13:09 2019 +0000
Revision:
31:5c9309ddf84c
Parent:
28:4786e81ce3e3
Child:
43:df52eec1a127
creating space_ship folder.

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