Jump to content

Обновление экрана по массиву? или как?


Recommended Posts

Ну как вы помните (наверное...) программирую я подобие тетриса. Ну почти все сделал, только одна загвоздка осталась: линия у меня стирается, если собралось по vерт. диаg. или goriзонтали 4 кубика одинакового цвета. Ну в массиве я делаю так: все что выше (для gorizontali) опускаю на одну клетку вниз, то же и для vertikal. Ну с diag потруднее, но все равно на одну единицу опустить вниз в массиве можно. в массиве хранится код цвета кубика. Ну ладно, массив сделали. Но надо же еще и на экране стереть эту линию и опустить все вниз. Неужели обновлять весь экран по массиву??? можно вычислять координаты по индексу массива. Массив 20 х 20. Не будет ли прога тормозить, если сделать обновление по массиву?

А может есть способ как это проще сделать????

Link to comment
Share on other sites

Кроме как обновления, вроде бы в голову ничего не приходит. Тормозить не будет. Машина с 400 элементами должна без проблем справиться! Если это не <2 пня

Link to comment
Share on other sites

Бумер:

Но надо же еще и на экране стереть эту линию и опустить все вниз. Неужели обновлять весь экран по массиву??? ...

А может есть способ как это проще сделать????

Проще не будет, чем меньше будет мелькание, тем сложнее будет программа. Например, можно взять перед удалением строки в "стакане" остающуюся часть изображения в буфер процедурой GetImage и вывести ее снова ниже на одну строку "стакана" процедурой PutImage, но все равно координаты всех элементов для будущих проверок заполненности строк тебе пересчитывать придется.

Есть и другие способы, но они еще сложнее, они основываются на подготовке изображения в буфере, как об этом уже сказал Darhazer. При этом часто еще используют синхронизацию с разверткой монитора. Но на хорошем компьютере мелькание и так должно быть не сильно заметно. Если хочешь об этом знать больше, читай описания способов работы со спрайтами. Но не думаю, чтобы к небольшому мельканию у тебя стали придираться, как я понимаю, работу со спрайтами вы не проходили.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...