Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp@8:eec0d7fc365f, 2019-04-14 (annotated)
- Committer:
- fy14lkaa
- Date:
- Sun Apr 14 16:40:39 2019 +0000
- Revision:
- 8:eec0d7fc365f
- Parent:
- 5:476696df08dd
- Child:
- 12:45b1249b3d9a
created the alien folder, starting on defining the class of the alien in alien.h
Who changed what in which revision?
| User | Revision | Line number | New 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 | 0:e2af4c8e462e | 9 | #ifdef WITH_TESTING |
| fy14lkaa | 0:e2af4c8e462e | 10 | # include "tests.h" |
| fy14lkaa | 0:e2af4c8e462e | 11 | #endif |
| fy14lkaa | 0:e2af4c8e462e | 12 | |
| fy14lkaa | 5:476696df08dd | 13 | //#define PADDLE_WIDTH 2 |
| fy14lkaa | 5:476696df08dd | 14 | //#define PADDLE_HEIGHT 8 |
| fy14lkaa | 5:476696df08dd | 15 | //#define BALL_SIZE 2 |
| fy14lkaa | 5:476696df08dd | 16 | //#define BALL_SPEED 3 |
| fy14lkaa | 0:e2af4c8e462e | 17 | |
| fy14lkaa | 5:476696df08dd | 18 | // structs // |
| fy14lkaa | 0:e2af4c8e462e | 19 | struct UserInput { |
| fy14lkaa | 0:e2af4c8e462e | 20 | Direction d; |
| fy14lkaa | 0:e2af4c8e462e | 21 | float mag; |
| fy14lkaa | 0:e2af4c8e462e | 22 | }; |
| fy14lkaa | 5:476696df08dd | 23 | |
| fy14lkaa | 5:476696df08dd | 24 | |
| fy14lkaa | 5:476696df08dd | 25 | |
| fy14lkaa | 3:985fab783b92 | 26 | /////////////// objects /////////////// |
| fy14lkaa | 0:e2af4c8e462e | 27 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); |
| fy14lkaa | 0:e2af4c8e462e | 28 | Gamepad pad; |
| fy14lkaa | 5:476696df08dd | 29 | |
| fy14lkaa | 3:985fab783b92 | 30 | //Direction _d; |
| fy14lkaa | 3:985fab783b92 | 31 | //SpaceEngine space; |
| fy14lkaa | 3:985fab783b92 | 32 | ///////////// prototypes /////////////// |
| fy14lkaa | 0:e2af4c8e462e | 33 | void init(); |
| fy14lkaa | 0:e2af4c8e462e | 34 | void update_game(UserInput input); |
| fy14lkaa | 0:e2af4c8e462e | 35 | void render(); |
| fy14lkaa | 0:e2af4c8e462e | 36 | void welcome(); |
| fy14lkaa | 5:476696df08dd | 37 | /* |
| fy14lkaa | 3:985fab783b92 | 38 | const int run[12][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 | { 0,1,1,0,1,1,0,1,1,1 }, |
| fy14lkaa | 3:985fab783b92 | 44 | { 1,0,0,0,1,1,0,0,0,0 }, |
| fy14lkaa | 3:985fab783b92 | 45 | { 0,0,0,1,1,1,1,0,0,0 }, |
| fy14lkaa | 3:985fab783b92 | 46 | { 0,0,1,1,0,0,1,1,0,0 }, |
| fy14lkaa | 3:985fab783b92 | 47 | { 1,1,1,1,0,0,0,1,1,0 }, |
| fy14lkaa | 3:985fab783b92 | 48 | { 0,0,0,0,0,0,1,1,0,0 }, |
| fy14lkaa | 3:985fab783b92 | 49 | { 0,0,0,0,0,1,1,0,0,0 }, |
| fy14lkaa | 3:985fab783b92 | 50 | { 0,0,0,0,1,1,0,0,0,0 }, |
| fy14lkaa | 5:476696df08dd | 51 | }; */ |
| fy14lkaa | 3:985fab783b92 | 52 | const int bullet[4][10] = { |
| fy14lkaa | 3:985fab783b92 | 53 | { 0,0,0,0,0,1,1,1,0,0 }, |
| fy14lkaa | 3:985fab783b92 | 54 | { 0,0,0,0,0,1,1,1,0,0 }, |
| fy14lkaa | 3:985fab783b92 | 55 | { 0,0,0,1,1,1,1,0,0,0 }, |
| fy14lkaa | 3:985fab783b92 | 56 | { 0,0,1,1,1,1,0,1,0,0 }, |
| fy14lkaa | 3:985fab783b92 | 57 | }; |
| fy14lkaa | 3:985fab783b92 | 58 | const int alien[12][10] = { |
| fy14lkaa | 3:985fab783b92 | 59 | { 0,0,0,0,0,1,1,1,0,0 }, |
| fy14lkaa | 3:985fab783b92 | 60 | { 0,0,0,0,0,1,1,1,0,0 }, |
| fy14lkaa | 3:985fab783b92 | 61 | { 0,0,0,1,1,1,1,0,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 | 3:985fab783b92 | 66 | { 0,0,1,1,1,1,0,1,0,0 }, |
| fy14lkaa | 3:985fab783b92 | 67 | { 0,0,1,1,1,1,0,1,0,0 }, |
| fy14lkaa | 3:985fab783b92 | 68 | { 0,0,1,1,1,1,0,1,0,0 }, |
| fy14lkaa | 3:985fab783b92 | 69 | { 0,0,1,1,1,1,0,1,0,0 }, |
| fy14lkaa | 3:985fab783b92 | 70 | { 0,0,1,1,1,1,0,1,0,0 }, |
| fy14lkaa | 0:e2af4c8e462e | 71 | |
| fy14lkaa | 3:985fab783b92 | 72 | }; |
| fy14lkaa | 3:985fab783b92 | 73 | /* |
| fy14lkaa | 3:985fab783b92 | 74 | const int space_ship[10][12]={ |
| fy14lkaa | 3:985fab783b92 | 75 | {0,0,0,0,0,0,0,1,0,0,0,0}, |
| fy14lkaa | 4:13cc179c11c5 | 76 | {0,0,0,0,0,0,0,1,0,0,0,0}, |
| fy14lkaa | 4:13cc179c11c5 | 77 | {0,0,0,0,0,0,0,1,0,0,0,0}, |
| fy14lkaa | 4:13cc179c11c5 | 78 | {0,0,0,0,0,0,0,1,0,0,0,0}, |
| fy14lkaa | 4:13cc179c11c5 | 79 | {0,0,0,0,0,0,0,1,0,0,0,0}, |
| fy14lkaa | 4:13cc179c11c5 | 80 | {0,0,0,0,0,0,0,1,0,0,0,0}, |
| fy14lkaa | 4:13cc179c11c5 | 81 | {0,0,0,0,0,0,0,1,0,0,0,0}, |
| fy14lkaa | 4:13cc179c11c5 | 82 | {0,0,0,0,0,0,0,1,0,0,0,0}, |
| fy14lkaa | 4:13cc179c11c5 | 83 | {0,0,0,0,0,0,0,1,0,0,0,0}, |
| fy14lkaa | 4:13cc179c11c5 | 84 | {0,0,0,0,0,0,0,1,0,0,0,0}, |
| fy14lkaa | 4:13cc179c11c5 | 85 | |
| fy14lkaa | 3:985fab783b92 | 86 | }; |
| fy14lkaa | 3:985fab783b92 | 87 | */ |
| fy14lkaa | 5:476696df08dd | 88 | |
| fy14lkaa | 5:476696df08dd | 89 | |
| fy14lkaa | 5:476696df08dd | 90 | |
| fy14lkaa | 5:476696df08dd | 91 | const int space_ship[10][12]={ |
| fy14lkaa | 5:476696df08dd | 92 | {0,0,0,0,0,0,0,0,0,0,0,0}, |
| fy14lkaa | 5:476696df08dd | 93 | {0,0,0,1,1,0,0,0,0,0,0,0}, |
| fy14lkaa | 5:476696df08dd | 94 | {0,0,0,1,1,0,0,0,0,0,0,0}, |
| fy14lkaa | 5:476696df08dd | 95 | {0,1,1,1,1,1,1,1,0,0,0,0}, |
| fy14lkaa | 5:476696df08dd | 96 | {0,1,1,1,1,1,1,1,1,0,0,0}, |
| fy14lkaa | 5:476696df08dd | 97 | {0,1,1,1,1,1,1,1,1,1,1,0}, |
| fy14lkaa | 5:476696df08dd | 98 | {0,1,1,1,1,1,1,1,1,0,0,0}, |
| fy14lkaa | 5:476696df08dd | 99 | {0,1,1,1,1,1,1,1,0,0,0,0}, |
| fy14lkaa | 5:476696df08dd | 100 | {0,0,0,1,1,0,0,0,0,0,0,0}, |
| fy14lkaa | 5:476696df08dd | 101 | {0,0,0,1,1,0,0,0,0,0,0,0}, |
| fy14lkaa | 5:476696df08dd | 102 | |
| fy14lkaa | 5:476696df08dd | 103 | }; |
| fy14lkaa | 3:985fab783b92 | 104 | Direction _d2; |
| fy14lkaa | 3:985fab783b92 | 105 | ///////////// functions //////////////// |
| fy14lkaa | 0:e2af4c8e462e | 106 | int main() |
| fy14lkaa | 0:e2af4c8e462e | 107 | { |
| fy14lkaa | 3:985fab783b92 | 108 | /* |
| fy14lkaa | 0:e2af4c8e462e | 109 | #ifdef WITH_TESTING |
| fy14lkaa | 0:e2af4c8e462e | 110 | int number_of_failures = run_all_tests(); |
| fy14lkaa | 0:e2af4c8e462e | 111 | |
| fy14lkaa | 0:e2af4c8e462e | 112 | if(number_of_failures > 0) return number_of_failures; |
| fy14lkaa | 0:e2af4c8e462e | 113 | #endif |
| fy14lkaa | 3:985fab783b92 | 114 | */ |
| fy14lkaa | 0:e2af4c8e462e | 115 | int fps = 8; // frames per second |
| fy14lkaa | 3:985fab783b92 | 116 | |
| fy14lkaa | 0:e2af4c8e462e | 117 | init(); // initialise and then display welcome screen... |
| fy14lkaa | 0:e2af4c8e462e | 118 | welcome(); // waiting for the user to start |
| fy14lkaa | 0:e2af4c8e462e | 119 | |
| fy14lkaa | 3:985fab783b92 | 120 | //render(); // first draw the initial frame |
| fy14lkaa | 0:e2af4c8e462e | 121 | wait(1.0f/fps); // and wait for one frame period |
| fy14lkaa | 3:985fab783b92 | 122 | |
| fy14lkaa | 3:985fab783b92 | 123 | int y=0; |
| fy14lkaa | 3:985fab783b92 | 124 | |
| fy14lkaa | 3:985fab783b92 | 125 | //define the x position of bullet from the space ship |
| fy14lkaa | 3:985fab783b92 | 126 | int x_bullet=0; |
| fy14lkaa | 3:985fab783b92 | 127 | |
| fy14lkaa | 3:985fab783b92 | 128 | //define the y position of the bullet from the space ship |
| fy14lkaa | 3:985fab783b92 | 129 | int y_bullet=0; |
| fy14lkaa | 3:985fab783b92 | 130 | int y_alien=10; |
| fy14lkaa | 3:985fab783b92 | 131 | int x_alien=70; |
| fy14lkaa | 3:985fab783b92 | 132 | int bullet_fired=0; |
| fy14lkaa | 5:476696df08dd | 133 | int x_space_ship=0; |
| fy14lkaa | 5:476696df08dd | 134 | int y_space_ship=40; |
| fy14lkaa | 3:985fab783b92 | 135 | // game loop - read input, update the game state and render the display |
| fy14lkaa | 0:e2af4c8e462e | 136 | while (1) { |
| fy14lkaa | 3:985fab783b92 | 137 | lcd.clear(); |
| fy14lkaa | 5:476696df08dd | 138 | //lcd.drawSprite(0,y,12,10,(int *)run); |
| fy14lkaa | 5:476696df08dd | 139 | lcd.drawSprite(0,y,12,10,(int *)space_ship); |
| fy14lkaa | 3:985fab783b92 | 140 | lcd.drawSprite(x_alien,y_alien,12,10,(int *)alien); |
| fy14lkaa | 3:985fab783b92 | 141 | lcd.drawSprite(x_bullet,y_bullet,4,10,(int *)bullet); |
| fy14lkaa | 3:985fab783b92 | 142 | //space.read_input(pad); |
| fy14lkaa | 3:985fab783b92 | 143 | _d2 = pad.get_direction(); |
| fy14lkaa | 3:985fab783b92 | 144 | if(_d2==N) |
| fy14lkaa | 3:985fab783b92 | 145 | //pong.update(pad); |
| fy14lkaa | 3:985fab783b92 | 146 | //render(); |
| fy14lkaa | 3:985fab783b92 | 147 | y=y-2; |
| fy14lkaa | 3:985fab783b92 | 148 | else |
| fy14lkaa | 3:985fab783b92 | 149 | if(_d2==S) |
| fy14lkaa | 3:985fab783b92 | 150 | y=y+2; |
| fy14lkaa | 3:985fab783b92 | 151 | else if(_d2==E){ |
| fy14lkaa | 3:985fab783b92 | 152 | bullet_fired=1; |
| fy14lkaa | 3:985fab783b92 | 153 | x_bullet=11; |
| fy14lkaa | 3:985fab783b92 | 154 | y_bullet=y; |
| fy14lkaa | 3:985fab783b92 | 155 | } |
| fy14lkaa | 3:985fab783b92 | 156 | if(y>=40) |
| fy14lkaa | 3:985fab783b92 | 157 | y=40; |
| fy14lkaa | 3:985fab783b92 | 158 | else |
| fy14lkaa | 3:985fab783b92 | 159 | if(y<=0) |
| fy14lkaa | 3:985fab783b92 | 160 | y=0; |
| fy14lkaa | 3:985fab783b92 | 161 | |
| fy14lkaa | 3:985fab783b92 | 162 | if(bullet_fired==1) |
| fy14lkaa | 3:985fab783b92 | 163 | x_bullet+=4; |
| fy14lkaa | 3:985fab783b92 | 164 | if(x_bullet>=x_alien && y_bullet >=y_alien && y_bullet <=y_alien+10) |
| fy14lkaa | 3:985fab783b92 | 165 | y=0; |
| fy14lkaa | 5:476696df08dd | 166 | if (x_bullet == x_alien && y_bullet ==y_alien) |
| fy14lkaa | 5:476696df08dd | 167 | score ++; |
| fy14lkaa | 0:e2af4c8e462e | 168 | wait(1.0f/fps); |
| fy14lkaa | 5:476696df08dd | 169 | lcd.clear (); |
| fy14lkaa | 3:985fab783b92 | 170 | lcd.refresh(); |
| fy14lkaa | 0:e2af4c8e462e | 171 | } |
| fy14lkaa | 0:e2af4c8e462e | 172 | } |
| fy14lkaa | 3:985fab783b92 | 173 | |
| fy14lkaa | 3:985fab783b92 | 174 | // initialies all classes and libraries |
| fy14lkaa | 0:e2af4c8e462e | 175 | void init() |
| fy14lkaa | 0:e2af4c8e462e | 176 | { |
| fy14lkaa | 0:e2af4c8e462e | 177 | // need to initialise LCD and Gamepad |
| fy14lkaa | 0:e2af4c8e462e | 178 | lcd.init(); |
| fy14lkaa | 2:6c1d7aa20e81 | 179 | pad.init(); |
| fy14lkaa | 3:985fab783b92 | 180 | |
| fy14lkaa | 0:e2af4c8e462e | 181 | // initialise the game with correct ball and paddle sizes |
| fy14lkaa | 3:985fab783b92 | 182 | //pong.init(PADDLE_WIDTH,PADDLE_HEIGHT,BALL_SIZE,BALL_SPEED); |
| fy14lkaa | 3:985fab783b92 | 183 | |
| fy14lkaa | 3:985fab783b92 | 184 | } |
| fy14lkaa | 3:985fab783b92 | 185 | |
| fy14lkaa | 3:985fab783b92 | 186 | // this function draws each frame on the LCD |
| fy14lkaa | 0:e2af4c8e462e | 187 | void render() |
| fy14lkaa | 0:e2af4c8e462e | 188 | { |
| fy14lkaa | 0:e2af4c8e462e | 189 | // clear screen, re-draw and refresh |
| fy14lkaa | 0:e2af4c8e462e | 190 | lcd.clear(); |
| fy14lkaa | 0:e2af4c8e462e | 191 | lcd.refresh(); |
| fy14lkaa | 0:e2af4c8e462e | 192 | } |
| fy14lkaa | 3:985fab783b92 | 193 | |
| fy14lkaa | 0:e2af4c8e462e | 194 | // simple splash screen displayed on start-up |
| fy14lkaa | 0:e2af4c8e462e | 195 | void welcome() { |
| fy14lkaa | 0:e2af4c8e462e | 196 | |
| fy14lkaa | 3:985fab783b92 | 197 | lcd.printString("Space Invador!",0,1); |
| fy14lkaa | 0:e2af4c8e462e | 198 | lcd.printString(" Press Start ",0,4); |
| fy14lkaa | 3:985fab783b92 | 199 | |
| fy14lkaa | 0:e2af4c8e462e | 200 | lcd.refresh(); |
| fy14lkaa | 0:e2af4c8e462e | 201 | |
| fy14lkaa | 0:e2af4c8e462e | 202 | // wait flashing LEDs until start button is pressed |
| fy14lkaa | 0:e2af4c8e462e | 203 | while ( pad.check_event(Gamepad::START_PRESSED) == false) { |
| fy14lkaa | 0:e2af4c8e462e | 204 | pad.leds_on(); |
| fy14lkaa | 3:985fab783b92 | 205 | wait(0.1); //wait 0.1 seconds |
| fy14lkaa | 0:e2af4c8e462e | 206 | pad.leds_off(); |
| fy14lkaa | 0:e2af4c8e462e | 207 | wait(0.1); |
| fy14lkaa | 0:e2af4c8e462e | 208 | } |
| fy14lkaa | 0:e2af4c8e462e | 209 | |
| fy14lkaa | 3:985fab783b92 | 210 | } |