Advertisement
Pagoniusz

Untitled

Apr 27th, 2015
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.32 KB | None | 0 0
  1. bool Gracz::LegalMove(char kierunek)
  2. {
  3.     Fpoint rogi[4];     //pokolei ustawiamy w tablicy rogi (wszystkie kąty) obiektu gracza
  4.     int przeskok = 0;   //0 lub _speed; daje debilną "animację" odbijania się od ściany
  5.     Fpoint tmp, tmp2, tmp3; //użyje go do dodawania i odejmowania od rogów ( takie tam)
  6.     tmp.x = 0;
  7.     tmp.y = 0;
  8.  
  9.     rogi[0].x = (_location.x + przeskok);           //lewy górny
  10.     rogi[0].y = _location.y + przeskok;
  11.  
  12.     rogi[1].x = _location.x + 39 - przeskok;    //prawy górny
  13.     rogi[1].y = _location.y + przeskok;
  14.  
  15.     rogi[2].x = _location.x + przeskok;         ///lewy dolny
  16.     rogi[2].y = _location.y + 39 - przeskok;
  17.  
  18.     rogi[3].x = _location.x + 39 - przeskok;    //prawy dolny
  19.     rogi[3].y = _location.y + 39 - przeskok;
  20.  
  21.     switch (kierunek)
  22.     {
  23.     case 'u':   //kiedy kierunek nadany był w górę
  24.     {
  25.         tmp.y -= _speed;            //zmień tmp o speed (w tym przypadku tmp.y - speed)
  26.         tmp2 = rogi[0] + tmp;       //tutaj 2 zmienne sobie ustalam od 2 rogów + tmp (zeby móc sprawdzić czy ruch który się wykona jest poprawny jeszcz eprzed wykonaniem tego ruchu)
  27.         tmp3 = rogi[1] + tmp;
  28.         if (this->_map->GetObeiektFromPosition(tmp2) != NULL || this->_map->GetObeiektFromPosition(tmp3) != NULL)       //jesli oba przyszłe rogi nie są null to
  29.         {
  30.             if (tmp2 / 40 == rogi[0] / 40)      //sprawdz czy to samo pole na mapie (siatka)
  31.             {
  32.                 return true;    //jesli to samo to zwróć true, bo jeśli już na nim stał to znaczy że może na nim stać
  33.             }
  34.             else{
  35.                 if (/*this->GetMid().y % 40 < 20 &&*/ this->_map->GetObeiektFromPosition(tmp3) == NULL) //sprawdzam czy srodek od polowy, tu sprawdzam gore
  36.                 {
  37.                     if (LegalMove('r'))     //prawo
  38.                     {
  39.                         _location.x += _speed;
  40.                         _frame = gracz_f[1];
  41.                     }
  42.                 }
  43.                 if (this->_map->GetObeiektFromPosition(tmp2) == NULL)
  44.                 {
  45.                     if (LegalMove('l'))     //lewo
  46.                     {
  47.                         _location.x -= _speed;
  48.                         _frame = gracz_f[1];
  49.                     }
  50.                 }
  51.                 return false;
  52.             }
  53.         }
  54.  
  55.  
  56.     }
  57.         break;
  58.  
  59.     case 'd':   //tutaj kiedy w dół a reszta tak samo (tlyko parametry torche inne i rogi )
  60.     {
  61.         tmp.y += _speed;
  62.         tmp2 = rogi[2] + tmp;
  63.         tmp3 = rogi[3] + tmp;
  64.         if (this->_map->GetObeiektFromPosition(tmp2) != NULL || this->_map->GetObeiektFromPosition(tmp3) != NULL)
  65.         {
  66.             if (tmp2 / 40 == rogi[2] / 40)
  67.             {
  68.                 return true;
  69.             }
  70.             else{
  71.                 if (/*this->GetMid().y % 40 < 20 &&*/ this->_map->GetObeiektFromPosition(tmp3) == NULL) //sprawdzam czy srodek od polowy, tu sprawdzam gore
  72.                 {
  73.                     if (LegalMove('r'))     //prawo
  74.                     {
  75.                         _location.x += _speed;
  76.                         _frame = gracz_f[1];
  77.                     }
  78.                 }
  79.                 if (this->_map->GetObeiektFromPosition(tmp2) == NULL)
  80.                 {
  81.                     if (LegalMove('l'))     //lewo
  82.                     {
  83.                         _location.x -= _speed;
  84.                         _frame = gracz_f[1];
  85.                     }
  86.                 }
  87.                 return false;
  88.             }
  89.         }
  90.  
  91.     }
  92.         break;
  93.  
  94.     case'l':    //lewo
  95.     {
  96.         tmp.x -= _speed;
  97.         tmp2 = rogi[0] + tmp;
  98.         tmp3 = rogi[2] + tmp;
  99.         if (this->_map->GetObeiektFromPosition(tmp2) != NULL || this->_map->GetObeiektFromPosition(tmp3) != NULL)
  100.         {
  101.             if (tmp2 / 40 == rogi[0] / 40)
  102.             {
  103.                 return true;
  104.             }
  105.             else{
  106.                 if (/*this->GetMid().y % 40 < 20 &&*/ this->_map->GetObeiektFromPosition(tmp2) == NULL) //sprawdzam czy srodek od polowy, tu sprawdzam gore
  107.                 {
  108.                     if (LegalMove('u'))     //Góra
  109.                     {
  110.                         _location.y -= _speed;
  111.                         _frame = gracz_f[0];
  112.                     }
  113.                 }
  114.                 if (this->_map->GetObeiektFromPosition(tmp3) == NULL)
  115.                 {
  116.                     if (LegalMove('d'))     //Góra
  117.                     {
  118.                         _location.y += _speed;
  119.                         _frame = gracz_f[3];
  120.                     }
  121.                 }
  122.                 return false;
  123.             }
  124.         }
  125.  
  126.     }
  127.         break;
  128.  
  129.     case'r':        //prawo
  130.     {
  131.         tmp.x += _speed;
  132.         tmp2 = rogi[1] + tmp;
  133.         tmp3 = rogi[3] + tmp;
  134.         if (this->_map->GetObeiektFromPosition(tmp2) != NULL || this->_map->GetObeiektFromPosition(tmp3) != NULL)
  135.         {
  136.             if (tmp2 / 40 == rogi[1] / 40)
  137.             {
  138.                 return true;
  139.             }
  140.             else{
  141.                 if (/*this->GetMid().y % 40 < 20 &&*/ this->_map->GetObeiektFromPosition(tmp2) == NULL) //sprawdzam czy srodek od polowy, tu sprawdzam gore
  142.                 {
  143.                     if (LegalMove('u'))     //Góra
  144.                     {
  145.                         _location.y -= _speed;
  146.                         _frame = gracz_f[0];
  147.                     }
  148.                 }
  149.                 if (this->_map->GetObeiektFromPosition(tmp3) == NULL)
  150.                 {
  151.                     if (LegalMove('d'))     //Góra
  152.                     {
  153.                         _location.y += _speed;
  154.                         _frame = gracz_f[3];
  155.                     }
  156.                 }
  157.                 return false;
  158.             }
  159.         }
  160.  
  161.     }
  162.         break;
  163.     }
  164.  
  165.     return true;    //jesli nic nie znaleziono zwróc true
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement