tim004 tim004
/
Iks-oks-beta
Emina Muharemovic Hamdija Sinanovic
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 #include "N5110.h" 00003 00004 #define POLUPRECNIK 5 00005 00006 N5110 display (dp4, dp24, dp23, dp25, dp2, dp6, dp18); 00007 AnalogIn VRx(dp11); 00008 AnalogIn VRy(dp10); 00009 InterruptIn SW(dp9); 00010 DigitalOut enable(dp14); 00011 Timer deb; 00012 00013 bool tabela = false; 00014 bool player1 = true; 00015 bool nerjeseno = false; 00016 00017 int pobjedeX; 00018 int pobjedeO; 00019 int brojac; 00020 00021 struct kursor { 00022 int x; 00023 int y; 00024 } _c; 00025 00026 struct polje { 00027 kursor gore_lijevo; 00028 kursor dolje_desno; 00029 char vrijednost; 00030 }; 00031 00032 polje ekran[3][3]; 00033 00034 00035 void postaviPolja(){ 00036 00037 ekran[0][0].gore_lijevo.x = 0; 00038 ekran[0][0].gore_lijevo.y = 0; 00039 ekran[0][0].dolje_desno.x = 26; 00040 ekran[0][0].dolje_desno.y = 14; 00041 ekran[0][0].vrijednost = 'a'; 00042 00043 ekran[0][1].gore_lijevo.x = 0; 00044 ekran[0][1].gore_lijevo.y = 16; 00045 ekran[0][1].dolje_desno.x = 26; 00046 ekran[0][1].dolje_desno.y = 30; 00047 ekran[0][1].vrijednost = 'a'; 00048 00049 ekran[0][2].gore_lijevo.x = 0; 00050 ekran[0][2].gore_lijevo.y = 32; 00051 ekran[0][2].dolje_desno.x = 26; 00052 ekran[0][2].dolje_desno.y = 47; 00053 ekran[0][2].vrijednost = 'a'; 00054 00055 ekran[1][0].gore_lijevo.x = 28; 00056 ekran[1][0].gore_lijevo.y = 0; 00057 ekran[1][0].dolje_desno.x = 54; 00058 ekran[1][0].dolje_desno.y = 14; 00059 ekran[1][0].vrijednost = 'a'; 00060 00061 ekran[1][1].gore_lijevo.x = 28; 00062 ekran[1][1].gore_lijevo.y = 16; 00063 ekran[1][1].dolje_desno.x = 54; 00064 ekran[1][1].dolje_desno.y = 30; 00065 ekran[1][1].vrijednost = 'a'; 00066 00067 ekran[1][2].gore_lijevo.x = 28; 00068 ekran[1][2].gore_lijevo.y = 32; 00069 ekran[1][2].dolje_desno.x = 54; 00070 ekran[1][2].dolje_desno.y = 47; 00071 ekran[1][2].vrijednost = 'a'; 00072 00073 ekran[2][0].gore_lijevo.x = 56; 00074 ekran[2][0].gore_lijevo.y = 0; 00075 ekran[2][0].dolje_desno.x = 83; 00076 ekran[2][0].dolje_desno.y = 14; 00077 ekran[2][0].vrijednost = 'a'; 00078 00079 ekran[2][1].gore_lijevo.x = 56; 00080 ekran[2][1].gore_lijevo.y = 16; 00081 ekran[2][1].dolje_desno.x = 83; 00082 ekran[2][1].dolje_desno.y = 30; 00083 ekran[2][1].vrijednost = 'a'; 00084 00085 ekran[2][2].gore_lijevo.x = 56; 00086 ekran[2][2].gore_lijevo.y = 32; 00087 ekran[2][2].dolje_desno.x = 83; 00088 ekran[2][2].dolje_desno.y = 47; 00089 ekran[2][2].vrijednost = 'a'; 00090 } 00091 00092 int mod; //0 - pocetni; 1 - singleplayer; 2 - multiplayer 00093 int player; 00094 int polja[3][3]; 00095 00096 void cursor(int x, int y) 00097 { 00098 display.setPixel(x, y+1); 00099 display.setPixel(x-1, y); 00100 display.setPixel(x, y); 00101 display.setPixel(x+1, y); 00102 display.setPixel(x, y-1); 00103 display.refresh(); 00104 } 00105 00106 void drawTable(); 00107 void osvjezi(); 00108 00109 void brisi(int x, int y) 00110 { 00111 display.clearPixel(x, y+1); 00112 display.clearPixel(x-1, y); 00113 display.clearPixel(x, y); 00114 display.clearPixel(x+1, y); 00115 display.clearPixel(x, y-1); 00116 display.refresh(); 00117 if(tabela) { 00118 drawTable(); 00119 osvjezi(); 00120 } 00121 } 00122 00123 void Lijevo(int &x, int &y) 00124 { 00125 if(x>1){ 00126 brisi(x,y); 00127 x=x-1; 00128 cursor(x,y); 00129 00130 } 00131 } 00132 00133 void Desno(int &x, int &y) 00134 { 00135 if(x<82){ 00136 brisi(x,y); 00137 x=x+1; 00138 cursor(x,y); 00139 } 00140 } 00141 00142 void Gore(int &x, int &y) 00143 { 00144 if(y>1){ 00145 brisi(x,y); 00146 y=y-1; 00147 cursor(x,y); 00148 } 00149 } 00150 00151 void Dolje(int &x, int &y) 00152 { 00153 if(y<46){ 00154 brisi(x,y); 00155 y=y+1; 00156 cursor(x,y); 00157 } 00158 } 00159 00160 void tekst(); 00161 00162 void inicijalizirajDisplej(){ 00163 tekst(); 00164 } 00165 00166 void tekst() { 00167 display.setXYAddress(0, 0); 00168 display.printChar('I'); 00169 display.printChar('z'); 00170 display.printChar('a'); 00171 display.printChar('b'); 00172 display.printChar('e'); 00173 display.printChar('r'); 00174 display.printChar('i'); 00175 display.printChar('t'); 00176 display.printChar('e'); 00177 display.printChar(' '); 00178 display.printChar('m'); 00179 display.printChar('o'); 00180 display.printChar('d'); 00181 display.printChar(':'); 00182 display.setXYAddress(0, 2); 00183 display.printChar('1'); 00184 display.printChar(' '); 00185 display.printChar('i'); 00186 display.printChar('g'); 00187 display.printChar('r'); 00188 display.printChar('a'); 00189 display.printChar('c'); 00190 display.setXYAddress(0, 4); 00191 display.printChar('2'); 00192 display.printChar(' '); 00193 display.printChar('i'); 00194 display.printChar('g'); 00195 display.printChar('r'); 00196 display.printChar('a'); 00197 display.printChar('c'); 00198 display.printChar('a'); 00199 00200 } 00201 00202 void drawTable() { 00203 for(int i = 0; i < 84; i++) { 00204 display.setPixel(i, 15); 00205 display.setPixel(i, 31); 00206 } 00207 for(int i = 0; i < 48; i++) { 00208 display.setPixel(27, i); 00209 display.setPixel(55, i); 00210 } 00211 display.refresh(); 00212 } 00213 00214 void singleplayerMod(){ 00215 display.clear(); 00216 mod = 1; 00217 tabela = true; 00218 drawTable(); 00219 } 00220 00221 void multiplayerMod(){ 00222 display.clear(); 00223 tabela = true; 00224 drawTable(); 00225 mod = 2; 00226 } 00227 00228 void izbor (){ 00229 if(_c.y >= 8*2 && _c.y <= 8*3) {singleplayerMod();} 00230 else if(_c.y >= 8*4 && _c.y <= 8*5) {multiplayerMod();} 00231 } 00232 00233 void krajIgre() { 00234 display.clear(); 00235 display.printChar('R'); 00236 display.printChar('e'); 00237 display.printChar('z'); 00238 display.printChar('u'); 00239 display.printChar('l'); 00240 display.printChar('t'); 00241 display.printChar('a'); 00242 display.printChar('t'); 00243 display.printChar(':'); 00244 display.printChar(' '); 00245 display.printChar('0' + pobjedeX); 00246 display.printChar('-'); 00247 display.printChar('0' + pobjedeO); 00248 wait(3); 00249 display.clear(); 00250 drawTable(); 00251 for(int i = 0; i < 3; i++) { 00252 for(int j = 0; j < 3; j++) { 00253 ekran[i][j].vrijednost = 'a'; 00254 } 00255 } 00256 brojac = 0; 00257 } 00258 00259 void provjeriPobjede() { 00260 if( 00261 (ekran[0][0].vrijednost == ekran[0][1].vrijednost && ekran[0][1].vrijednost == ekran[0][2].vrijednost && ekran[0][2].vrijednost != 'a') || 00262 (ekran[1][0].vrijednost == ekran[1][1].vrijednost && ekran[1][1].vrijednost == ekran[1][2].vrijednost && ekran[1][2].vrijednost != 'a') || 00263 (ekran[2][0].vrijednost == ekran[2][1].vrijednost && ekran[2][1].vrijednost == ekran[2][2].vrijednost && ekran[2][2].vrijednost != 'a') || 00264 (ekran[0][0].vrijednost == ekran[1][0].vrijednost && ekran[1][0].vrijednost == ekran[2][0].vrijednost && ekran[2][0].vrijednost != 'a') || 00265 (ekran[0][1].vrijednost == ekran[1][1].vrijednost && ekran[1][1].vrijednost == ekran[2][1].vrijednost && ekran[2][1].vrijednost != 'a') || 00266 (ekran[0][2].vrijednost == ekran[1][2].vrijednost && ekran[1][2].vrijednost == ekran[2][2].vrijednost && ekran[2][2].vrijednost != 'a') || 00267 (ekran[0][0].vrijednost == ekran[1][1].vrijednost && ekran[1][1].vrijednost == ekran[2][2].vrijednost && ekran[2][2].vrijednost != 'a') || 00268 (ekran[0][2].vrijednost == ekran[1][1].vrijednost && ekran[1][1].vrijednost == ekran[2][0].vrijednost && ekran[2][0].vrijednost != 'a') 00269 ) { 00270 if(player1) { 00271 pobjedeX++; 00272 wait(1); 00273 krajIgre(); 00274 } 00275 else { 00276 pobjedeO++; 00277 wait(1); 00278 krajIgre(); 00279 } 00280 } 00281 } 00282 00283 void crtajX(int x, int y); 00284 void crtajO(int x0, int y0, int radius); 00285 00286 void klik() { 00287 if(deb.read_ms() > 400) { 00288 if(mod == 0) izbor(); 00289 else { 00290 for(int i = 0; i < 3; i++) { 00291 for(int j = 0; j < 3; j++) { 00292 if(_c.x >= ekran[i][j].gore_lijevo.x &&_c.x <= ekran[i][j].dolje_desno.x && _c.y >= ekran[i][j].gore_lijevo.y && _c.y <= ekran[i][j].dolje_desno.y && ekran[i][j].vrijednost == 'a') { 00293 if(player1) { 00294 crtajX(13+28*i, 7+16*j); 00295 ekran[i][j].vrijednost = 'X'; 00296 provjeriPobjede(); 00297 brojac++; 00298 } 00299 else { 00300 crtajO(13+28*i, 7+16*j, POLUPRECNIK); 00301 ekran[i][j].vrijednost = 'O'; 00302 provjeriPobjede(); 00303 brojac++; 00304 } 00305 player1 = !player1; 00306 if(mod == 1) { 00307 for(int a = 0; a < 3; a++) { 00308 for(int b = 0; b < 3; b++) { 00309 if(ekran[a][b].vrijednost == 'a' && !player1) { 00310 crtajO(13+28*a, 7+16*b, POLUPRECNIK); 00311 ekran[a][b].vrijednost = 'O'; 00312 provjeriPobjede(); 00313 player1 = !player1; 00314 brojac++; 00315 } 00316 } 00317 } 00318 } 00319 if(brojac == 9) { 00320 wait(1); 00321 krajIgre(); 00322 } 00323 } 00324 } 00325 } 00326 } 00327 deb.reset(); 00328 } 00329 } 00330 00331 void crtajX(int x, int y) { 00332 display.setPixel(x, y); 00333 for(int i = 1; i <= 5; i++) { 00334 display.setPixel(x+i, y+i); 00335 display.setPixel(x+i, y-i); 00336 display.setPixel(x-i, y+i); 00337 display.setPixel(x-i, y-i); 00338 } 00339 display.refresh(); 00340 } 00341 00342 void crtajO(int x0, int y0, int radius) { 00343 int x = radius, y = 0; 00344 int radiusError = 1-x; 00345 00346 while(x >= y) 00347 { 00348 display.setPixel(x + x0, y + y0); 00349 display.setPixel(y + x0, x + y0); 00350 display.setPixel(-x + x0, y + y0); 00351 display.setPixel(-y + x0, x + y0); 00352 display.setPixel(-x + x0, -y + y0); 00353 display.setPixel(-y + x0, -x + y0); 00354 display.setPixel(x + x0, -y + y0); 00355 display.setPixel(y + x0, -x + y0); 00356 y++; 00357 if (radiusError<0) 00358 { 00359 radiusError += 2 * y + 1; 00360 } else { 00361 x--; 00362 radiusError+= 2 * (y - x + 1); 00363 } 00364 } 00365 display.refresh(); 00366 } 00367 00368 void osvjezi() { 00369 for(int i = 0; i < 3; i++) { 00370 for(int j = 0; j < 3; j++) { 00371 if(ekran[i][j].vrijednost == 'X') { 00372 crtajX(13+28*i, 7+16*j); 00373 } 00374 else if(ekran[i][j].vrijednost == 'O') { 00375 crtajO(13+28*i, 7+16*j, POLUPRECNIK); 00376 } 00377 } 00378 } 00379 } 00380 00381 int main() { 00382 enable = 1; 00383 SW.mode(PullUp); 00384 pobjedeX = 0; 00385 pobjedeO = 0; 00386 _c.x = 1; 00387 _c.y = 1; 00388 mod = 0; 00389 display.init(); 00390 SW.rise(&klik); 00391 deb.start(); 00392 inicijalizirajDisplej(); 00393 postaviPolja(); 00394 while(1) { 00395 if(mod == 0) tekst(); 00396 if(VRx < 1.0/3.0) Lijevo(_c.x, _c.y); 00397 else if(VRx > 2.0/3.0) Desno(_c.x, _c.y); 00398 if(VRy < 1.0/3.0) Gore(_c.x, _c.y); 00399 else if(VRy > 2.0/3.0) Dolje(_c.x, _c.y); 00400 } 00401 }
Generated on Thu Jul 14 2022 23:06:42 by 1.7.2