Буква "\r" буквально печатает символ возврата каретки

Я учу себя языку программирования Си. За исключением того, что я учусь в контексте разработки игры Gameboy (с использованием GBDEK).

Я работаю над простым клоном Breakout и решил использовать функцию printf(), чтобы показать счет игрока. Когда счет игрока увеличивается, отображаемый счет также должен измениться. Вот соответствующий код:

int score = 0;

void main() {
   printf(" \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n%d", score);
}

void moveBall() {
    if((ballY == paddleY-8) && (ballX >= paddleX-8) && (paddleX+24 >= ballX-8)) {
       score+=10;           
       printf("\r%d", score);
    }
}

Когда игра начинается, консоль печатает кучу пустых строк, чтобы расположить счет. Когда счет меняется (в этом случае, когда мяч попадает на весло), он должен вернуться в начало строки и напечатать новый номер. Тем не менее, он печатает символ возврата каретки (странный символ CR) и не стирает предыдущий счет. Вот скриншот, чтобы показать вам, что я имею в виду.

Я не уверен, как это исправить. Помогите?

2 ответа

Решение

В Drawing.h есть функция gotogxy (предполагается, что в этом вопросе используются исходные коды 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);

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

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

Другие вопросы по тегам