Буква "\ r" буквально печатает символ возврата каретки - PullRequest
3 голосов
/ 18 апреля 2019

Я учу себя языку Си.За исключением того, что я учусь в контексте разработки игры 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) и не стирает предыдущий счет.Вот скриншот, чтобы показать вам, что я имею в виду.

enter image description here

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

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

В 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);
1 голос
/ 18 апреля 2019

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

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

...