我尝试制作一个菜单,您可以通过按下按钮选择不同的菜单点。就像你按下' w'小箭头正在向上移动并按下' s向下移动也许我还应该提一下,我在这个程序中使用Ubuntu及其默认终端。
以下是代码:
int printSaveMenu(config_t *config)
{
char input;
int position = MOV;
clrscr();
printf(" >Quit Game without saving?\n Save Game!");
while(1)
{
input = getch();
if(input == 'w'/*config->movement[UP]*/ && position!=UP)
{
printf(" ");
gotoxy0(2,0);
printf(">");
position = UP;
}
else if(input == 's'/*config->movement[DOWN]*/ && position !=DOWN)
{
printf(" ");
gotoxy0(2,1);
printf(">");
position = DOWN;
}
}
}
这是我用于clrscr()的库。和gotoxy0();:https://ghostbin.com/paste/54oeq
对不起德国评论,但图书馆应该自行解释。 这是按下' w'并且' s'曾经:
> uit Game without saving?
Save Game!
谢谢!
答案 0 :(得分:1)
问题是在printf
完成后光标向前移动。因此,当您打印一个空格来“擦除”选择箭头时,您实际上会覆盖文本中的第一个字符。插入第二个gotoxy0
电话会解决此问题:
...
if(input == 'w'/*config->movement[UP]*/ && position!=UP)
{
gotoxy0(2,1); // <----
printf(" ");
gotoxy0(2,0);
printf(">");
position = UP;
}
else if(input == 's'/*config->movement[DOWN]*/ && position !=DOWN)
{
gotoxy0(2,0); // <----
printf(" ");
gotoxy0(2,1);
printf(">");
position = DOWN;
}