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

Dependencies:   mbed

Committer:
fy14lkaa
Date:
Fri Apr 19 17:33:57 2019 +0000
Revision:
13:9d6ee753eca6
Parent:
12:45b1249b3d9a
Child:
28:4786e81ce3e3
added a function to draw the alien (lcd.drawRect) by using N5110 and lcd libraries .

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