«r» буквально печатает символ возврата каретки

#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:

Возврат каретки — это просто символы, если терминал не интерпретирует их как что-то другое. Похоже, что этот возврат каретки не имеет смысла.

Возможно, вам потребуется использовать какой-то другой код позиционирования символов.