Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool Gracz::LegalMove(char kierunek)
- {
- Fpoint rogi[4]; //pokolei ustawiamy w tablicy rogi (wszystkie kąty) obiektu gracza
- int przeskok = 0; //0 lub _speed; daje debilną "animację" odbijania się od ściany
- Fpoint tmp, tmp2, tmp3; //użyje go do dodawania i odejmowania od rogów ( takie tam)
- tmp.x = 0;
- tmp.y = 0;
- rogi[0].x = (_location.x + przeskok); //lewy górny
- rogi[0].y = _location.y + przeskok;
- rogi[1].x = _location.x + 39 - przeskok; //prawy górny
- rogi[1].y = _location.y + przeskok;
- rogi[2].x = _location.x + przeskok; ///lewy dolny
- rogi[2].y = _location.y + 39 - przeskok;
- rogi[3].x = _location.x + 39 - przeskok; //prawy dolny
- rogi[3].y = _location.y + 39 - przeskok;
- switch (kierunek)
- {
- case 'u': //kiedy kierunek nadany był w górę
- {
- tmp.y -= _speed; //zmień tmp o speed (w tym przypadku tmp.y - speed)
- 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)
- tmp3 = rogi[1] + tmp;
- if (this->_map->GetObeiektFromPosition(tmp2) != NULL || this->_map->GetObeiektFromPosition(tmp3) != NULL) //jesli oba przyszłe rogi nie są null to
- {
- if (tmp2 / 40 == rogi[0] / 40) //sprawdz czy to samo pole na mapie (siatka)
- {
- return true; //jesli to samo to zwróć true, bo jeśli już na nim stał to znaczy że może na nim stać
- }
- else{
- if (/*this->GetMid().y % 40 < 20 &&*/ this->_map->GetObeiektFromPosition(tmp3) == NULL) //sprawdzam czy srodek od polowy, tu sprawdzam gore
- {
- if (LegalMove('r')) //prawo
- {
- _location.x += _speed;
- _frame = gracz_f[1];
- }
- }
- if (this->_map->GetObeiektFromPosition(tmp2) == NULL)
- {
- if (LegalMove('l')) //lewo
- {
- _location.x -= _speed;
- _frame = gracz_f[1];
- }
- }
- return false;
- }
- }
- }
- break;
- case 'd': //tutaj kiedy w dół a reszta tak samo (tlyko parametry torche inne i rogi )
- {
- tmp.y += _speed;
- tmp2 = rogi[2] + tmp;
- tmp3 = rogi[3] + tmp;
- if (this->_map->GetObeiektFromPosition(tmp2) != NULL || this->_map->GetObeiektFromPosition(tmp3) != NULL)
- {
- if (tmp2 / 40 == rogi[2] / 40)
- {
- return true;
- }
- else{
- if (/*this->GetMid().y % 40 < 20 &&*/ this->_map->GetObeiektFromPosition(tmp3) == NULL) //sprawdzam czy srodek od polowy, tu sprawdzam gore
- {
- if (LegalMove('r')) //prawo
- {
- _location.x += _speed;
- _frame = gracz_f[1];
- }
- }
- if (this->_map->GetObeiektFromPosition(tmp2) == NULL)
- {
- if (LegalMove('l')) //lewo
- {
- _location.x -= _speed;
- _frame = gracz_f[1];
- }
- }
- return false;
- }
- }
- }
- break;
- case'l': //lewo
- {
- tmp.x -= _speed;
- tmp2 = rogi[0] + tmp;
- tmp3 = rogi[2] + tmp;
- if (this->_map->GetObeiektFromPosition(tmp2) != NULL || this->_map->GetObeiektFromPosition(tmp3) != NULL)
- {
- if (tmp2 / 40 == rogi[0] / 40)
- {
- return true;
- }
- else{
- if (/*this->GetMid().y % 40 < 20 &&*/ this->_map->GetObeiektFromPosition(tmp2) == NULL) //sprawdzam czy srodek od polowy, tu sprawdzam gore
- {
- if (LegalMove('u')) //Góra
- {
- _location.y -= _speed;
- _frame = gracz_f[0];
- }
- }
- if (this->_map->GetObeiektFromPosition(tmp3) == NULL)
- {
- if (LegalMove('d')) //Góra
- {
- _location.y += _speed;
- _frame = gracz_f[3];
- }
- }
- return false;
- }
- }
- }
- break;
- case'r': //prawo
- {
- tmp.x += _speed;
- tmp2 = rogi[1] + tmp;
- tmp3 = rogi[3] + tmp;
- if (this->_map->GetObeiektFromPosition(tmp2) != NULL || this->_map->GetObeiektFromPosition(tmp3) != NULL)
- {
- if (tmp2 / 40 == rogi[1] / 40)
- {
- return true;
- }
- else{
- if (/*this->GetMid().y % 40 < 20 &&*/ this->_map->GetObeiektFromPosition(tmp2) == NULL) //sprawdzam czy srodek od polowy, tu sprawdzam gore
- {
- if (LegalMove('u')) //Góra
- {
- _location.y -= _speed;
- _frame = gracz_f[0];
- }
- }
- if (this->_map->GetObeiektFromPosition(tmp3) == NULL)
- {
- if (LegalMove('d')) //Góra
- {
- _location.y += _speed;
- _frame = gracz_f[3];
- }
- }
- return false;
- }
- }
- }
- break;
- }
- return true; //jesli nic nie znaleziono zwróc true
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement