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 15 14:36:07 2019 +0000
Revision:
12:45b1249b3d9a
Parent:
8:eec0d7fc365f
Child:
13:9d6ee753eca6
change the class's name for some functions.

Who changed what in which revision?

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