Jestem ciekawy struktur danych używanych podczas programowania starszych gier, takich jak Super Mario Brothers dla NES i Super Mario World dla SNES. Rozumiem, że gry z tego okresu zostały napisane w asemblerze. Czy programiści zdefiniowali / wykorzystali jakieś struktury danych?
Na przykład: kiedy na ekranie pojawia się grupa monet, w jaki sposób są one przechowywane? Czy programiści używali tylko tablic? A może mieli połączone listy?
Twoje zdrowie!
Edycja : Interesują mnie różne podejścia ... niekoniecznie uniwersalne.
Edycja 2 : W kilku moich grach stosuję (potencjalnie złe) podejście do kolekcji i chcę wiedzieć, czy którakolwiek ze starszych gier zastosowała podobne podejście. Lubię wykonywać następujące czynności:
// statically allocated arrays (max number of coins is 4)
int coinsXs[4] = {0, 0, 0, 0};
int coinsYs[4] = {0, 0, 0, 0};
// bitset that keeps track of which coins are active
int coinsActive = 0;
// ...
// update the active coins in an update function
for(int i = 0; i < 4; i++){
if(coinsActive & (1 << i)){
// update ith coin
}
}
data-structure
MrDatabase
źródło
źródło
Odpowiedzi:
Nawet w 16-bitowych dniach konsole do gier były po prostu małymi, wbudowanymi komputerami z oprogramowaniem działającym w czasie rzeczywistym, a stosowane przez nas struktury danych są takie same, jakie można znaleźć w informatyce: tablice, macierze, stosy, drzewa. Niewiele list połączonych, ponieważ są one tak wolne (wyszukiwania pośrednie mają długi czas oczekiwania).
Różnica polega na tym, że przed STL i przy tak krytycznej wydajności, zwykle musieliśmy pisać struktury i algorytmy!
David Braben wygłosił fajny wykład na GDC w 2011 r., Gdzie opowiadał o wszystkich szalonych sztuczkach, których używał, aby dopasować Elite do BBC Micro w 1984 r. Możesz go obejrzeć za darmo w GDC Vault .
źródło
if(coinsActive)
zanim przejdę przez maxNumCoins i zaktualizuję. W ten sposób całkowicie unikam pętli, jeśli zero monet jest aktywnych.Oto interesująca dyskusja na GameDev.net dotycząca kodu źródłowego Super Mario Bros: kod źródłowy Super Mario
źródło