Emina Muharemovic Hamdija Sinanovic

Dependencies:   N5110 mbed

Revision:
0:72dfee80b000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Jun 09 07:59:44 2014 +0000
@@ -0,0 +1,401 @@
+#include "mbed.h"
+#include "N5110.h"
+
+#define POLUPRECNIK 5
+
+N5110 display (dp4, dp24, dp23, dp25, dp2, dp6, dp18);
+AnalogIn VRx(dp11);
+AnalogIn VRy(dp10);
+InterruptIn SW(dp9);
+DigitalOut enable(dp14);
+Timer deb;
+
+bool tabela = false;
+bool player1 = true;
+bool nerjeseno = false;
+
+int pobjedeX;
+int pobjedeO;
+int brojac;
+
+struct kursor {
+    int x;
+    int y;
+} _c;
+
+struct polje {
+    kursor gore_lijevo;
+    kursor dolje_desno;
+    char vrijednost;
+};
+
+polje ekran[3][3];
+
+
+void postaviPolja(){
+
+ekran[0][0].gore_lijevo.x = 0;
+ekran[0][0].gore_lijevo.y = 0;
+ekran[0][0].dolje_desno.x = 26;
+ekran[0][0].dolje_desno.y = 14;
+ekran[0][0].vrijednost = 'a';
+
+ekran[0][1].gore_lijevo.x = 0;
+ekran[0][1].gore_lijevo.y = 16;
+ekran[0][1].dolje_desno.x = 26;
+ekran[0][1].dolje_desno.y = 30;
+ekran[0][1].vrijednost = 'a';
+
+ekran[0][2].gore_lijevo.x = 0;
+ekran[0][2].gore_lijevo.y = 32;
+ekran[0][2].dolje_desno.x = 26;
+ekran[0][2].dolje_desno.y = 47;
+ekran[0][2].vrijednost = 'a';
+
+ekran[1][0].gore_lijevo.x = 28;
+ekran[1][0].gore_lijevo.y = 0;
+ekran[1][0].dolje_desno.x = 54;
+ekran[1][0].dolje_desno.y = 14;
+ekran[1][0].vrijednost = 'a';
+
+ekran[1][1].gore_lijevo.x = 28;
+ekran[1][1].gore_lijevo.y = 16;
+ekran[1][1].dolje_desno.x = 54;
+ekran[1][1].dolje_desno.y = 30;
+ekran[1][1].vrijednost = 'a';
+
+ekran[1][2].gore_lijevo.x = 28;
+ekran[1][2].gore_lijevo.y = 32;
+ekran[1][2].dolje_desno.x = 54;
+ekran[1][2].dolje_desno.y = 47;
+ekran[1][2].vrijednost = 'a';
+
+ekran[2][0].gore_lijevo.x = 56;
+ekran[2][0].gore_lijevo.y = 0;
+ekran[2][0].dolje_desno.x = 83;
+ekran[2][0].dolje_desno.y = 14;
+ekran[2][0].vrijednost = 'a';
+
+ekran[2][1].gore_lijevo.x = 56;
+ekran[2][1].gore_lijevo.y = 16;
+ekran[2][1].dolje_desno.x = 83;
+ekran[2][1].dolje_desno.y = 30;
+ekran[2][1].vrijednost = 'a';
+
+ekran[2][2].gore_lijevo.x = 56;
+ekran[2][2].gore_lijevo.y = 32;
+ekran[2][2].dolje_desno.x = 83;
+ekran[2][2].dolje_desno.y = 47;
+ekran[2][2].vrijednost = 'a';
+}
+
+int mod; //0 - pocetni; 1 - singleplayer; 2 - multiplayer
+int player;
+int polja[3][3];
+
+void cursor(int x, int y)
+{
+    display.setPixel(x, y+1);
+    display.setPixel(x-1, y);
+    display.setPixel(x, y);
+    display.setPixel(x+1, y);
+    display.setPixel(x, y-1);
+    display.refresh();
+}
+
+void drawTable();
+void osvjezi();
+
+void brisi(int x, int y)
+{
+    display.clearPixel(x, y+1);
+    display.clearPixel(x-1, y);
+    display.clearPixel(x, y);
+    display.clearPixel(x+1, y);
+    display.clearPixel(x, y-1);
+    display.refresh();
+    if(tabela) {
+        drawTable();
+        osvjezi();
+    }
+}
+
+void Lijevo(int &x, int &y)
+{
+    if(x>1){
+        brisi(x,y);
+        x=x-1;
+        cursor(x,y);
+        
+    }
+}
+ 
+void Desno(int &x, int &y)
+{
+    if(x<82){
+        brisi(x,y);
+        x=x+1;
+        cursor(x,y);
+    }
+}
+ 
+void Gore(int &x, int &y)
+{
+    if(y>1){
+        brisi(x,y);
+        y=y-1;
+        cursor(x,y);
+    }
+}
+ 
+void Dolje(int &x, int &y)
+{
+    if(y<46){
+        brisi(x,y);
+        y=y+1;
+        cursor(x,y);
+    }
+}
+
+void tekst();
+
+void inicijalizirajDisplej(){
+    tekst();
+}
+
+void tekst() {
+    display.setXYAddress(0, 0);
+    display.printChar('I');
+    display.printChar('z');
+    display.printChar('a');
+    display.printChar('b');
+    display.printChar('e');
+    display.printChar('r');
+    display.printChar('i');
+    display.printChar('t');
+    display.printChar('e');
+    display.printChar(' ');
+    display.printChar('m');
+    display.printChar('o');
+    display.printChar('d');
+    display.printChar(':');
+    display.setXYAddress(0, 2);
+    display.printChar('1');
+    display.printChar(' ');
+    display.printChar('i');
+    display.printChar('g');
+    display.printChar('r');
+    display.printChar('a');
+    display.printChar('c');
+    display.setXYAddress(0, 4);
+    display.printChar('2');
+    display.printChar(' ');
+    display.printChar('i');
+    display.printChar('g');
+    display.printChar('r');
+    display.printChar('a');
+    display.printChar('c');
+    display.printChar('a');
+    
+}
+
+void drawTable() {
+    for(int i = 0; i < 84; i++) {
+        display.setPixel(i, 15);
+        display.setPixel(i, 31);
+    }
+    for(int i = 0; i < 48; i++) {
+        display.setPixel(27, i);
+        display.setPixel(55, i);
+    }
+    display.refresh();
+}
+
+void singleplayerMod(){
+    display.clear();
+    mod = 1;
+    tabela = true;
+    drawTable();
+}
+
+void multiplayerMod(){
+    display.clear();
+    tabela = true;
+    drawTable();
+    mod = 2;
+}
+
+void izbor (){
+    if(_c.y >= 8*2 && _c.y <= 8*3) {singleplayerMod();}
+    else if(_c.y >= 8*4 && _c.y <= 8*5) {multiplayerMod();}
+}
+
+void krajIgre() {
+    display.clear();
+    display.printChar('R');
+    display.printChar('e');
+    display.printChar('z');
+    display.printChar('u');
+    display.printChar('l');
+    display.printChar('t');
+    display.printChar('a');
+    display.printChar('t');
+    display.printChar(':');
+    display.printChar(' ');
+    display.printChar('0' + pobjedeX);
+    display.printChar('-');
+    display.printChar('0' + pobjedeO);
+    wait(3);
+    display.clear();
+    drawTable();
+    for(int i = 0; i < 3; i++) {
+        for(int j = 0; j < 3;  j++) {
+            ekran[i][j].vrijednost = 'a';
+        }
+    }
+    brojac = 0;
+}
+
+void provjeriPobjede() {
+    if(
+    (ekran[0][0].vrijednost == ekran[0][1].vrijednost && ekran[0][1].vrijednost == ekran[0][2].vrijednost && ekran[0][2].vrijednost != 'a') ||
+    (ekran[1][0].vrijednost == ekran[1][1].vrijednost && ekran[1][1].vrijednost == ekran[1][2].vrijednost && ekran[1][2].vrijednost != 'a') ||
+    (ekran[2][0].vrijednost == ekran[2][1].vrijednost && ekran[2][1].vrijednost == ekran[2][2].vrijednost && ekran[2][2].vrijednost != 'a') ||
+    (ekran[0][0].vrijednost == ekran[1][0].vrijednost && ekran[1][0].vrijednost == ekran[2][0].vrijednost && ekran[2][0].vrijednost != 'a') ||
+    (ekran[0][1].vrijednost == ekran[1][1].vrijednost && ekran[1][1].vrijednost == ekran[2][1].vrijednost && ekran[2][1].vrijednost != 'a') ||
+    (ekran[0][2].vrijednost == ekran[1][2].vrijednost && ekran[1][2].vrijednost == ekran[2][2].vrijednost && ekran[2][2].vrijednost != 'a') ||
+    (ekran[0][0].vrijednost == ekran[1][1].vrijednost && ekran[1][1].vrijednost == ekran[2][2].vrijednost && ekran[2][2].vrijednost != 'a') ||
+    (ekran[0][2].vrijednost == ekran[1][1].vrijednost && ekran[1][1].vrijednost == ekran[2][0].vrijednost && ekran[2][0].vrijednost != 'a')
+    ) {
+        if(player1) {
+            pobjedeX++;
+            wait(1);
+            krajIgre();
+        }
+        else {
+            pobjedeO++;
+            wait(1);
+            krajIgre();
+        }
+    }
+}
+
+void crtajX(int x, int y);
+void crtajO(int x0, int y0, int radius);
+
+void klik() {
+    if(deb.read_ms() > 400) {
+        if(mod == 0) izbor();
+        else {
+            for(int i = 0; i < 3; i++) {
+                for(int j = 0; j < 3; j++) {
+                    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') {
+                        if(player1) {
+                            crtajX(13+28*i, 7+16*j); 
+                            ekran[i][j].vrijednost = 'X';
+                            provjeriPobjede();
+                            brojac++;
+                        } 
+                        else {
+                            crtajO(13+28*i, 7+16*j, POLUPRECNIK);
+                            ekran[i][j].vrijednost = 'O';
+                            provjeriPobjede();
+                            brojac++;
+                        }
+                        player1 = !player1;
+                        if(mod == 1) {
+                            for(int a = 0; a < 3; a++) {
+                                for(int b = 0; b < 3; b++) {
+                                    if(ekran[a][b].vrijednost == 'a' && !player1) {
+                                        crtajO(13+28*a, 7+16*b, POLUPRECNIK);
+                                        ekran[a][b].vrijednost = 'O';
+                                        provjeriPobjede();
+                                        player1 = !player1;
+                                        brojac++;
+                                    }
+                                }
+                            }
+                        }
+                        if(brojac == 9) {
+                            wait(1);
+                            krajIgre();
+                        }
+                    }
+                }
+            }
+        }
+        deb.reset();
+    }
+}
+
+void crtajX(int x, int y) {
+    display.setPixel(x, y);
+    for(int i = 1; i <= 5; i++) {
+        display.setPixel(x+i, y+i);
+        display.setPixel(x+i, y-i);
+        display.setPixel(x-i, y+i);
+        display.setPixel(x-i, y-i);
+    }
+    display.refresh();
+}
+
+void crtajO(int x0, int y0, int radius) {
+    int x = radius, y = 0;
+    int radiusError = 1-x;
+ 
+    while(x >= y)
+    {
+        display.setPixel(x + x0, y + y0);
+        display.setPixel(y + x0, x + y0);
+        display.setPixel(-x + x0, y + y0);
+        display.setPixel(-y + x0, x + y0);
+        display.setPixel(-x + x0, -y + y0);
+        display.setPixel(-y + x0, -x + y0);
+        display.setPixel(x + x0, -y + y0);
+        display.setPixel(y + x0, -x + y0);
+        y++;
+        if (radiusError<0)
+        {
+            radiusError += 2 * y + 1;
+        } else {
+            x--;
+            radiusError+= 2 * (y - x + 1);
+        }
+    }
+    display.refresh();
+}
+
+void osvjezi() {
+    for(int i = 0; i < 3; i++) {
+        for(int j = 0; j < 3; j++) {
+            if(ekran[i][j].vrijednost == 'X') {
+                crtajX(13+28*i, 7+16*j);
+            }
+            else if(ekran[i][j].vrijednost == 'O') {
+                crtajO(13+28*i, 7+16*j, POLUPRECNIK);
+            }
+        }
+    }
+}
+
+int main() {
+    enable = 1;
+    SW.mode(PullUp);
+    pobjedeX = 0;
+    pobjedeO = 0;
+    _c.x = 1;
+    _c.y = 1;
+    mod = 0;
+    display.init();
+    SW.rise(&klik);
+    deb.start();
+    inicijalizirajDisplej();
+    postaviPolja();
+    while(1) {
+        if(mod == 0) tekst();
+        if(VRx < 1.0/3.0) Lijevo(_c.x, _c.y);
+        else if(VRx > 2.0/3.0) Desno(_c.x, _c.y);
+        if(VRy < 1.0/3.0) Gore(_c.x, _c.y);
+        else if(VRy > 2.0/3.0) Dolje(_c.x, _c.y);
+    }
+}
\ No newline at end of file