Добрый день. Исходя из названия топика уже ясно, что со мной что-то не так и вообще у меня проблемы. Знаю) Дело в том, что я учусь на первом курсе, а на летней сессии мне нужно будет сдать игрушку. Ну вот я, придавшись ностальгии и пораскинув умишком, решил что Space Impact будет идеальным решением, ведь в своё время она пленила моё юное сердце. А, и кстати! Пока что я пишу её на Си, т.к. тонкости Си++ я не знаю, а Си вполневполне. За пару деньков я написал основу, а потом я забил на это дело и мотивация моя сделала мне ручкой "пока-пока". Вот собственно я просто оставлю это здесь, чтобы представлять (какой наивный), что это вдруг кто-то прочтёт. Наверняка это придаст мне океан сил и веры в себя. Я так думаю. Ну а если это кто-то прочтёт, то может этот кто-то ответить на вопрос "Как можно справится с мерцанием используя возможности Си?". Если кто-то скажет про двойную буферизацию, то пусть также добавит что-то о том, как её реализовать в Си. Благодарен вам без меры.
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Попытка написать Space Impact в консоли», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.
Проще позиционировать курсор и обновлять(перерисовывать) изменившиеся кусочки. Двойная буферизация предполагает собой ДВА буфера, один из которых просчитывается, а другой отрисовывается. Мало того, что их два, так ещё и буфер отрисовывается ЦЕЛИКОМ. В варианте, который предложил я, используется один буфер и обновляются лишь те элементы(символы), которые надо обновить. Сам так делал, работает. По поводу "а что если надо обновить весь буфер?" сказать точно не могу, потому что я обновлял максимум 40% консоли за 1 шаг цикла (т.к. было довольно много "свободного" и "неизменного" пространства на карте)
Двойная буферизация сложно. Можно просто переносить курсор в точку 0 0 и отрисовывать заново. Для небольших карт очень годно. А если фон чёрный как у тебя то мерцание незаметно и на больших картах. Делай так: #include <Windows.h> void setcur(int x, int y)//установка курсора на позицию x y { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); }; Далее в цикле отрисовки просто пишешь (вместо функции очистки экрана): setcur(0,0); и рисуешь лвл.
Там если я правильно помню есть адрес B800h - это начало данных экрана в текстовом режиме. Т.е. ты делаешь свой буфер пишешь в него сцену, затем копируешь в B800h. Размер буфера 2XY - на пиксель два байта(символ и атрибут).
Второй способ это графический режим в консоли. Посмотри функцию initgraph там должны быть двустраничные режимы.