Senka Ibrahimpasic Nejra Pasic

Dependencies:   N5110 mbed

main.cpp

Committer:
pai2015senkaibrahimp
Date:
2015-06-10
Revision:
0:5ec84672b7e9

File content as of revision 0:5ec84672b7e9:

#include "mbed.h"
#include <deque>
#include "mbed.h"
#include "N5110.h"
#define dp23 P0_0

//Deklaracija LCD objekta
//N5110 lcd(VCC,SCE,RST,D/C,MOSI,SCLK,LED)
N5110 lcd(dp4,dp24,dp23,dp25,dp2,dp6,dp18);

DigitalOut enable(dp14);

AnalogIn    VRx1(dp11);
AnalogIn    VRy1(dp10);
AnalogIn    VRx2(dp9);
AnalogIn    VRy2(dp13);

DigitalIn   SW(dp9);

InterruptIn joystick1(dp28);
InterruptIn joystick2(dp26);

int kojiJePritisnut;

Timer t;

void pritisnut1()
{
    kojiJePritisnut =1;
}
void pritisnut2()
{
    kojiJePritisnut=2;
}

struct Tacka
{
    int x;
    int y;
};


int Rand(int r1, int r2)
{
    return t.read_ms() % r2;
    /* int n;
     //ovdje se generise random broj
     n=50;
     return n;*/
}

/*void meni()
{
    lcd.printString("J1 - 1 igrac",0,2);
    lcd.printString("J2 - 2 igraca",0,3);
}*/
class igra
{
    Tacka zmija_1[30];
    Tacka zmija_2[30];
    int duzina1;
    int duzina2;
    int smjer1, smjer2;
    //0-gore, 1-desno, 2-lijevo, 3-dole
    // deque<Tacka> zmija_1, zmija_2;
    Tacka hrana;
public:
    igra()
    {
        for(int i=0; i<30; i++)
        {
            zmija_1[i].y = 50;
            zmija_1[i].x = 50;
            zmija_2[i].y = 50;
            zmija_2[i].x = 50;
        }
        duzina1=3;
        duzina2=3;
        smjer1=0;
        smjer2=0;
        lcd.init();
        lcd.clear();
        zmija_1[0].x = 30;
        zmija_1[1].x = 30;
        zmija_1[2].x = 30;
        zmija_1[0].y = 10;
        zmija_1[1].y = 13;
        zmija_1[2].y = 16;


        zmija_2[0].x = 50;
        zmija_2[1].x = 50;
        zmija_2[2].x = 50;
        zmija_2[0].y = 10;
        zmija_2[1].y = 13;
        zmija_2[2].y = 16;
        hrana.x = 40; //ILI RANDOM BROJ
        hrana.y = 20;
        lcd.setPixel(hrana.x, hrana.y);
        lcd.setPixel(hrana.x+1, hrana.y);
        lcd.setPixel(hrana.x-1, hrana.y);
        lcd.setPixel(hrana.x, hrana.y+1);
        lcd.setPixel(hrana.x, hrana.y-1);
        lcd.setPixel(hrana.x+1, hrana.y+1);
        lcd.setPixel(hrana.x-1, hrana.y+1);
        lcd.setPixel(hrana.x-1, hrana.y-1);
        lcd.setPixel(hrana.x+1, hrana.y-1);

        for(int i=0; i<duzina1 ; i++)
        {
            lcd.setPixel(zmija_1[i].x, zmija_1[i].y);
            lcd.setPixel(zmija_1[i].x+1, zmija_1[i].y);
            lcd.setPixel(zmija_1[i].x-1, zmija_1[i].y);
            lcd.setPixel(zmija_1[i].x, zmija_1[i].y+1);
            lcd.setPixel(zmija_1[i].x, zmija_1[i].y-1);
            lcd.setPixel(zmija_1[i].x+1, zmija_1[i].y+1);
            lcd.setPixel(zmija_1[i].x-1, zmija_1[i].y+1);
            lcd.setPixel(zmija_1[i].x-1, zmija_1[i].y-1);
            lcd.setPixel(zmija_1[i].x+1, zmija_1[i].y-1);
        }

        for(int i=0; i<duzina2 ; i++)
        {

            lcd.setPixel(zmija_2[i].x, zmija_2[i].y);
            lcd.setPixel(zmija_2[i].x+1, zmija_2[i].y);
            lcd.setPixel(zmija_2[i].x-1, zmija_2[i].y);
            lcd.setPixel(zmija_2[i].x, zmija_2[i].y+1);
            lcd.setPixel(zmija_2[i].x, zmija_2[i].y-1);
            lcd.setPixel(zmija_2[i].x+1, zmija_2[i].y+1);
            lcd.setPixel(zmija_2[i].x-1, zmija_2[i].y+1);
            lcd.setPixel(zmija_2[i].x-1, zmija_2[i].y-1);
            lcd.setPixel(zmija_2[i].x+1, zmija_2[i].y-1);




        }

        lcd.refresh();

    }

    void idiGore(int n)
    {
     //   Tacka temp;
        if( n == 1)
        {
            if(smjer1!=2)
            {
                for(int i=duzina1; i>0; i--)
                {
                    zmija_1[i].x=zmija_1[i-1].x;
                    zmija_1[i].y=zmija_1[i-1].y;
                   // zmija_1[i]=zmija_1[i-1];
                }
                zmija_1[0].y += 1;
            }
            smjer1=0;
        }
        else
        {
            if(smjer2!=2)
            {

                for(int i=duzina2; i>0; i--)
                {
                    zmija_2[i].x=zmija_2[i-1].x;
                    zmija_2[i].y=zmija_2[i-1].y;
                }
                zmija_2[0].y += 1;
                smjer2=0;
            }
        }

    }
    void idiDole(int n)
    {
        Tacka temp;
        if( n == 1)
        {
            if(smjer1!=0)
            {
                for(int i=duzina1; i>0; i--)
                {
                    zmija_1[i].x=zmija_1[i-1].x;
                    zmija_1[i].y=zmija_1[i-1].y;
                }
                zmija_1[0].y -= 1;
                smjer1=2;
            }
        }
        else
        {
            if(smjer2!=0)
            {
                for(int i=duzina2; i>0; i--)
                {
                    zmija_2[i].x=zmija_2[i-1].x;
                    zmija_2[i].y=zmija_2[i-1].y;
                }
                zmija_2[0].y -= 1;
                smjer2=2;
            }
        }
    }
    void idiDesno(int n)
    {
        Tacka temp;
        if(n == 1)
        {
            if(smjer1!=3)
            {
                for(int i=duzina1; i>0; i--)
                {
                    zmija_1[i].x=zmija_1[i-1].x;
                    zmija_1[i].y=zmija_1[i-1].y;
                }
                zmija_1[0].x += 1;
                smjer1=1;
            }
        }
        else
        {
            if(smjer2!=3)
            {

                for(int i=duzina2; i>0; i--)
                {
                    zmija_2[i].x=zmija_2[i-1].x;
                    zmija_2[i].y=zmija_2[i-1].y;
                }
                zmija_2[0].x += 1;
                smjer2=1;
            }
        }
    }
    void idiLijevo(int n)
    {
        Tacka temp;
        if( n == 1)
        {
            if(smjer1!=1)
            {
                for(int i=duzina1; i>0; i--)
                {
                    zmija_1[i].x=zmija_1[i-1].x;
                    zmija_1[i].y=zmija_1[i-1].y;
                }
                zmija_1[0].x -= 1;
                smjer1=3;
            }
        }
        else
        {
            if(smjer2!=1)
            {

                for(int i=duzina2; i>0; i--)
                {
                    zmija_2[i].x=zmija_2[i-1].x;
                    zmija_2[i].y=zmija_2[i-1].y;
                }
                zmija_2[0].x -= 1;
                smjer2=3;
            }
        }
    }
    void Iscrtavanje()
    {
        lcd.clear();
        lcd.setPixel(hrana.x, hrana.y);
        lcd.setPixel(hrana.x+1, hrana.y);
        lcd.setPixel(hrana.x-1, hrana.y);
        lcd.setPixel(hrana.x, hrana.y+1);
        lcd.setPixel(hrana.x, hrana.y-1);
        lcd.setPixel(hrana.x+1, hrana.y+1);
        lcd.setPixel(hrana.x-1, hrana.y+1);
        lcd.setPixel(hrana.x-1, hrana.y-1);
        lcd.setPixel(hrana.x+1, hrana.y-1);

        for(int i=0; i<duzina1 ; i++)
        {
            lcd.setPixel(zmija_1[i].x, zmija_1[i].y);
            lcd.setPixel(zmija_1[i].x+1, zmija_1[i].y);
            lcd.setPixel(zmija_1[i].x-1, zmija_1[i].y);
            lcd.setPixel(zmija_1[i].x, zmija_1[i].y+1);
            lcd.setPixel(zmija_1[i].x, zmija_1[i].y-1);
            lcd.setPixel(zmija_1[i].x+1, zmija_1[i].y+1);
            lcd.setPixel(zmija_1[i].x-1, zmija_1[i].y+1);
            lcd.setPixel(zmija_1[i].x-1, zmija_1[i].y-1);
            lcd.setPixel(zmija_1[i].x+1, zmija_1[i].y-1);
        }

        for(int i=0; i<duzina2 ; i++)
        {

            lcd.setPixel(zmija_2[i].x, zmija_2[i].y);
            lcd.setPixel(zmija_2[i].x+1, zmija_2[i].y);
            lcd.setPixel(zmija_2[i].x-1, zmija_2[i].y);
            lcd.setPixel(zmija_2[i].x, zmija_2[i].y+1);
            lcd.setPixel(zmija_2[i].x, zmija_2[i].y-1);
            lcd.setPixel(zmija_2[i].x+1, zmija_2[i].y+1);
            lcd.setPixel(zmija_2[i].x-1, zmija_2[i].y+1);
            lcd.setPixel(zmija_2[i].x-1, zmija_2[i].y-1);
            lcd.setPixel(zmija_2[i].x+1, zmija_2[i].y-1);
        }
        lcd.refresh();
    }

    void nastaviKretanje(int n)
    {
        if(n==1)
        {
            if(smjer1==0)idiGore(n);
            if(smjer1==1)idiDesno(n);
            if(smjer1==2)idiDole(n);
            if(smjer1==3)idiLijevo(n);

        }
        if(n==2)
        {
            if(smjer2==0)idiGore(n);
            if(smjer2==1)idiDesno(n);
            if(smjer2==2)idiDole(n);
            if(smjer2==3)idiLijevo(n);
        }
    }

    void PostaviHranu()
    {
        bool jeLiNaZmiji(false);
        while(1)
        {
            hrana.x = Rand(5,65);
            hrana.y = Rand(5,30);
            for(int i=0; i<duzina1; i++)
            {
                if(zmija_1[i].x == hrana.x && zmija_1[i].y == hrana.y) //provjeriti ostale tacke
                {
                    jeLiNaZmiji = true;
                    break;
                }

            }
            for(int i=0; i<duzina2; i++)
            {
                if(zmija_2[i].x == hrana.x && zmija_2[i].y == hrana.y)
                {
                    jeLiNaZmiji = true;
                    break;
                }

            }
            if(!jeLiNaZmiji) break;
        }
    }
    int jeLiPojela()
    {
        if( (zmija_1[0].x == hrana.x && zmija_1[0].y == hrana.y) || (zmija_1[0].x-1 == hrana.x && zmija_1[0].y-1 == hrana.y) ||
        (zmija_1[0].x-1 == hrana.x && zmija_1[0].y == hrana.y) || (zmija_1[0].x-1 == hrana.x && zmija_1[0].y+1 == hrana.y) ||
        (zmija_1[0].x == hrana.x && zmija_1[0].y-1 == hrana.y) || (zmija_1[0].x == hrana.x && zmija_1[0].y+1 == hrana.y)
        || (zmija_1[0].x+1 == hrana.x && zmija_1[0].y == hrana.y)|| (zmija_1[0].x+1 == hrana.x && zmija_1[0].y+1 == hrana.y)
        || (zmija_1[0].x+1 == hrana.x && zmija_1[0].y-1 == hrana.y )) return 1;
        else if( (zmija_2[0].x == hrana.x && zmija_2[0].y == hrana.y) || (zmija_2[0].x-1 == hrana.x && zmija_2[0].y-1 == hrana.y) ||
        (zmija_2[0].x-1 == hrana.x && zmija_2[0].y == hrana.y) || (zmija_2[0].x-1 == hrana.x && zmija_2[0].y+1 == hrana.y) ||
        (zmija_2[0].x == hrana.x && zmija_2[0].y-1 == hrana.y) || (zmija_2[0].x == hrana.x && zmija_2[0].y+1 == hrana.y)
        || (zmija_2[0].x+1 == hrana.x && zmija_2[0].y == hrana.y)|| (zmija_2[0].x+1 == hrana.x && zmija_2[0].y+1 == hrana.y)
        || (zmija_2[0].x+1 == hrana.x && zmija_2[0].y-1 == hrana.y )) return 1;
        else return 0;
    }
    void pojela(int n)
    {

        if( n==1)
        {
            if(duzina1 > 29)return;
            Tacka zadnja = zmija_1[duzina1];
            duzina1+=3;
            nastaviKretanje(1);
            zmija_1[duzina1]=zadnja;

        }
        else
        {
            if(duzina2 > 29)return;
            Tacka zadnja = zmija_2[duzina2];
            duzina2+=3;
            nastaviKretanje(2);
            zmija_2[duzina2]=zadnja;
        }
    }
    int kolizija()
    {
        for(int i=0; i<duzina2; i++)
        {
            if(zmija_1[0].x == zmija_2[i].x && zmija_1[0].y == zmija_2[i].y)return 1;
        }
        for(int i=0; i<duzina1; i++)
        {
            if(zmija_2[0].x == zmija_1[i].x && zmija_2[0].y == zmija_1[i].y)return 2;
        }
        return 0;
        //treba i zid;
    }
    int pobijedila(int sudarilaSe)
    {
        if(sudarilaSe==1)duzina1-=5;
        if(sudarilaSe==2)duzina2-=5;
        if(duzina1>duzina2)return 1;
        if(duzina2>duzina1)return 2;
    }
    /* void autoKretanje()
     {
         //ako je desno idi desno dok se ne izjednaci
         if(hrana.x > zmija2[0].x)
         {
             while(hrana.x!= zmija2[0].x)
                 idiDesno(2);
         }
         if(hrana.x < zmija2[0].x)
         {
             while(hrana.x!= zmija2[0].x)
                 idiLijevo2);
         }
         if(hrana.y > zmija2[0].y)
         {
             while(hrana.y!= zmija2[0].y)
                 idiGore(2);
         }
         if(hrana.y < zmija2[0].y)
         {
             while(hrana.x!= zmija2[0].x)
                 idiDole(2);
         }

     }*/

};
//provjeri jel kolizija
//ako jest izbaci koja je pobijedila
//ako nije provjeri jel pojela
//ako jeste raste




int main()
{
    enable=1;
    wait(1);
    t.start();
    igra *igra1 =  new igra();
    /*meni();

        joystick1.rise(pritisnut1);
        joystick2.rise(pritisnut2);
        //2 igraca;
    if(kojiJePritisnut==2){
    while(1)
    {
        if(VRx1 > 2.0/3.0) igra1.idiDesno(1);
        else if(VRx1 < 1.0/3.0) igra1.idiLijevo(1);
        if(VRy1 < 1.0/3.0) igra1.idiGore(1);
        else if(VRy1 > 2.0/3.0) igra1.idiDole(1);


        int kol = igra1.kolizija();//treba mozda i ovdje i dole, mozda samo dole
        if(kol==1)
        {
            lcd.clear();
            lcd.printString("Pobijedila je zmija 1.",0,3);
            lcd.refresh();
        }
        else if(kol==2)
        {
            lcd.clear();
            lcd.printString("Pobijedila je zmija 2.",0,3);
            lcd.refresh();
        }
        int poj = igra1.jeLiPojela();
        if(poj==1 || poj==2)
        {
            igra1.pojela(poj);
            igra1.PostaviHranu();
        }
        igra1.nastaviKretanje(1);
        if(VRx2 > 2.0/3.0) igra1.idiDesno(2);
        else if(VRx2 < 1.0/3.0) igra1.idiLijevo(2);
        if(VRy2 < 1.0/3.0) igra1.idiGore(2);
        else if(VRy2 > 2.0/3.0) igra1.idiDole(2);


        int kol = igra1.kolizija();
        if(kol==1)
        {
            lcd.clear();
            lcd.printString("Pobijedila je zmija 1.",0,3);
            lcd.refresh();
        }
        else if(kol==2)
        {
            lcd.clear();
            lcd.printString("Pobijedila je zmija 2.",0,3);
            lcd.refresh();
        }
        int poj = igra1.jeLiPojela();
        if(poj==1 || poj==2)
        {
            igra1.pojela(poj);
            igra1.PostaviHranu();
        }
        igra1.nastaviKretanje(2);

    }}




    //1 igrac
      if(kojiJePritisnut==1){
      while(1)
      {
          if(VRx1 > 2.0/3.0) igra1.idiDesno(1);
      else if(VRx1 < 1.0/3.0) igra1.idiLijevo(1);
      if(VRy1 < 1.0/3.0) igra1.idiGore(1);
      else if(VRy1 > 2.0/3.0) igra1.idiDole(1);
      int kol = igra1.kolizija();//treba mozda i ovdje i dole, mozda samo dole
      if(kol==1) lcd.printString("Pobijedila je zmija 1.",0,3);
      else if(kol==2) lcd.printString("Pobijedila je zmija 1.",0,3);
      int poj = igra1.jeLiPojela();
      if(poj==1 || poj==2)
      {
          igra1.pojela(poj);
          igra1.PostaviHranu();
      }
      igra1.autoKretanje();
      }
      }
    */
    
    //2 igraca;
    while(1)
    {
        if(VRx1 > 2.0/3.0) igra1->idiLijevo(1);
        else if(VRx1 < 1.0/3.0) igra1->idiDesno(1);        
        else if(VRy1 < 1.0/3.0) igra1->idiGore(1);
        else if(VRy1 > 2.0/3.0) igra1->idiDole(1);
        else igra1->nastaviKretanje(1);

        int kol = igra1->kolizija();//treba mozda i ovdje i dole, mozda samo dole
        if(kol==1)
        {
            lcd.clear();
            lcd.printString("Pobijedila je zmija 1.",0,3);
            lcd.refresh();
        }
        else if(kol==2)
        {
            lcd.clear();
            lcd.printString("Pobijedila je zmija 2.",0,3);
            lcd.refresh();
        }
        int poj = igra1->jeLiPojela();
        if(poj==1 || poj==2)
        {
            igra1->pojela(poj);
            igra1->PostaviHranu();
        }

        igra1->nastaviKretanje(1);
        igra1->Iscrtavanje();


        if(VRx2 > 2.0/3.0) igra1->idiDesno(2);
        else if(VRx2 < 1.0/3.0) igra1->idiLijevo(2);        
        else if(VRy2 < 1.0/3.0) igra1->idiGore(2);
        else if(VRy2 > 2.0/3.0) igra1->idiDole(2);
        else igra1->nastaviKretanje(2);

        kol = igra1->kolizija();
        if(kol==1)
        {
            lcd.clear();
            lcd.printString(" Win:  1.",0,3);
            
        }
        else if(kol==2)
        {
            lcd.clear();
            lcd.printString(" Win: 2.",0,3);
            
            
        }
        else{
        poj = igra1->jeLiPojela();
        if(poj==1 || poj==2)
        {
            igra1->pojela(poj);
            igra1->PostaviHranu();
        }
        igra1->nastaviKretanje(2);
        igra1->Iscrtavanje();
        }
        wait(0.3);
    }




    //1 igrac
    /*  while(1)
      {
          if(VRx1 > 2.0/3.0) igra1.idiDesno(1);
      else if(VRx1 < 1.0/3.0) igra1.idiLijevo(1);
      if(VRy1 < 1.0/3.0) igra1.idiGore(1);
      else if(VRy1 > 2.0/3.0) igra1.idiDole(1);
      int kol = igra1.kolizija();//treba mozda i ovdje i dole, mozda samo dole
      if(kol==1) lcd.printString("Pobijedila je zmija 1.",0,3);
      else if(kol==2) lcd.printString("Pobijedila je zmija 1.",0,3);
      int poj = igra1.jeLiPojela();
      if(poj==1 || poj==2)
      {
          igra1.pojela(poj);
          igra1.PostaviHranu();
      }
      igra1.autoKretanje();
      }*/
      
    return 0;


}