Лично я бы отдельно рисовал экран как можно чаще, даже если не было обновления положения блока. Так что у меня был бы где-нибудь цикл с "update" и "render" частью. Обновление играет в логику с логикой, которая выполняет или не обновляет позиции и / или удаляет блоки. Render играет мяч в графической части, которая рисует блоки, где они должны быть.
Теперь, если есть строки, которые нужно стереть, логика знает и может пометить эти строки, которые нужно удалить. Здесь я предполагаю, что каждая часть состоит из 4 отдельных блоков, и любой из этих блоков является одним объектом. Теперь, когда этот блок имеет установленный флаг «die», вы можете взять некоторые части рендера, чтобы исчезнуть из блока (скажем, 500 мс, чтобы взорваться). По истечении этого времени объект может быть ликвидирован, и блок на линии выше падает. Почему 500мс? Что ж, вам определенно следует использовать основанное на времени движение , поскольку на разных компьютерах скорость игры остается одинаковой.
Кстати, уже есть так называемые игровые движки, которые обеспечивают такой цикл обновления-рендеринга. Например, XNA, если вы идете по линии .NET. Вы также можете закодировать свой собственный движок, но будьте осторожны, это не простая задача и очень много времени. Я сделал это однажды и не ожидаю, что это будет движок, подобный движку Source; -)