Skocz do zawartości

Przeskakiwanie pętli


ALT

Rekomendowane odpowiedzi

Mam taką pętle, która rusza npc:

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;                                     
                                             }
                                          }
                                          
                                          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;                                
                                             }
                                          }
                                          
                                          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;                                    
                                             }
                                          }
                                          
                                          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;                                      
                                             }
                                          }                             
                            }
                            
          }
     }          
}

 

I teraz, jak przerobić ją by po poruszeniu npc w np. lewo, i po przejściu pęli w lewo nie zapętlała się i nie poruszała nim więcej niż 1 raz.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

Jeśli masz tylko jednego NPC, to tak jak gnysek mówił.

Na samym początku definiujesz zmienną np. bool isbroken=0; W ifach dajesz break; isbroken=1; za wewnętrznym forem dajesz if(isbroken) break;

 

Jeśli jedna globalna funkcja steruje większą ilością NPC, to sprawa jest bardziej skomplikowana. Ja bym zrobił klasę dla NPC a każdy z nich byłby obiektem, który "myśli" samodzielnie.

Skoro jednak chcesz zostawić obecny sposób poruszania się, to trzeba pokombinować. Przykładowo, zrób sobię tablicę bool zmienna[][] o wielkości takiej samej, jak mapa. Wartości są ustawiane na false na początku wykonywania setmove(). W ifach dajesz dodatkowy warunek - !zmienna[a], co oznacza, że NPC stojący w tym miejscu jeszcze się nie poruszył. W momencie ruchu ustawiasz dane miejsce w zmienna[][] o współrzędnej docelowej na true. Przykładowo w pierwszym ifie dopisujesz zmienna[a-1]=true; i tak dalej.

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ę...