Skocz do zawartości

Teleportacja


ALT

Rekomendowane odpowiedzi

Moja testowa plansza (tablica) wygląda tak:

 

int lvl[11][20]={{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1},
                 {1,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1},
                 {1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1},
                 {1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1},
                 {1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1},
                 {1,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1},
                 {1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1},
                 {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
                 {1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                };

 

To jest kod który porusza potworkami (Poprzedni działał poprawnie ale musiałem wtedy dużo zmiennych narąbać)

 

void setmove()
{
int a;
int b;
int hyp=0;
for (a=0;a<11;a++)//y
     {
          for (b=0;b<20;b++)//x
          {
                            if (lvl[a][b]==2)
                            {             
                                          if (a==y+1 or a==y+2 or a==y+3 or a==y+4)
                                          {
                                             if(lvl[a+1][b]==0)
                                             {
                                               lvl[a][b]=0;
                                               lvl[a+1][b]=2;                                     
                                             }
                                          }
                                          else
                                          if (a==y-1 or a==y-2 or a==y-3 or a==y-4)
                                          {
                                             if(lvl[a-1][b]==0)
                                             {
                                               lvl[a][b]=0;
                                               lvl[a-1][b]=2;                                     
                                             }
                                          }
                                          else
                                          if (b==x+1 or b==x+2 or b==x+3 or b==x+4)
                                          {
                                             if(lvl[a][b+1]==0)
                                             {
                                               lvl[a][b]=0;
                                               lvl[a][b+1]=2;                                     
                                             }
                                          }
                                          else
                                          if (b==x-1 or b==x-2 or b==x-3 or b==x-4)
                                          {
                                             if(lvl[a][b-1]==0)
                                             {
                                               lvl[a][b]=0;
                                               lvl[a][b-1]=2;                                     
                                             }
                                          }                             
                            }
                            
          }
     }          
}

 

Działa on co klik klawisza. Tera pytanie, co w nim źle zrobiłem że wrogowie się oddalają i teleportują ?

Plansza jest przedstawiona na tablicy, mam kod który ją zamienia na "rysunek"

Odnośnik do komentarza
Udostępnij na innych stronach

Zakładam, że x, y to współrzędne gracza?

 

Oddalają się, bo tak ich zaprogramowałeś. Na przykładzie pierwszego ifa:

if (a==y+1 or a==y+2 or a==y+3 or a==y+4)
...
lvl[a][b]=0;
lvl[a+1][b]=2;

 

Jeśli npc jest przesunięty od gracza o 1/2/3/4 poziomy w dół(a==y+1 itd.), to npc przesuwa się o 1 poziom w dół(lvl[a+1]=2)... Czyli jeszcze bardziej się oddala.

A teleportują się dlatego, że wykonujesz pętlę. Za każdym razem, kiedy powyższe warunki są spełnione, npc porusza się. Dajesz im taką możliwość kilka razy w ciągu wykonywania funkcji setmove()...

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...