ALT Opublikowano 16 Sierpnia 2012 Opublikowano 16 Sierpnia 2012 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.
Administratorzy gnysek Opublikowano 16 Sierpnia 2012 Administratorzy Opublikowano 16 Sierpnia 2012 break, plus ew. flaga zeby wyjsc też z drugiego fora ? btw. if (a==y+1 or a==y+2 or a==y+3 or a==y+4) == if (a > y and a < y+5) i jeszcze kilka innych rzeczy by mozna zmienic
ALT Opublikowano 16 Sierpnia 2012 Autor Opublikowano 16 Sierpnia 2012 No właśnie ni zielonego pojęcia mam jak to zrobić. Próbowałem już i wychodziło tak że nic :/
Floodnik Opublikowano 27 Sierpnia 2012 Opublikowano 27 Sierpnia 2012 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.
ALT Opublikowano 28 Sierpnia 2012 Autor Opublikowano 28 Sierpnia 2012 Spójrz na datę, już rozwiązane.
Rekomendowane odpowiedzi
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ę