Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Ukrywanie mapy za ścianą

Ostatnio zmodyfikowano 2012-08-27 21:13
Autor Wiadomość
draculeq
Temat założony przez niniejszego użytkownika
Ukrywanie mapy za ścianą
» 2012-08-27 19:51:15
Witam, mam problem w "grze" z obliczeniem czy coś na mapie (tablica 2D) znajduje się za ścianą.
Chodzi mi o to żeby w "widoku" z góry Gracz nie widział co ma za ścianą.

Próbowałem rekurencyjnie przeszukać linie od gracza do każdego pola (coś a-la quicksort lewa,prawa i srodek i tak aż lewa=srodek...) ale poległem za bardzo to rozbudowałem...

Jest na to jakiś szybki sposób? Na google jestem za głupi bo nie umiem sprecyzowac odpowiednio pytania.
P-63803
m4tx
» 2012-08-27 19:59:08
Najprostszym sposobem będzie tu chyba 4 pętle (na X i Y) "wychodzące" od pozycji gracza i sprawdzające, gdzie jest ściana i ustawiające bloki za nią jako niewyświetlane. Coś takiego:


.................. <= to już nie będzie
.................. <=   wyświetlane
################## <= ściana
........P.........
.......PXP........ <= X - gracz, P - kierunki
........P......... <= działania pętli


:)

To jest najprostszy możliwy sposób, do tego dochodzą różne inne rzeczy, m.in. perspektywa.
P-63805
waxx
» 2012-08-27 20:54:35
well, sciana nie musi obejmowac calosci szerokosci/wysokosci mapy wiec zawszse mozna przerzucic to na petle prostokata zaczynajacego sie od postaci idacego za sciane + sprawdzanie dodatkowo kolizja linia wzroku vs prostokat kawalka sciany
P-63816
draculeq
Temat założony przez niniejszego użytkownika
» 2012-08-27 21:13:43
Dzięki.
Po wywaleniu i napisaniu na nowo działa.
Dla potomnych leniwców którzy tu trafią
C/C++
int cPlansza::Rekurencja_Cien( int LewaX, int LewaY, int PrawaX, int PrawaY, int deep ) //Sprawdza całą linię czy gdzieś jest ściana itp, rekurencja na wzór Quicksort
{
    double doubleSrodekX = LewaX -( LewaX - PrawaX ) / 2, doubleSrodekY = LewaY -( LewaY - PrawaY ) / 2;
    int SrodekX = doubleSrodekX, SrodekY = doubleSrodekY;
   
   
    if( PrawaX == LewaX && PrawaY == LewaY ) return 0; //Jesli przelecialo linie i dolecialo.
   
    if( Cienie[ SrodekY ][ SrodekX ] == 2 ) return 1;
   
    if( deep > 5 ) { /*printf("WARNING "); */ return 0; }
   
   
    if( Rekurencja_Cien( LewaX, LewaY, SrodekX, SrodekY, deep + 1 ) == 1 ) return 1;
   
    if( doubleSrodekX - SrodekX == 0 )
    {
        if( doubleSrodekY - SrodekY == 0 )
        {
            if( Rekurencja_Cien( SrodekX, SrodekY, PrawaX, PrawaY, deep + 1 ) == 1 ) return 1;
           
        }
        else
        {
            if( Rekurencja_Cien( SrodekX, SrodekY + 1, PrawaX, PrawaY, deep + 1 ) == 1 ) return 1;
           
        }
    }
    else
    {
        if( doubleSrodekY - SrodekY == 0 )
        {
            if( Rekurencja_Cien( SrodekX, SrodekY, PrawaX, PrawaY, deep + 1 ) == 1 ) return 1;
           
        }
        else
        {
            if( Rekurencja_Cien( SrodekX + 1, SrodekY + 1, PrawaX, PrawaY, deep + 1 ) == 1 ) return 1;
           
        }
    }
    return 0;
   
}
P-63819
« 1 »
  Strona 1 z 1