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

[SFML 2.X] Hex Ring - Funkcja zwracająca pierścień na mapie heksagonalnej

Ostatnio zmodyfikowano 2025-07-24 00:11
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
[SFML 2.X] Hex Ring - Funkcja zwracająca pierścień na mapie heksagonalnej
» 2025-07-23 19:54:23
Witam. Znalazłem algorytm, który generuje listę pól mapy (pierścień). Potrzebuję przepisać algorytm na C++.
https://www.redblobgames.com/grids/hexagons/#range







C/C++
std::unordered_set < Tile * > getTiles( int q, int r, int s, int range ) {
   
std::unordered_set < Tile * > set;
   
   
for( int qq = - range; qq <= range; qq++ ) {
       
for( int rr = - range; rr <= range; rr++ ) {
           
for( int ss = - range; ss <= range; ss++ ) {
               
Tile * tile = getTile( q + qq, r + rr, s + ss );
               
if( tile != nullptr )
                   
 set.insert( tile );
               
           
}
        }
    }
   
   
return set;
}

std::unordered_set < Tile * > getTilesRing( int q, int r, int s, int ring_size ) {
   
std::unordered_set < Tile * > set;
   
   
if( ring_size == 0 ) {
       
set.insert( getTile( q, r, s ) );
       
return set;
   
}
   
   
// hardcore
    // ...
    // ...
   
   
return set;
}
P-182814
tBane
Temat założony przez niniejszego użytkownika
» 2025-07-23 23:53:10
C/C++
std::unordered_set < Tile * > getTilesRing( int q, int r, int s, int ring_size ) {
   
std::unordered_set < Tile * > set;
   
   
if( ring_size == 0 ) {
       
Tile * center = getTile( q, r, s );
       
if( center != nullptr )
           
 set.insert( center );
       
       
return set;
   
}
   
   
// Bottom neighbour
   
int qq = q + hex_neighbours[ 4 ].x * ring_size;
   
int rr = r + hex_neighbours[ 4 ].y * ring_size;
   
int ss = s + hex_neighbours[ 4 ].z * ring_size;
   
   
Tile * tt = getTile( qq, rr, ss );
   
// 6 directions
   
for( int i = 0; i < 6; i++ ) {
       
for( int j = 0; j < ring_size; j++ ) {
           
if( tt != nullptr )
               
 set.insert( tt );
           
           
if( tt != nullptr )
               
 tt = tt->neighbours[ i ];
           
else
               
 break;
           
       
}
    }
   
   
return set;
}
P-182815
« 1 »
  Strona 1 z 1