字面上打印回车符号

3
我正在自学C编程语言,但是我的学习是结合设计Gameboy游戏(使用GBDEK)的上下文进行的。
我正在制作一个简单的打砖块克隆游戏,并决定使用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

我不确定如何修复这个问题。需要帮助吗?


6
你的控制台不能正确支持\r。也许它有其他API来重置行位置。 - Jean-François Fabre
嗯,那么有没有解决办法呢?比如在汇编语言中编程回车符(我完全不熟悉)? - Ben Klayer
检查Renat的答案。值得一试。 - Jean-François Fabre
2个回答

3

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);

哇,你解决了它!我从来没有想过要查看drawing.h。对于这个例子,我不能使用printf()。但是,drawing.h有一个名为gprintn()的函数,它在gotogxy()指示的位置打印数字。我玩弄了一下,现在完美地工作了。谢谢! - Ben Klayer
1
那其实是一次盲猜,我只是在代码库中使用了全文搜索。 - Renat

1
车riage return只是字符,除非终端将其解释为其他内容。看起来这个回车符是无意义的。 您可能需要使用其他字符定位代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接