The space invaders replica (SIR) is console game project written in C++ programming language. The SIR is targeting and works on Outrageous Circuits RETRO game console developer platform. The game is written in C++ programming language using MBED online IDE and compiler.
main.cpp@0:7dfc10b70a77, 2015-01-25 (annotated)
- Committer:
- mitko
- Date:
- Sun Jan 25 09:14:58 2015 +0000
- Revision:
- 0:7dfc10b70a77
The space invaders replica (SIR) is console game project written in C++ programming language. The SIR is targeting and works on Outrageous Circuits RETRO game console developer platform. The game is written in C++ programming language using MBED onli
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mitko | 0:7dfc10b70a77 | 1 | #include "mbed.h" |
mitko | 0:7dfc10b70a77 | 2 | |
mitko | 0:7dfc10b70a77 | 3 | |
mitko | 0:7dfc10b70a77 | 4 | /* Display Resultion (128x160) */ |
mitko | 0:7dfc10b70a77 | 5 | #include "DisplayN18.h" |
mitko | 0:7dfc10b70a77 | 6 | DisplayN18 disp; |
mitko | 0:7dfc10b70a77 | 7 | char width = 160, height = 128; |
mitko | 0:7dfc10b70a77 | 8 | |
mitko | 0:7dfc10b70a77 | 9 | |
mitko | 0:7dfc10b70a77 | 10 | /* Graphic Units */ |
mitko | 0:7dfc10b70a77 | 11 | // Draw Blank Unit (13x10) |
mitko | 0:7dfc10b70a77 | 12 | void DrawBlankUnit(int Dx,int Dy) |
mitko | 0:7dfc10b70a77 | 13 | { |
mitko | 0:7dfc10b70a77 | 14 | for(int y=-5;y<16;y++) |
mitko | 0:7dfc10b70a77 | 15 | for(int x=0;x<8;x++) |
mitko | 0:7dfc10b70a77 | 16 | disp.setPixel(Dy+y,Dx+x,0x0000); |
mitko | 0:7dfc10b70a77 | 17 | } |
mitko | 0:7dfc10b70a77 | 18 | |
mitko | 0:7dfc10b70a77 | 19 | // Enemies Visibility and Coordinates |
mitko | 0:7dfc10b70a77 | 20 | bool EnemyVisible[3][5]; |
mitko | 0:7dfc10b70a77 | 21 | /* { |
mitko | 0:7dfc10b70a77 | 22 | {true,true,true,true,true}, |
mitko | 0:7dfc10b70a77 | 23 | {true,true,true,true,true}, |
mitko | 0:7dfc10b70a77 | 24 | {true,true,true,true,true} |
mitko | 0:7dfc10b70a77 | 25 | }; */ |
mitko | 0:7dfc10b70a77 | 26 | bool FireBullet = false; // Fire Bullet |
mitko | 0:7dfc10b70a77 | 27 | |
mitko | 0:7dfc10b70a77 | 28 | int EnemyCol[3][5] = { |
mitko | 0:7dfc10b70a77 | 29 | {10,30,50,70,90}, |
mitko | 0:7dfc10b70a77 | 30 | {10,30,50,70,90}, |
mitko | 0:7dfc10b70a77 | 31 | {10,30,50,70,90} |
mitko | 0:7dfc10b70a77 | 32 | }; |
mitko | 0:7dfc10b70a77 | 33 | int EnemyRow[3][5] = { |
mitko | 0:7dfc10b70a77 | 34 | {10,10,10,10,10}, |
mitko | 0:7dfc10b70a77 | 35 | {20,20,20,20,20}, |
mitko | 0:7dfc10b70a77 | 36 | {30,30,30,30,30} |
mitko | 0:7dfc10b70a77 | 37 | }; |
mitko | 0:7dfc10b70a77 | 38 | // Enemy Unit Part 1 |
mitko | 0:7dfc10b70a77 | 39 | unsigned short Enemy1[8][11] = |
mitko | 0:7dfc10b70a77 | 40 | { |
mitko | 0:7dfc10b70a77 | 41 | {0x0000,0x0000,0x0000,0xffff,0x0000,0x0000,0x0000,0xffff,0x0000,0x0000,0x0000}, |
mitko | 0:7dfc10b70a77 | 42 | {0xffff,0x0000,0x0000,0xffff,0x0000,0x0000,0x0000,0xffff,0x0000,0x0000,0xffff}, |
mitko | 0:7dfc10b70a77 | 43 | {0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000,0xffff}, |
mitko | 0:7dfc10b70a77 | 44 | {0xffff,0xffff,0xffff,0x0000,0xffff,0xffff,0xffff,0x0000,0xffff,0xffff,0xffff}, |
mitko | 0:7dfc10b70a77 | 45 | {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}, |
mitko | 0:7dfc10b70a77 | 46 | {0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000}, |
mitko | 0:7dfc10b70a77 | 47 | {0x0000,0x0000,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0x0000,0x0000}, |
mitko | 0:7dfc10b70a77 | 48 | {0x0000,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0x0000}, |
mitko | 0:7dfc10b70a77 | 49 | }; |
mitko | 0:7dfc10b70a77 | 50 | // Enemy Unit Part 2 |
mitko | 0:7dfc10b70a77 | 51 | unsigned short Enemy2[8][11] = |
mitko | 0:7dfc10b70a77 | 52 | { |
mitko | 0:7dfc10b70a77 | 53 | {0x0000,0x0000,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0x0000,0x0000}, |
mitko | 0:7dfc10b70a77 | 54 | {0x0000,0x0000,0x0000,0xffff,0x0000,0x0000,0x0000,0xffff,0x0000,0x0000,0x0000}, |
mitko | 0:7dfc10b70a77 | 55 | {0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000,0x0000}, |
mitko | 0:7dfc10b70a77 | 56 | {0x0000,0xffff,0xffff,0x0000,0xffff,0xffff,0xffff,0x0000,0xffff,0xffff,0x0000}, |
mitko | 0:7dfc10b70a77 | 57 | {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}, |
mitko | 0:7dfc10b70a77 | 58 | {0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000,0xffff}, |
mitko | 0:7dfc10b70a77 | 59 | {0xffff,0x0000,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0x0000,0xffff}, |
mitko | 0:7dfc10b70a77 | 60 | {0x0000,0x0000,0x0000,0xffff,0xffff,0x0000,0xffff,0xffff,0x0000,0x0000,0x0000} |
mitko | 0:7dfc10b70a77 | 61 | }; |
mitko | 0:7dfc10b70a77 | 62 | // Draw Enemy Unit Part 1 |
mitko | 0:7dfc10b70a77 | 63 | void DrawEnemyUnitPart1(int Dx,int Dy) |
mitko | 0:7dfc10b70a77 | 64 | { |
mitko | 0:7dfc10b70a77 | 65 | DrawBlankUnit(Dx,Dy); |
mitko | 0:7dfc10b70a77 | 66 | for(int y=0;y<11;y++) |
mitko | 0:7dfc10b70a77 | 67 | for(int x=0;x<8;x++) |
mitko | 0:7dfc10b70a77 | 68 | if(Enemy1[x][y] != 0x0000) |
mitko | 0:7dfc10b70a77 | 69 | disp.setPixel(Dy+y,Dx+x,Enemy1[x][y]); |
mitko | 0:7dfc10b70a77 | 70 | } |
mitko | 0:7dfc10b70a77 | 71 | // Draw Enemy Unit Part 2 |
mitko | 0:7dfc10b70a77 | 72 | void DrawEnemyUnitPart2(int Dx,int Dy) |
mitko | 0:7dfc10b70a77 | 73 | { |
mitko | 0:7dfc10b70a77 | 74 | DrawBlankUnit(Dx,Dy); |
mitko | 0:7dfc10b70a77 | 75 | for(int y=0;y<11;y++) |
mitko | 0:7dfc10b70a77 | 76 | for(int x=0;x<8;x++) |
mitko | 0:7dfc10b70a77 | 77 | if(Enemy2[x][y] != 0x0000) |
mitko | 0:7dfc10b70a77 | 78 | disp.setPixel(Dy+y,Dx+x,Enemy2[x][y]); |
mitko | 0:7dfc10b70a77 | 79 | } |
mitko | 0:7dfc10b70a77 | 80 | // Draw All Visible Enemies |
mitko | 0:7dfc10b70a77 | 81 | void DrawEnemies(int y,int x) |
mitko | 0:7dfc10b70a77 | 82 | { |
mitko | 0:7dfc10b70a77 | 83 | // part 1 |
mitko | 0:7dfc10b70a77 | 84 | if(EnemyVisible[0][0]) DrawEnemyUnitPart1(EnemyRow[0][0]+y,EnemyCol[0][0]+x); |
mitko | 0:7dfc10b70a77 | 85 | if(EnemyVisible[0][1]) DrawEnemyUnitPart1(EnemyRow[0][1]+y,EnemyCol[0][1]+x); |
mitko | 0:7dfc10b70a77 | 86 | if(EnemyVisible[0][2]) DrawEnemyUnitPart1(EnemyRow[0][2]+y,EnemyCol[0][2]+x); |
mitko | 0:7dfc10b70a77 | 87 | if(EnemyVisible[0][3]) DrawEnemyUnitPart1(EnemyRow[0][3]+y,EnemyCol[0][3]+x); |
mitko | 0:7dfc10b70a77 | 88 | if(EnemyVisible[0][4]) DrawEnemyUnitPart1(EnemyRow[0][4]+y,EnemyCol[0][4]+x); |
mitko | 0:7dfc10b70a77 | 89 | if(EnemyVisible[1][0]) DrawEnemyUnitPart1(EnemyRow[1][0]+y,EnemyCol[1][0]+x); |
mitko | 0:7dfc10b70a77 | 90 | if(EnemyVisible[1][1]) DrawEnemyUnitPart1(EnemyRow[1][1]+y,EnemyCol[1][1]+x); |
mitko | 0:7dfc10b70a77 | 91 | if(EnemyVisible[1][2]) DrawEnemyUnitPart1(EnemyRow[1][2]+y,EnemyCol[1][2]+x); |
mitko | 0:7dfc10b70a77 | 92 | if(EnemyVisible[1][3]) DrawEnemyUnitPart1(EnemyRow[1][3]+y,EnemyCol[1][3]+x); |
mitko | 0:7dfc10b70a77 | 93 | if(EnemyVisible[1][4]) DrawEnemyUnitPart1(EnemyRow[1][4]+y,EnemyCol[1][4]+x); |
mitko | 0:7dfc10b70a77 | 94 | if(EnemyVisible[2][0]) DrawEnemyUnitPart1(EnemyRow[2][0]+y,EnemyCol[2][0]+x); |
mitko | 0:7dfc10b70a77 | 95 | if(EnemyVisible[2][1]) DrawEnemyUnitPart1(EnemyRow[2][1]+y,EnemyCol[2][1]+x); |
mitko | 0:7dfc10b70a77 | 96 | if(EnemyVisible[2][2]) DrawEnemyUnitPart1(EnemyRow[2][2]+y,EnemyCol[2][2]+x); |
mitko | 0:7dfc10b70a77 | 97 | if(EnemyVisible[2][3]) DrawEnemyUnitPart1(EnemyRow[2][3]+y,EnemyCol[2][3]+x); |
mitko | 0:7dfc10b70a77 | 98 | if(EnemyVisible[2][4]) DrawEnemyUnitPart1(EnemyRow[2][4]+y,EnemyCol[2][4]+x); |
mitko | 0:7dfc10b70a77 | 99 | // part 2 |
mitko | 0:7dfc10b70a77 | 100 | if(EnemyVisible[0][0]) DrawEnemyUnitPart2(EnemyRow[0][0]+y,EnemyCol[0][0]+x); |
mitko | 0:7dfc10b70a77 | 101 | if(EnemyVisible[0][1]) DrawEnemyUnitPart2(EnemyRow[0][1]+y,EnemyCol[0][1]+x); |
mitko | 0:7dfc10b70a77 | 102 | if(EnemyVisible[0][2]) DrawEnemyUnitPart2(EnemyRow[0][2]+y,EnemyCol[0][2]+x); |
mitko | 0:7dfc10b70a77 | 103 | if(EnemyVisible[0][3]) DrawEnemyUnitPart2(EnemyRow[0][3]+y,EnemyCol[0][3]+x); |
mitko | 0:7dfc10b70a77 | 104 | if(EnemyVisible[0][4]) DrawEnemyUnitPart2(EnemyRow[0][4]+y,EnemyCol[0][4]+x); |
mitko | 0:7dfc10b70a77 | 105 | if(EnemyVisible[1][0]) DrawEnemyUnitPart2(EnemyRow[1][0]+y,EnemyCol[1][0]+x); |
mitko | 0:7dfc10b70a77 | 106 | if(EnemyVisible[1][1]) DrawEnemyUnitPart2(EnemyRow[1][1]+y,EnemyCol[1][1]+x); |
mitko | 0:7dfc10b70a77 | 107 | if(EnemyVisible[1][2]) DrawEnemyUnitPart2(EnemyRow[1][2]+y,EnemyCol[1][2]+x); |
mitko | 0:7dfc10b70a77 | 108 | if(EnemyVisible[1][3]) DrawEnemyUnitPart2(EnemyRow[1][3]+y,EnemyCol[1][3]+x); |
mitko | 0:7dfc10b70a77 | 109 | if(EnemyVisible[1][4]) DrawEnemyUnitPart2(EnemyRow[1][4]+y,EnemyCol[1][4]+x); |
mitko | 0:7dfc10b70a77 | 110 | if(EnemyVisible[2][0]) DrawEnemyUnitPart2(EnemyRow[2][0]+y,EnemyCol[2][0]+x); |
mitko | 0:7dfc10b70a77 | 111 | if(EnemyVisible[2][1]) DrawEnemyUnitPart2(EnemyRow[2][1]+y,EnemyCol[2][1]+x); |
mitko | 0:7dfc10b70a77 | 112 | if(EnemyVisible[2][2]) DrawEnemyUnitPart2(EnemyRow[2][2]+y,EnemyCol[2][2]+x); |
mitko | 0:7dfc10b70a77 | 113 | if(EnemyVisible[2][3]) DrawEnemyUnitPart2(EnemyRow[2][3]+y,EnemyCol[2][3]+x); |
mitko | 0:7dfc10b70a77 | 114 | if(EnemyVisible[2][4]) DrawEnemyUnitPart2(EnemyRow[2][4]+y,EnemyCol[2][4]+x); |
mitko | 0:7dfc10b70a77 | 115 | // wait(0.01); // timeout |
mitko | 0:7dfc10b70a77 | 116 | } |
mitko | 0:7dfc10b70a77 | 117 | // Check Enemy Kill |
mitko | 0:7dfc10b70a77 | 118 | void EnemyKill(int By,int Bx,int Ey,int Ex) |
mitko | 0:7dfc10b70a77 | 119 | { |
mitko | 0:7dfc10b70a77 | 120 | for(int row=0;row<3;row++) |
mitko | 0:7dfc10b70a77 | 121 | for(int col=0;col<5;col++) |
mitko | 0:7dfc10b70a77 | 122 | if( EnemyVisible[row][col] == true and |
mitko | 0:7dfc10b70a77 | 123 | By >= EnemyRow[row][col]+Ey and By <= EnemyRow[row][col]+Ey+8 and |
mitko | 0:7dfc10b70a77 | 124 | Bx >= EnemyCol[row][col]+Ex and Bx <= EnemyCol[row][col]+Ex+11 |
mitko | 0:7dfc10b70a77 | 125 | ) |
mitko | 0:7dfc10b70a77 | 126 | { |
mitko | 0:7dfc10b70a77 | 127 | disp.setPixel(Bx,By,0x0000); // hide current bullet |
mitko | 0:7dfc10b70a77 | 128 | FireBullet = false; // enable next bullet |
mitko | 0:7dfc10b70a77 | 129 | EnemyVisible[row][col] = false; // disable killed enemy |
mitko | 0:7dfc10b70a77 | 130 | DrawBlankUnit(EnemyRow[row][col]+Ey,EnemyCol[row][col]+Ex); // hide killed enemy |
mitko | 0:7dfc10b70a77 | 131 | } |
mitko | 0:7dfc10b70a77 | 132 | } |
mitko | 0:7dfc10b70a77 | 133 | |
mitko | 0:7dfc10b70a77 | 134 | // Player Graphics |
mitko | 0:7dfc10b70a77 | 135 | unsigned short Player[8][11] = |
mitko | 0:7dfc10b70a77 | 136 | { |
mitko | 0:7dfc10b70a77 | 137 | {0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000}, |
mitko | 0:7dfc10b70a77 | 138 | {0x0000,0x0000,0x0000,0x0000,0xffff,0xffff,0xffff,0x0000,0x0000,0x0000,0x0000}, |
mitko | 0:7dfc10b70a77 | 139 | {0x0000,0x0000,0x0000,0x0000,0xffff,0xffff,0xffff,0x0000,0x0000,0x0000,0x0000}, |
mitko | 0:7dfc10b70a77 | 140 | {0x0000,0x0000,0x0000,0x0000,0xffff,0xffff,0xffff,0x0000,0x0000,0x0000,0x0000}, |
mitko | 0:7dfc10b70a77 | 141 | {0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000}, |
mitko | 0:7dfc10b70a77 | 142 | {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}, |
mitko | 0:7dfc10b70a77 | 143 | {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}, |
mitko | 0:7dfc10b70a77 | 144 | {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}, |
mitko | 0:7dfc10b70a77 | 145 | |
mitko | 0:7dfc10b70a77 | 146 | }; |
mitko | 0:7dfc10b70a77 | 147 | // Draw Player |
mitko | 0:7dfc10b70a77 | 148 | void DrawPlayer(int Dx,int Dy) |
mitko | 0:7dfc10b70a77 | 149 | { |
mitko | 0:7dfc10b70a77 | 150 | DrawBlankUnit(Dx,Dy); |
mitko | 0:7dfc10b70a77 | 151 | for(int y=0;y<11;y++) |
mitko | 0:7dfc10b70a77 | 152 | for(int x=0;x<8;x++) |
mitko | 0:7dfc10b70a77 | 153 | if(Player[x][y] != 0x0000) |
mitko | 0:7dfc10b70a77 | 154 | disp.setPixel(Dy+y,Dx+x,Player[x][y]); |
mitko | 0:7dfc10b70a77 | 155 | } |
mitko | 0:7dfc10b70a77 | 156 | |
mitko | 0:7dfc10b70a77 | 157 | /* Keyboard */ |
mitko | 0:7dfc10b70a77 | 158 | DigitalIn LeftButton(P0_14, PullUp); |
mitko | 0:7dfc10b70a77 | 159 | DigitalIn RightButton(P0_11, PullUp); |
mitko | 0:7dfc10b70a77 | 160 | DigitalIn FireButton(P0_1, PullUp); |
mitko | 0:7dfc10b70a77 | 161 | // DigitalIn FireButton(P0_16, PullUp); |
mitko | 0:7dfc10b70a77 | 162 | char LEFT = 0, RIGHT = 1, UP = 2, DOWN = 3; |
mitko | 0:7dfc10b70a77 | 163 | |
mitko | 0:7dfc10b70a77 | 164 | /* Dispplay Splash Screen */ |
mitko | 0:7dfc10b70a77 | 165 | void DisplaySplashScreen() |
mitko | 0:7dfc10b70a77 | 166 | { |
mitko | 0:7dfc10b70a77 | 167 | char* info[5] = |
mitko | 0:7dfc10b70a77 | 168 | { |
mitko | 0:7dfc10b70a77 | 169 | "Burgas Game Jam 2015", |
mitko | 0:7dfc10b70a77 | 170 | "Space Inviders Replica", |
mitko | 0:7dfc10b70a77 | 171 | "by Dimitar Minchev", |
mitko | 0:7dfc10b70a77 | 172 | "PhD of Informatics", |
mitko | 0:7dfc10b70a77 | 173 | "Press Fire to Start ..." |
mitko | 0:7dfc10b70a77 | 174 | }; |
mitko | 0:7dfc10b70a77 | 175 | // info |
mitko | 0:7dfc10b70a77 | 176 | disp.drawString(10, 10, info[0], 0xffff, 0x0000, 1); |
mitko | 0:7dfc10b70a77 | 177 | disp.drawString(10, 30, info[1], 0xffff, 0x0000, 1); |
mitko | 0:7dfc10b70a77 | 178 | disp.drawString(10, 50, info[2], 0xffff, 0x0000, 1); |
mitko | 0:7dfc10b70a77 | 179 | disp.drawString(10, 70, info[3], 0xffff, 0x0000, 1); |
mitko | 0:7dfc10b70a77 | 180 | disp.drawString(10, 90, info[4], 0xffff, 0x0000, 1); |
mitko | 0:7dfc10b70a77 | 181 | // wait keypress |
mitko | 0:7dfc10b70a77 | 182 | while (FireButton) wait_ms(1); |
mitko | 0:7dfc10b70a77 | 183 | disp.clear(); |
mitko | 0:7dfc10b70a77 | 184 | } |
mitko | 0:7dfc10b70a77 | 185 | // YouWin |
mitko | 0:7dfc10b70a77 | 186 | void DisplayYouWin() |
mitko | 0:7dfc10b70a77 | 187 | { |
mitko | 0:7dfc10b70a77 | 188 | disp.clear(); |
mitko | 0:7dfc10b70a77 | 189 | disp.drawString(10, 50, "You Win", 0xffff, 0x0000, 2); |
mitko | 0:7dfc10b70a77 | 190 | while(true) wait_ms(1); // forever until restart |
mitko | 0:7dfc10b70a77 | 191 | } |
mitko | 0:7dfc10b70a77 | 192 | // GameOver |
mitko | 0:7dfc10b70a77 | 193 | void DisplayGameOver() |
mitko | 0:7dfc10b70a77 | 194 | { |
mitko | 0:7dfc10b70a77 | 195 | disp.clear(); |
mitko | 0:7dfc10b70a77 | 196 | disp.drawString(10, 50, "Game Over", 0xffff, 0x0000, 2); |
mitko | 0:7dfc10b70a77 | 197 | while(true) wait_ms(1); // forever until restart |
mitko | 0:7dfc10b70a77 | 198 | } |
mitko | 0:7dfc10b70a77 | 199 | |
mitko | 0:7dfc10b70a77 | 200 | |
mitko | 0:7dfc10b70a77 | 201 | // Main function |
mitko | 0:7dfc10b70a77 | 202 | main() |
mitko | 0:7dfc10b70a77 | 203 | { |
mitko | 0:7dfc10b70a77 | 204 | // Start |
mitko | 0:7dfc10b70a77 | 205 | DisplaySplashScreen(); |
mitko | 0:7dfc10b70a77 | 206 | |
mitko | 0:7dfc10b70a77 | 207 | // vars |
mitko | 0:7dfc10b70a77 | 208 | bool MoveRight = true; // Movement Direction |
mitko | 0:7dfc10b70a77 | 209 | int Ex = 0, Ey = 0; // Enemies Coordinates |
mitko | 0:7dfc10b70a77 | 210 | int Px = 75, Py = 120; // Player Coordinates |
mitko | 0:7dfc10b70a77 | 211 | int Bx = 80, By = 120; // Bullet Coordinates |
mitko | 0:7dfc10b70a77 | 212 | |
mitko | 0:7dfc10b70a77 | 213 | // Initialize Emeny Visibility |
mitko | 0:7dfc10b70a77 | 214 | for(int row=0;row<3;row++) for(int col=0;col<5;col++) EnemyVisible[row][col] = true; |
mitko | 0:7dfc10b70a77 | 215 | |
mitko | 0:7dfc10b70a77 | 216 | // the loop |
mitko | 0:7dfc10b70a77 | 217 | while (true) |
mitko | 0:7dfc10b70a77 | 218 | { |
mitko | 0:7dfc10b70a77 | 219 | // Buttons |
mitko | 0:7dfc10b70a77 | 220 | int LeftButtonState = LeftButton.read(); |
mitko | 0:7dfc10b70a77 | 221 | if( LeftButtonState == 0 ) Px -= 5; |
mitko | 0:7dfc10b70a77 | 222 | int RightButtonState = RightButton.read(); |
mitko | 0:7dfc10b70a77 | 223 | if( RightButtonState == 0 ) Px += 5; |
mitko | 0:7dfc10b70a77 | 224 | int FireButtonState = FireButton.read(); |
mitko | 0:7dfc10b70a77 | 225 | if(FireButtonState == 0 && FireBullet == false) |
mitko | 0:7dfc10b70a77 | 226 | { |
mitko | 0:7dfc10b70a77 | 227 | Bx = Px + 5; |
mitko | 0:7dfc10b70a77 | 228 | By = Py; |
mitko | 0:7dfc10b70a77 | 229 | FireBullet = true; |
mitko | 0:7dfc10b70a77 | 230 | } |
mitko | 0:7dfc10b70a77 | 231 | |
mitko | 0:7dfc10b70a77 | 232 | // Draw Enemies |
mitko | 0:7dfc10b70a77 | 233 | DrawEnemies(Ey,Ex); |
mitko | 0:7dfc10b70a77 | 234 | |
mitko | 0:7dfc10b70a77 | 235 | // Draw Player |
mitko | 0:7dfc10b70a77 | 236 | DrawPlayer(Py,Px); |
mitko | 0:7dfc10b70a77 | 237 | |
mitko | 0:7dfc10b70a77 | 238 | // Bullet Movement |
mitko | 0:7dfc10b70a77 | 239 | if(FireBullet) |
mitko | 0:7dfc10b70a77 | 240 | { |
mitko | 0:7dfc10b70a77 | 241 | disp.setPixel(Bx,By,0x0000); |
mitko | 0:7dfc10b70a77 | 242 | By = By - 5; |
mitko | 0:7dfc10b70a77 | 243 | disp.setPixel(Bx,By,0xffff); |
mitko | 0:7dfc10b70a77 | 244 | } |
mitko | 0:7dfc10b70a77 | 245 | if(By <= 10) // Remove bulet if it is outside |
mitko | 0:7dfc10b70a77 | 246 | { |
mitko | 0:7dfc10b70a77 | 247 | disp.setPixel(Bx,By,0x0000); |
mitko | 0:7dfc10b70a77 | 248 | By = Py; |
mitko | 0:7dfc10b70a77 | 249 | FireBullet = false; |
mitko | 0:7dfc10b70a77 | 250 | } |
mitko | 0:7dfc10b70a77 | 251 | |
mitko | 0:7dfc10b70a77 | 252 | // Check if bullet hit enemy |
mitko | 0:7dfc10b70a77 | 253 | if(FireBullet) EnemyKill(By,Bx,Ey,Ex); |
mitko | 0:7dfc10b70a77 | 254 | |
mitko | 0:7dfc10b70a77 | 255 | // Enemies Movement |
mitko | 0:7dfc10b70a77 | 256 | if(Ex>=60 || Ex<=-6) |
mitko | 0:7dfc10b70a77 | 257 | { |
mitko | 0:7dfc10b70a77 | 258 | for(int row=10;row<=30;row+=10) |
mitko | 0:7dfc10b70a77 | 259 | for(int col=10;col<=90;col+=20) |
mitko | 0:7dfc10b70a77 | 260 | DrawBlankUnit(row+Ey,col+Ex); |
mitko | 0:7dfc10b70a77 | 261 | Ey += 10; |
mitko | 0:7dfc10b70a77 | 262 | } |
mitko | 0:7dfc10b70a77 | 263 | if(Ex>=60) MoveRight = false; |
mitko | 0:7dfc10b70a77 | 264 | if(Ex<=-6) MoveRight = true; |
mitko | 0:7dfc10b70a77 | 265 | if(MoveRight) Ex++; |
mitko | 0:7dfc10b70a77 | 266 | else Ex--; |
mitko | 0:7dfc10b70a77 | 267 | |
mitko | 0:7dfc10b70a77 | 268 | // Check Win or Lose |
mitko | 0:7dfc10b70a77 | 269 | bool win = true; |
mitko | 0:7dfc10b70a77 | 270 | for(int row=0;row<3;row++) for(int col=0;col<5;col++) if(EnemyVisible[row][col] == true) win = false; |
mitko | 0:7dfc10b70a77 | 271 | if(win) DisplayYouWin(); |
mitko | 0:7dfc10b70a77 | 272 | if(Ey >= 120) DisplayGameOver(); |
mitko | 0:7dfc10b70a77 | 273 | } |
mitko | 0:7dfc10b70a77 | 274 | } |