Laila Al Badwawi 200906179 SpaceInvaders I declare this my own independent work and understand the university rules on plagiarism.
Dependencies: mbed
main.cpp@3:985fab783b92, 2019-04-12 (annotated)
- Committer:
- fy14lkaa
- Date:
- Fri Apr 12 13:56:13 2019 +0000
- Revision:
- 3:985fab783b92
- Parent:
- 2:6c1d7aa20e81
- Child:
- 4:13cc179c11c5
define the x-axis of the space ship and the y-axis
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:e2af4c8e462e | 5 | |
fy14lkaa | 0:e2af4c8e462e | 6 | #ifdef WITH_TESTING |
fy14lkaa | 0:e2af4c8e462e | 7 | # include "tests.h" |
fy14lkaa | 0:e2af4c8e462e | 8 | #endif |
fy14lkaa | 0:e2af4c8e462e | 9 | |
fy14lkaa | 3:985fab783b92 | 10 | #define PADDLE_WIDTH 2 |
fy14lkaa | 3:985fab783b92 | 11 | #define PADDLE_HEIGHT 8 |
fy14lkaa | 3:985fab783b92 | 12 | #define BALL_SIZE 2 |
fy14lkaa | 3:985fab783b92 | 13 | #define BALL_SPEED 3 |
fy14lkaa | 0:e2af4c8e462e | 14 | |
fy14lkaa | 3:985fab783b92 | 15 | /////////////// structs ///////////////// |
fy14lkaa | 0:e2af4c8e462e | 16 | struct UserInput { |
fy14lkaa | 0:e2af4c8e462e | 17 | Direction d; |
fy14lkaa | 0:e2af4c8e462e | 18 | float mag; |
fy14lkaa | 0:e2af4c8e462e | 19 | }; |
fy14lkaa | 3:985fab783b92 | 20 | /////////////// objects /////////////// |
fy14lkaa | 0:e2af4c8e462e | 21 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); |
fy14lkaa | 0:e2af4c8e462e | 22 | Gamepad pad; |
fy14lkaa | 3:985fab783b92 | 23 | //Direction _d; |
fy14lkaa | 3:985fab783b92 | 24 | //SpaceEngine space; |
fy14lkaa | 3:985fab783b92 | 25 | ///////////// prototypes /////////////// |
fy14lkaa | 0:e2af4c8e462e | 26 | void init(); |
fy14lkaa | 0:e2af4c8e462e | 27 | void update_game(UserInput input); |
fy14lkaa | 0:e2af4c8e462e | 28 | void render(); |
fy14lkaa | 0:e2af4c8e462e | 29 | void welcome(); |
fy14lkaa | 3:985fab783b92 | 30 | const int run[12][10] = { |
fy14lkaa | 3:985fab783b92 | 31 | { 0,0,0,0,0,1,1,1,0,0 }, |
fy14lkaa | 3:985fab783b92 | 32 | { 0,0,0,0,0,1,1,1,0,0 }, |
fy14lkaa | 3:985fab783b92 | 33 | { 0,0,0,1,1,1,1,0,0,0 }, |
fy14lkaa | 3:985fab783b92 | 34 | { 0,0,1,1,1,1,0,1,0,0 }, |
fy14lkaa | 3:985fab783b92 | 35 | { 0,1,1,0,1,1,0,1,1,1 }, |
fy14lkaa | 3:985fab783b92 | 36 | { 1,0,0,0,1,1,0,0,0,0 }, |
fy14lkaa | 3:985fab783b92 | 37 | { 0,0,0,1,1,1,1,0,0,0 }, |
fy14lkaa | 3:985fab783b92 | 38 | { 0,0,1,1,0,0,1,1,0,0 }, |
fy14lkaa | 3:985fab783b92 | 39 | { 1,1,1,1,0,0,0,1,1,0 }, |
fy14lkaa | 3:985fab783b92 | 40 | { 0,0,0,0,0,0,1,1,0,0 }, |
fy14lkaa | 3:985fab783b92 | 41 | { 0,0,0,0,0,1,1,0,0,0 }, |
fy14lkaa | 3:985fab783b92 | 42 | { 0,0,0,0,1,1,0,0,0,0 }, |
fy14lkaa | 3:985fab783b92 | 43 | }; |
fy14lkaa | 3:985fab783b92 | 44 | const int bullet[4][10] = { |
fy14lkaa | 3:985fab783b92 | 45 | { 0,0,0,0,0,1,1,1,0,0 }, |
fy14lkaa | 3:985fab783b92 | 46 | { 0,0,0,0,0,1,1,1,0,0 }, |
fy14lkaa | 3:985fab783b92 | 47 | { 0,0,0,1,1,1,1,0,0,0 }, |
fy14lkaa | 3:985fab783b92 | 48 | { 0,0,1,1,1,1,0,1,0,0 }, |
fy14lkaa | 3:985fab783b92 | 49 | }; |
fy14lkaa | 3:985fab783b92 | 50 | const int alien[12][10] = { |
fy14lkaa | 3:985fab783b92 | 51 | { 0,0,0,0,0,1,1,1,0,0 }, |
fy14lkaa | 3:985fab783b92 | 52 | { 0,0,0,0,0,1,1,1,0,0 }, |
fy14lkaa | 3:985fab783b92 | 53 | { 0,0,0,1,1,1,1,0,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 | 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 | 0:e2af4c8e462e | 63 | |
fy14lkaa | 3:985fab783b92 | 64 | }; |
fy14lkaa | 3:985fab783b92 | 65 | /* |
fy14lkaa | 3:985fab783b92 | 66 | const int space_ship[10][12]={ |
fy14lkaa | 3:985fab783b92 | 67 | {0,0,0,0,0,0,0,1,0,0,0,0}, |
fy14lkaa | 3:985fab783b92 | 68 | {}, |
fy14lkaa | 3:985fab783b92 | 69 | |
fy14lkaa | 3:985fab783b92 | 70 | }; |
fy14lkaa | 3:985fab783b92 | 71 | */ |
fy14lkaa | 3:985fab783b92 | 72 | Direction _d2; |
fy14lkaa | 3:985fab783b92 | 73 | ///////////// functions //////////////// |
fy14lkaa | 0:e2af4c8e462e | 74 | int main() |
fy14lkaa | 0:e2af4c8e462e | 75 | { |
fy14lkaa | 3:985fab783b92 | 76 | /* |
fy14lkaa | 0:e2af4c8e462e | 77 | #ifdef WITH_TESTING |
fy14lkaa | 0:e2af4c8e462e | 78 | int number_of_failures = run_all_tests(); |
fy14lkaa | 0:e2af4c8e462e | 79 | |
fy14lkaa | 0:e2af4c8e462e | 80 | if(number_of_failures > 0) return number_of_failures; |
fy14lkaa | 0:e2af4c8e462e | 81 | #endif |
fy14lkaa | 3:985fab783b92 | 82 | */ |
fy14lkaa | 0:e2af4c8e462e | 83 | int fps = 8; // frames per second |
fy14lkaa | 3:985fab783b92 | 84 | |
fy14lkaa | 0:e2af4c8e462e | 85 | init(); // initialise and then display welcome screen... |
fy14lkaa | 0:e2af4c8e462e | 86 | welcome(); // waiting for the user to start |
fy14lkaa | 0:e2af4c8e462e | 87 | |
fy14lkaa | 3:985fab783b92 | 88 | //render(); // first draw the initial frame |
fy14lkaa | 0:e2af4c8e462e | 89 | wait(1.0f/fps); // and wait for one frame period |
fy14lkaa | 3:985fab783b92 | 90 | |
fy14lkaa | 3:985fab783b92 | 91 | int y=0; |
fy14lkaa | 3:985fab783b92 | 92 | |
fy14lkaa | 3:985fab783b92 | 93 | //define the x position of bullet from the space ship |
fy14lkaa | 3:985fab783b92 | 94 | int x_bullet=0; |
fy14lkaa | 3:985fab783b92 | 95 | |
fy14lkaa | 3:985fab783b92 | 96 | //define the y position of the bullet from the space ship |
fy14lkaa | 3:985fab783b92 | 97 | int y_bullet=0; |
fy14lkaa | 3:985fab783b92 | 98 | int y_alien=10; |
fy14lkaa | 3:985fab783b92 | 99 | int x_alien=70; |
fy14lkaa | 3:985fab783b92 | 100 | int bullet_fired=0; |
fy14lkaa | 3:985fab783b92 | 101 | // game loop - read input, update the game state and render the display |
fy14lkaa | 0:e2af4c8e462e | 102 | while (1) { |
fy14lkaa | 3:985fab783b92 | 103 | lcd.clear(); |
fy14lkaa | 3:985fab783b92 | 104 | lcd.drawSprite(0,y,12,10,(int *)run); |
fy14lkaa | 3:985fab783b92 | 105 | |
fy14lkaa | 3:985fab783b92 | 106 | lcd.drawSprite(x_alien,y_alien,12,10,(int *)alien); |
fy14lkaa | 3:985fab783b92 | 107 | lcd.drawSprite(x_bullet,y_bullet,4,10,(int *)bullet); |
fy14lkaa | 3:985fab783b92 | 108 | //space.read_input(pad); |
fy14lkaa | 3:985fab783b92 | 109 | _d2 = pad.get_direction(); |
fy14lkaa | 3:985fab783b92 | 110 | if(_d2==N) |
fy14lkaa | 3:985fab783b92 | 111 | //pong.update(pad); |
fy14lkaa | 3:985fab783b92 | 112 | //render(); |
fy14lkaa | 3:985fab783b92 | 113 | y=y-2; |
fy14lkaa | 3:985fab783b92 | 114 | else |
fy14lkaa | 3:985fab783b92 | 115 | if(_d2==S) |
fy14lkaa | 3:985fab783b92 | 116 | y=y+2; |
fy14lkaa | 3:985fab783b92 | 117 | else if(_d2==E){ |
fy14lkaa | 3:985fab783b92 | 118 | bullet_fired=1; |
fy14lkaa | 3:985fab783b92 | 119 | x_bullet=11; |
fy14lkaa | 3:985fab783b92 | 120 | y_bullet=y; |
fy14lkaa | 3:985fab783b92 | 121 | } |
fy14lkaa | 3:985fab783b92 | 122 | if(y>=40) |
fy14lkaa | 3:985fab783b92 | 123 | y=40; |
fy14lkaa | 3:985fab783b92 | 124 | else |
fy14lkaa | 3:985fab783b92 | 125 | if(y<=0) |
fy14lkaa | 3:985fab783b92 | 126 | y=0; |
fy14lkaa | 3:985fab783b92 | 127 | |
fy14lkaa | 3:985fab783b92 | 128 | if(bullet_fired==1) |
fy14lkaa | 3:985fab783b92 | 129 | x_bullet+=4; |
fy14lkaa | 3:985fab783b92 | 130 | if(x_bullet>=x_alien && y_bullet >=y_alien && y_bullet <=y_alien+10) |
fy14lkaa | 3:985fab783b92 | 131 | y=0; |
fy14lkaa | 0:e2af4c8e462e | 132 | wait(1.0f/fps); |
fy14lkaa | 3:985fab783b92 | 133 | |
fy14lkaa | 3:985fab783b92 | 134 | lcd.refresh(); |
fy14lkaa | 0:e2af4c8e462e | 135 | } |
fy14lkaa | 0:e2af4c8e462e | 136 | } |
fy14lkaa | 3:985fab783b92 | 137 | |
fy14lkaa | 3:985fab783b92 | 138 | // initialies all classes and libraries |
fy14lkaa | 0:e2af4c8e462e | 139 | void init() |
fy14lkaa | 0:e2af4c8e462e | 140 | { |
fy14lkaa | 0:e2af4c8e462e | 141 | // need to initialise LCD and Gamepad |
fy14lkaa | 0:e2af4c8e462e | 142 | lcd.init(); |
fy14lkaa | 2:6c1d7aa20e81 | 143 | pad.init(); |
fy14lkaa | 3:985fab783b92 | 144 | |
fy14lkaa | 0:e2af4c8e462e | 145 | // initialise the game with correct ball and paddle sizes |
fy14lkaa | 3:985fab783b92 | 146 | //pong.init(PADDLE_WIDTH,PADDLE_HEIGHT,BALL_SIZE,BALL_SPEED); |
fy14lkaa | 3:985fab783b92 | 147 | |
fy14lkaa | 3:985fab783b92 | 148 | } |
fy14lkaa | 3:985fab783b92 | 149 | |
fy14lkaa | 3:985fab783b92 | 150 | // this function draws each frame on the LCD |
fy14lkaa | 0:e2af4c8e462e | 151 | void render() |
fy14lkaa | 0:e2af4c8e462e | 152 | { |
fy14lkaa | 0:e2af4c8e462e | 153 | // clear screen, re-draw and refresh |
fy14lkaa | 0:e2af4c8e462e | 154 | lcd.clear(); |
fy14lkaa | 0:e2af4c8e462e | 155 | lcd.refresh(); |
fy14lkaa | 0:e2af4c8e462e | 156 | } |
fy14lkaa | 3:985fab783b92 | 157 | |
fy14lkaa | 0:e2af4c8e462e | 158 | // simple splash screen displayed on start-up |
fy14lkaa | 0:e2af4c8e462e | 159 | void welcome() { |
fy14lkaa | 0:e2af4c8e462e | 160 | |
fy14lkaa | 3:985fab783b92 | 161 | lcd.printString("Space Invador!",0,1); |
fy14lkaa | 0:e2af4c8e462e | 162 | lcd.printString(" Press Start ",0,4); |
fy14lkaa | 3:985fab783b92 | 163 | |
fy14lkaa | 0:e2af4c8e462e | 164 | lcd.refresh(); |
fy14lkaa | 0:e2af4c8e462e | 165 | |
fy14lkaa | 0:e2af4c8e462e | 166 | // wait flashing LEDs until start button is pressed |
fy14lkaa | 0:e2af4c8e462e | 167 | while ( pad.check_event(Gamepad::START_PRESSED) == false) { |
fy14lkaa | 0:e2af4c8e462e | 168 | pad.leds_on(); |
fy14lkaa | 3:985fab783b92 | 169 | wait(0.1); //wait 0.1 seconds |
fy14lkaa | 0:e2af4c8e462e | 170 | pad.leds_off(); |
fy14lkaa | 0:e2af4c8e462e | 171 | wait(0.1); |
fy14lkaa | 0:e2af4c8e462e | 172 | } |
fy14lkaa | 0:e2af4c8e462e | 173 | |
fy14lkaa | 3:985fab783b92 | 174 | } |