Мне любопытно, какие структуры данных используются при программировании старых игр, таких как Super Mario Brothers для NES и Super Mario World для SNES. Насколько я понимаю, игры этого периода были написаны на сборке. Программисты определяли / использовали какие-либо структуры данных?
Например: когда группа монет появляется на экране, как они хранятся? Программисты просто использовали массивы? Или, возможно, у них были связанные списки?
Ура!
Редактировать : меня интересуют различные подходы ... не обязательно универсальный подход.
Редактировать 2 : В некоторых моих играх я использую (потенциально плохой) подход к коллекциям, и я хочу знать, использовал ли какой-либо из старых игр аналогичный подход. Мне нравится делать следующее:
// 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
источник
источник
Ответы:
Даже в 16-битные дни игровые приставки были в основном небольшими встроенными компьютерами, на которых работало программное обеспечение реального времени, а используемые нами структуры данных были такими же, как и в любой информатике: массивы, матрицы, кучи, деревья. Не так много связанных списков, потому что они такие медленные (косвенные поиски имеют большую задержку).
Разница в том, что до STL и при столь критической производительности нам обычно приходилось самим писать структуры и алгоритмы!
Дэвид Брабен выступил с веселой лекцией на GDC 2011 года, где рассказал о всех сумасшедших уловках, которые он использовал, чтобы установить Elite на BBC Micro в 1984 году. Вы можете бесплатно посмотреть его в GDC Vault .
источник
if(coinsActive)
прежде чем перебрать maxNumCoins и выполнить обновление. Таким образом, я полностью избегаю петли, если активны нулевые монеты.Вот интересная дискуссия на GameDev.net для исходного кода Super Mario Bros: Исходный код Super Mario
источник