#c #printf #carriage-return #gameboy #gbdk
#c #printf #Возврат каретки #gameboy #гбдк
Вопрос:
Я изучаю язык программирования C. За исключением того, что я учусь в контексте разработки игры Gameboy (с использованием GBDEK).
Я работаю над простым клоном Breakout и решил использовать функцию printf(), чтобы показать счет игрока. Когда счет игрока увеличивается, отображаемый счет, очевидно, тоже должен измениться. Вот соответствующий код:
int score = 0;
void main() {
printf(" nnnnnnnnnnnnnnnnn%d", score);
}
void moveBall() {
if((ballY == paddleY-8) amp;amp; (ballX >= paddleX-8) amp;amp; (paddleX 24 >= ballX-8)) {
score =10;
printf("r%d", score);
}
}
Когда игра начинается, консоль печатает кучу пустых строк, чтобы расположить счет. Когда счет меняется (в данном случае, когда мяч попадает в ракетку), он должен вернуться к началу строки и напечатать новое число. Однако он печатает символ возврата каретки (странный символ CR) и не стирает предыдущую запись. Вот скриншот, чтобы показать вам, что я имею в виду.
Я не уверен, как это исправить. Помощь?
Комментарии:
1. ваша консоль не поддерживает
r
должным образом. Возможно, у него есть какой-то другой API для сброса позиции строки2. Хм. Тогда есть ли обходной путь для этого? Например, программирование возврата каретки в сборке (с которой я совершенно не знаком)?
3. проверьте ответ Рената. Стоит попробовать.
Ответ №1:
На чертеже есть функция gotogxy.h (предположим, что это исходные коды GBDK, используемые в вопросе) :
/* Sets the current text position to (x,y). Note that x and y have units
of cells (8 pixels) */
void
gotogxy(UBYTE x, UBYTE y);
Вы можете попробовать использовать его перед printf, например:
gotogxy(0,7);
printf("%d", score);
Комментарии:
1. Ух ты, ты решил эту проблему! Мне никогда не приходило в голову заняться рисованием. h Для этого примера я не могу использовать printf(). Однако рисование. у h есть функция с именем gprintn(), которая печатает число в позиции, указанной gotogxy(). Поиграл с ним, и теперь он работает идеально. Спасибо!
2. На самом деле это была слепая догадка, я просто использовал полнотекстовый поиск в репозитории
Ответ №2:
Возврат каретки — это просто символы, если терминал не интерпретирует их как что-то другое. Похоже, что этот возврат каретки не имеет смысла.
Возможно, вам потребуется использовать какой-то другой код позиционирования символов.