我正在尝试创建一个Etch-n-sketch游戏,当我上下移动箭头键时,光标向右移动,向我移动的方向移动。我可以向右移动,虽然它似乎正在跳过一个地方但我不能向左移动
移动和绘图代码:
void moveCursor(char input)
{
int cursorX_Pos;
int cursorY_Pos;
int arrows;
getyx(stdscr, cursorY_Pos, cursorX_Pos);
arrows = 1;
switch(input)
{
case UP:
cursorY_Pos--;
arrows = 0;
break;
case DOWN:
cursorY_Pos++;
arrows = 0;
break;
case RIGHT:
cursorX_Pos++;
arrows = 0;
break;
case LEFT:
cursorX_Pos--;
arrows = 0;
break;
default:
arrows = 1;
break;
}
if (arrows == 0)
{
draw(cursorY_Pos,cursorX_Pos);
}
}
void draw(int y, int x)
{
mvaddch(y, x, '#');
refresh();
}
我不确定代码在哪里尝试移动对角线。我尝试将mvaddch拆分为move和addch。我在不同的时间尝试了它们并且移动工作(似乎没有跳过)但是当我启用addch部分时,它会跳过并走向对角线。我该如何解决这个问题?
答案 0 :(得分:1)
当您向屏幕添加字符时,光标移动到其后的位置。因此,当您获取当前光标位置时,在添加角色之前,它是您移动到的位置右侧的一个单元格。因此,当尝试向左移动时,例如:您在moveCursor()
中减去1,并在draw()
中添加1。
在cursorX_pos
之后从getyx()
中减去1,或者可能保持您的坐标值独立于诅咒'关于光标在哪里的想法(即只是忽略getyx()
)。
对于奖励积分,要意识到目标坐标(下一次抽奖)和当前位置是两个不同的东西,并相应地进行优化。 (提示:向右移动不应该只需move()
。)