Je suis curieux de connaître les structures de données utilisées lors de la programmation de jeux plus anciens comme Super Mario Brothers pour NES et Super Mario World pour SNES. Ma compréhension est que les jeux de cette période ont été écrits en assemblage. Les programmeurs ont-ils défini / utilisé des structures de données?
Par exemple: lorsqu'un groupe de pièces apparaît à l'écran, comment sont-elles stockées? Les programmeurs ont-ils simplement utilisé des tableaux? Ou peut-être qu'ils avaient des listes de liens?
À votre santé!
Edit : je m'intéresse à différentes approches ... pas forcément une approche universelle.
Edit 2 : Dans certains de mes jeux, j'utilise une approche (potentiellement mauvaise) envers les collections et je veux savoir si l'un des jeux plus anciens utilisait une approche similaire. J'aime faire ce qui suit:
// 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
}
}
la source
Réponses:
Même à l'époque du 16 bits, les consoles de jeu étaient fondamentalement de petits ordinateurs embarqués exécutant des logiciels en temps réel, et les structures de données que nous avons utilisées sont les mêmes que celles que vous trouverez n'importe où en informatique: tableaux, matrices, tas, arbres. Pas beaucoup de listes chaînées car elles sont si lentes (les recherches indirectes ont une longue latence).
La différence est qu'avant la STL, et avec des performances si critiques, nous devions généralement écrire nous-mêmes les structures et les algorithmes!
David Braben a fait une conférence amusante au GDC 2011 où il a parlé de toutes les astuces folles qu'il a utilisées pour monter Elite sur un BBC Micro en 1984. Vous pouvez le regarder gratuitement au GDC Vault .
la source
if(coinsActive)
avant de boucler sur maxNumCoins et de mettre à jour. De cette façon, j'évite complètement la boucle si aucune pièce n'est active.Voici une discussion intéressante sur GameDev.net pour le code source de Super Mario Bros: Code source de Super Mario
la source