Emina Muharemovic Hamdija Sinanovic

Dependencies:   N5110 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }