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.
main.cpp
00001 #include "mbed.h" 00002 00003 00004 /* Display Resultion (128x160) */ 00005 #include "DisplayN18.h" 00006 DisplayN18 disp; 00007 char width = 160, height = 128; 00008 00009 00010 /* Graphic Units */ 00011 // Draw Blank Unit (13x10) 00012 void DrawBlankUnit(int Dx,int Dy) 00013 { 00014 for(int y=-5;y<16;y++) 00015 for(int x=0;x<8;x++) 00016 disp.setPixel(Dy+y,Dx+x,0x0000); 00017 } 00018 00019 // Enemies Visibility and Coordinates 00020 bool EnemyVisible[3][5]; 00021 /* { 00022 {true,true,true,true,true}, 00023 {true,true,true,true,true}, 00024 {true,true,true,true,true} 00025 }; */ 00026 bool FireBullet = false; // Fire Bullet 00027 00028 int EnemyCol[3][5] = { 00029 {10,30,50,70,90}, 00030 {10,30,50,70,90}, 00031 {10,30,50,70,90} 00032 }; 00033 int EnemyRow[3][5] = { 00034 {10,10,10,10,10}, 00035 {20,20,20,20,20}, 00036 {30,30,30,30,30} 00037 }; 00038 // Enemy Unit Part 1 00039 unsigned short Enemy1[8][11] = 00040 { 00041 {0x0000,0x0000,0x0000,0xffff,0x0000,0x0000,0x0000,0xffff,0x0000,0x0000,0x0000}, 00042 {0xffff,0x0000,0x0000,0xffff,0x0000,0x0000,0x0000,0xffff,0x0000,0x0000,0xffff}, 00043 {0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000,0xffff}, 00044 {0xffff,0xffff,0xffff,0x0000,0xffff,0xffff,0xffff,0x0000,0xffff,0xffff,0xffff}, 00045 {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}, 00046 {0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000}, 00047 {0x0000,0x0000,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0x0000,0x0000}, 00048 {0x0000,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0x0000}, 00049 }; 00050 // Enemy Unit Part 2 00051 unsigned short Enemy2[8][11] = 00052 { 00053 {0x0000,0x0000,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0x0000,0x0000}, 00054 {0x0000,0x0000,0x0000,0xffff,0x0000,0x0000,0x0000,0xffff,0x0000,0x0000,0x0000}, 00055 {0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000,0x0000}, 00056 {0x0000,0xffff,0xffff,0x0000,0xffff,0xffff,0xffff,0x0000,0xffff,0xffff,0x0000}, 00057 {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}, 00058 {0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000,0xffff}, 00059 {0xffff,0x0000,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0x0000,0xffff}, 00060 {0x0000,0x0000,0x0000,0xffff,0xffff,0x0000,0xffff,0xffff,0x0000,0x0000,0x0000} 00061 }; 00062 // Draw Enemy Unit Part 1 00063 void DrawEnemyUnitPart1(int Dx,int Dy) 00064 { 00065 DrawBlankUnit(Dx,Dy); 00066 for(int y=0;y<11;y++) 00067 for(int x=0;x<8;x++) 00068 if(Enemy1[x][y] != 0x0000) 00069 disp.setPixel(Dy+y,Dx+x,Enemy1[x][y]); 00070 } 00071 // Draw Enemy Unit Part 2 00072 void DrawEnemyUnitPart2(int Dx,int Dy) 00073 { 00074 DrawBlankUnit(Dx,Dy); 00075 for(int y=0;y<11;y++) 00076 for(int x=0;x<8;x++) 00077 if(Enemy2[x][y] != 0x0000) 00078 disp.setPixel(Dy+y,Dx+x,Enemy2[x][y]); 00079 } 00080 // Draw All Visible Enemies 00081 void DrawEnemies(int y,int x) 00082 { 00083 // part 1 00084 if(EnemyVisible[0][0]) DrawEnemyUnitPart1(EnemyRow[0][0]+y,EnemyCol[0][0]+x); 00085 if(EnemyVisible[0][1]) DrawEnemyUnitPart1(EnemyRow[0][1]+y,EnemyCol[0][1]+x); 00086 if(EnemyVisible[0][2]) DrawEnemyUnitPart1(EnemyRow[0][2]+y,EnemyCol[0][2]+x); 00087 if(EnemyVisible[0][3]) DrawEnemyUnitPart1(EnemyRow[0][3]+y,EnemyCol[0][3]+x); 00088 if(EnemyVisible[0][4]) DrawEnemyUnitPart1(EnemyRow[0][4]+y,EnemyCol[0][4]+x); 00089 if(EnemyVisible[1][0]) DrawEnemyUnitPart1(EnemyRow[1][0]+y,EnemyCol[1][0]+x); 00090 if(EnemyVisible[1][1]) DrawEnemyUnitPart1(EnemyRow[1][1]+y,EnemyCol[1][1]+x); 00091 if(EnemyVisible[1][2]) DrawEnemyUnitPart1(EnemyRow[1][2]+y,EnemyCol[1][2]+x); 00092 if(EnemyVisible[1][3]) DrawEnemyUnitPart1(EnemyRow[1][3]+y,EnemyCol[1][3]+x); 00093 if(EnemyVisible[1][4]) DrawEnemyUnitPart1(EnemyRow[1][4]+y,EnemyCol[1][4]+x); 00094 if(EnemyVisible[2][0]) DrawEnemyUnitPart1(EnemyRow[2][0]+y,EnemyCol[2][0]+x); 00095 if(EnemyVisible[2][1]) DrawEnemyUnitPart1(EnemyRow[2][1]+y,EnemyCol[2][1]+x); 00096 if(EnemyVisible[2][2]) DrawEnemyUnitPart1(EnemyRow[2][2]+y,EnemyCol[2][2]+x); 00097 if(EnemyVisible[2][3]) DrawEnemyUnitPart1(EnemyRow[2][3]+y,EnemyCol[2][3]+x); 00098 if(EnemyVisible[2][4]) DrawEnemyUnitPart1(EnemyRow[2][4]+y,EnemyCol[2][4]+x); 00099 // part 2 00100 if(EnemyVisible[0][0]) DrawEnemyUnitPart2(EnemyRow[0][0]+y,EnemyCol[0][0]+x); 00101 if(EnemyVisible[0][1]) DrawEnemyUnitPart2(EnemyRow[0][1]+y,EnemyCol[0][1]+x); 00102 if(EnemyVisible[0][2]) DrawEnemyUnitPart2(EnemyRow[0][2]+y,EnemyCol[0][2]+x); 00103 if(EnemyVisible[0][3]) DrawEnemyUnitPart2(EnemyRow[0][3]+y,EnemyCol[0][3]+x); 00104 if(EnemyVisible[0][4]) DrawEnemyUnitPart2(EnemyRow[0][4]+y,EnemyCol[0][4]+x); 00105 if(EnemyVisible[1][0]) DrawEnemyUnitPart2(EnemyRow[1][0]+y,EnemyCol[1][0]+x); 00106 if(EnemyVisible[1][1]) DrawEnemyUnitPart2(EnemyRow[1][1]+y,EnemyCol[1][1]+x); 00107 if(EnemyVisible[1][2]) DrawEnemyUnitPart2(EnemyRow[1][2]+y,EnemyCol[1][2]+x); 00108 if(EnemyVisible[1][3]) DrawEnemyUnitPart2(EnemyRow[1][3]+y,EnemyCol[1][3]+x); 00109 if(EnemyVisible[1][4]) DrawEnemyUnitPart2(EnemyRow[1][4]+y,EnemyCol[1][4]+x); 00110 if(EnemyVisible[2][0]) DrawEnemyUnitPart2(EnemyRow[2][0]+y,EnemyCol[2][0]+x); 00111 if(EnemyVisible[2][1]) DrawEnemyUnitPart2(EnemyRow[2][1]+y,EnemyCol[2][1]+x); 00112 if(EnemyVisible[2][2]) DrawEnemyUnitPart2(EnemyRow[2][2]+y,EnemyCol[2][2]+x); 00113 if(EnemyVisible[2][3]) DrawEnemyUnitPart2(EnemyRow[2][3]+y,EnemyCol[2][3]+x); 00114 if(EnemyVisible[2][4]) DrawEnemyUnitPart2(EnemyRow[2][4]+y,EnemyCol[2][4]+x); 00115 // wait(0.01); // timeout 00116 } 00117 // Check Enemy Kill 00118 void EnemyKill(int By,int Bx,int Ey,int Ex) 00119 { 00120 for(int row=0;row<3;row++) 00121 for(int col=0;col<5;col++) 00122 if( EnemyVisible[row][col] == true and 00123 By >= EnemyRow[row][col]+Ey and By <= EnemyRow[row][col]+Ey+8 and 00124 Bx >= EnemyCol[row][col]+Ex and Bx <= EnemyCol[row][col]+Ex+11 00125 ) 00126 { 00127 disp.setPixel(Bx,By,0x0000); // hide current bullet 00128 FireBullet = false; // enable next bullet 00129 EnemyVisible[row][col] = false; // disable killed enemy 00130 DrawBlankUnit(EnemyRow[row][col]+Ey,EnemyCol[row][col]+Ex); // hide killed enemy 00131 } 00132 } 00133 00134 // Player Graphics 00135 unsigned short Player[8][11] = 00136 { 00137 {0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000}, 00138 {0x0000,0x0000,0x0000,0x0000,0xffff,0xffff,0xffff,0x0000,0x0000,0x0000,0x0000}, 00139 {0x0000,0x0000,0x0000,0x0000,0xffff,0xffff,0xffff,0x0000,0x0000,0x0000,0x0000}, 00140 {0x0000,0x0000,0x0000,0x0000,0xffff,0xffff,0xffff,0x0000,0x0000,0x0000,0x0000}, 00141 {0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000}, 00142 {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}, 00143 {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}, 00144 {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}, 00145 00146 }; 00147 // Draw Player 00148 void DrawPlayer(int Dx,int Dy) 00149 { 00150 DrawBlankUnit(Dx,Dy); 00151 for(int y=0;y<11;y++) 00152 for(int x=0;x<8;x++) 00153 if(Player[x][y] != 0x0000) 00154 disp.setPixel(Dy+y,Dx+x,Player[x][y]); 00155 } 00156 00157 /* Keyboard */ 00158 DigitalIn LeftButton(P0_14, PullUp); 00159 DigitalIn RightButton(P0_11, PullUp); 00160 DigitalIn FireButton(P0_1, PullUp); 00161 // DigitalIn FireButton(P0_16, PullUp); 00162 char LEFT = 0, RIGHT = 1, UP = 2, DOWN = 3; 00163 00164 /* Dispplay Splash Screen */ 00165 void DisplaySplashScreen() 00166 { 00167 char* info[5] = 00168 { 00169 "Burgas Game Jam 2015", 00170 "Space Inviders Replica", 00171 "by Dimitar Minchev", 00172 "PhD of Informatics", 00173 "Press Fire to Start ..." 00174 }; 00175 // info 00176 disp.drawString(10, 10, info[0], 0xffff, 0x0000, 1); 00177 disp.drawString(10, 30, info[1], 0xffff, 0x0000, 1); 00178 disp.drawString(10, 50, info[2], 0xffff, 0x0000, 1); 00179 disp.drawString(10, 70, info[3], 0xffff, 0x0000, 1); 00180 disp.drawString(10, 90, info[4], 0xffff, 0x0000, 1); 00181 // wait keypress 00182 while (FireButton) wait_ms(1); 00183 disp.clear(); 00184 } 00185 // YouWin 00186 void DisplayYouWin() 00187 { 00188 disp.clear(); 00189 disp.drawString(10, 50, "You Win", 0xffff, 0x0000, 2); 00190 while(true) wait_ms(1); // forever until restart 00191 } 00192 // GameOver 00193 void DisplayGameOver() 00194 { 00195 disp.clear(); 00196 disp.drawString(10, 50, "Game Over", 0xffff, 0x0000, 2); 00197 while(true) wait_ms(1); // forever until restart 00198 } 00199 00200 00201 // Main function 00202 main() 00203 { 00204 // Start 00205 DisplaySplashScreen(); 00206 00207 // vars 00208 bool MoveRight = true; // Movement Direction 00209 int Ex = 0, Ey = 0; // Enemies Coordinates 00210 int Px = 75, Py = 120; // Player Coordinates 00211 int Bx = 80, By = 120; // Bullet Coordinates 00212 00213 // Initialize Emeny Visibility 00214 for(int row=0;row<3;row++) for(int col=0;col<5;col++) EnemyVisible[row][col] = true; 00215 00216 // the loop 00217 while (true) 00218 { 00219 // Buttons 00220 int LeftButtonState = LeftButton.read(); 00221 if( LeftButtonState == 0 ) Px -= 5; 00222 int RightButtonState = RightButton.read(); 00223 if( RightButtonState == 0 ) Px += 5; 00224 int FireButtonState = FireButton.read(); 00225 if(FireButtonState == 0 && FireBullet == false) 00226 { 00227 Bx = Px + 5; 00228 By = Py; 00229 FireBullet = true; 00230 } 00231 00232 // Draw Enemies 00233 DrawEnemies(Ey,Ex); 00234 00235 // Draw Player 00236 DrawPlayer(Py,Px); 00237 00238 // Bullet Movement 00239 if(FireBullet) 00240 { 00241 disp.setPixel(Bx,By,0x0000); 00242 By = By - 5; 00243 disp.setPixel(Bx,By,0xffff); 00244 } 00245 if(By <= 10) // Remove bulet if it is outside 00246 { 00247 disp.setPixel(Bx,By,0x0000); 00248 By = Py; 00249 FireBullet = false; 00250 } 00251 00252 // Check if bullet hit enemy 00253 if(FireBullet) EnemyKill(By,Bx,Ey,Ex); 00254 00255 // Enemies Movement 00256 if(Ex>=60 || Ex<=-6) 00257 { 00258 for(int row=10;row<=30;row+=10) 00259 for(int col=10;col<=90;col+=20) 00260 DrawBlankUnit(row+Ey,col+Ex); 00261 Ey += 10; 00262 } 00263 if(Ex>=60) MoveRight = false; 00264 if(Ex<=-6) MoveRight = true; 00265 if(MoveRight) Ex++; 00266 else Ex--; 00267 00268 // Check Win or Lose 00269 bool win = true; 00270 for(int row=0;row<3;row++) for(int col=0;col<5;col++) if(EnemyVisible[row][col] == true) win = false; 00271 if(win) DisplayYouWin(); 00272 if(Ey >= 120) DisplayGameOver(); 00273 } 00274 }
Generated on Mon Jul 25 2022 04:13:13 by
1.7.2