Inventory - Czyli zawartość plecaka w grze RPG
Ostatnio zmodyfikowano 2024-08-15 17:08
pekfos |
» 2024-08-07 16:45:04 I co z tym? Wygląda tragicznie i nie robi tego co napisałeś, ale problemów za bardzo nie widać. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-07 16:48:23 Tworzy posortowaną listę itemów sortedItems w oparciu o uporządkowaną listę itemów items i działa. Wrzuciłem kod na wypadek jakby ktoś kiedyś (zapewne ja) potrzebował |
|
pekfos |
» 2024-08-07 17:43:56 Wrzuciłem kod na wypadek jakby ktoś kiedyś (zapewne ja) potrzebował Z trudem domyśliłem się o co tu może chodzić, wiec nie miej nadziei że to się komuś przyda, zwłaszcza wrzucone w niemal niezwiązany temat. Już lepiej wrzucaj takie wyrywki na githuba. Skoro już wrzuciłeś to w miejsce które służy do dyskusji i napisałem że ten kod jest tragiczny, to przepiszę go wg mojego zrozumienia: std::map < Item *, int > counts; for( int i = 0; i < inventory->items.size(); i++ ) counts[ inventory->items[ i ] ] += inventory->counts[ i ]; std::vector < Item * > sortedItems; std::vector < int > sortedItemsCounts;
for( auto & item: items ) { auto it = counts.find( item ); if( it != counts.end() && it->second > 0 ) { sortedItems.push_back( item ); sortedItemsCounts.push_back( it->second ); } } |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-07 19:27:08 Tylko, że inventory->items ma unikalne itemy. Ale dzięki za radę :-) |
|
pekfos |
» 2024-08-07 21:32:30 Unikalne wartości wskaźników? Wtedy to można zrobić jeszcze prościej. Sądziłem że to wskazuje na typ przedmiotu i wskaźnik robi za identyfikator typu, tj przedmiot w plecaku w ilości 3 i przedmiot w skrzyni w ilości 1 mają ten sam adres i te sortowanie ma służyć np scaleniu ich w jeden slot z ilością 4. Ale jak to wskazuje na egzemplarz przedmiotu, to zamiast sumowania można by dać przypisanie, bo nigdy nie będziesz dodawać dwóch niezerowych wartości. Nie wiem też czemu wtedy nie dasz count jako pola w Item, zamiast trzymać ilości w osobnym kontenerze. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-07 22:44:24 to znaczy nie. Inventory->items to zawsze wskaźniki na itemy, które są w liście items, a inventory->counts to ilości tych itemów w inventory. Każdy item inventory->items[j] ma przypisaną ilość inventory->counts[j]. Tylko trzymam je w osobnych listach, bo nie wiedziałem jak to zrobić z std::map i nie wiem czy to poprawić tzn. te dwie listy na std::map |
|
pekfos |
» 2024-08-07 22:50:50 Mapa zamiast obu wektorów to nie rozwiązanie, bo wtedy kolejność elementów będzie posortowana po wartości wskaźników. Lepszym rozwiązaniem jest wektor struktur. struct ItemWithCount { Item * item; int count; };
std::vector < ItemWithCount > items; Jak masz tylko 2 pola to można użyć std::pair<Item*, int>, ale pola first i second nie są tak czytelne jak nazwane pola w dedykowanej strukturze. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-15 17:08:49 w sumie ok. |
|
1 2 3 « 4 » |