[SFML 2.X] Hex Ring - Funkcja zwracająca pierścień na mapie heksagonalnej
Ostatnio zmodyfikowano 2025-07-24 00:11
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  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; } return set; }
|
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-07-23 23:53:10 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; } 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 ); 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; }
|
|
« 1 » |