Ich bin gespannt auf die Datenstrukturen, die beim Programmieren älterer Spiele wie Super Mario Brothers für NES und Super Mario World für SNES verwendet werden. Mein Verständnis ist, dass Spiele dieser Zeit in der Versammlung geschrieben wurden. Haben die Programmierer Datenstrukturen definiert / verwendet?
Beispiel: Wenn eine Gruppe von Münzen auf dem Bildschirm angezeigt wird, wie werden sie gespeichert? Haben die Programmierer nur Arrays verwendet? Oder hatten sie vielleicht verknüpfte Listen?
Prost!
Edit : Ich interessiere mich für verschiedene Ansätze ... nicht unbedingt einen universellen Ansatz.
Bearbeiten 2 : In einigen meiner Spiele verwende ich einen (möglicherweise schlechten) Ansatz für Sammlungen und möchte wissen, ob eines der älteren Spiele einen ähnlichen Ansatz verwendet. Ich mache gerne folgendes:
// 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
}
}
quelle
Antworten:
Selbst in den 16-Bit-Tagen waren Spielekonsolen im Grunde genommen nur kleine, eingebettete Computer, auf denen Echtzeitsoftware ausgeführt wurde, und die Datenstrukturen, die wir verwendeten, sind die gleichen, die Sie überall in der Informatik finden würden: Arrays, Matrizen, Haufen, Bäume. Nicht viele verknüpfte Listen, weil sie so langsam sind (indirekte Suchvorgänge haben eine lange Latenz).
Der Unterschied besteht darin, dass wir vor der STL und bei so kritischer Leistung die Strukturen und Algorithmen normalerweise selbst schreiben mussten!
David Braben hielt 2011 einen lustigen Vortrag in der GDC, in dem er über all die verrückten Tricks sprach, mit denen er Elite 1984 auf ein BBC Micro gebracht hat . Sie können ihn kostenlos im GDC-Tresor ansehen .
quelle
if(coinsActive)
bevor ich maxNumCoins durchlaufe und aktualisiere. Auf diese Weise vermeide ich die Schleife vollständig, wenn keine Münzen aktiv sind.Hier ist eine interessante Diskussion auf GameDev.net für den Super Mario Bros-Quellcode: Super Mario-Quellcode
quelle