Я почувствовал себя ретро и решил написать свою любимую 8-битную компьютерную игру (Williams' Defender) на своем первом компьютере (Commodore PET 4032). Весь код выполняется на языке ассемблера 6502. Для тех, кто не знаком с PET, вся графика основана на персонажах, и для создания игр вы перемещаете разных персонажей по экрану размером 40 столбцов x 25 строк. Это очень старая технология — здесь нет ни спрайтов, ни графических слоев, ни возможности И на уровне экрана и т. д., к которым мы привыкли бы сегодня.
Я хочу, чтобы в игре одновременно запускалось несколько «лазерных лучей», и эти лазерные лучи могли бы накладываться друг на друга, проходя по экрану. Прямо сейчас, когда лучи движутся по экрану, они сохраняют в памяти то, что было под ними, а затем заменяют то, что было под ними, чтобы восстановить фон в исходное состояние. Проблема возникает, когда второй лазер накладывается поверх первого... первый перемещается и заменяет исходный фон, а не оставляет второй лазер сверху, затем этот второй лазер перемещается и оставляет артефакты первого позади.
Существует ли классический «легкий» алгоритм или набор правил, который позволяет нескольким объектам перемещаться друг относительно друга так, чтобы исходные правильные вещи под ними сохранялись? Я пробовал разные подходы (замена фона по мере прохождения и т. д.), но, похоже, ничто не дает мне правильного результата, который я хочу.