Ncurses "mvaddch()" 移动对角线
Ncurses "mvaddch()" Moves Diagonal
我正在尝试创建一个 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 部分时,它会跳过并变为对角线。我该如何解决这个问题?
当你在屏幕上添加一个字符时,光标会移动到它后面的位置。因此,当您随后获取当前光标位置时,它是您移动到的位置右侧的一个单元格,然后再添加字符。因此,当尝试向左移动时,例如:您在 moveCursor()
中减去 1,然后在 draw()
.
中加 1
要么在 getyx()
之后从 cursorX_pos
中减去 1,要么保持你的坐标值独立于 curses 对光标位置的想法(即只省略 getyx()
).
为了加分,意识到目标坐标(下一次抽奖)和当前位置是两个不同的东西,并相应地进行优化。 (提示:向右移动根本不需要 move()
。)
我正在尝试创建一个 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 部分时,它会跳过并变为对角线。我该如何解决这个问题?
当你在屏幕上添加一个字符时,光标会移动到它后面的位置。因此,当您随后获取当前光标位置时,它是您移动到的位置右侧的一个单元格,然后再添加字符。因此,当尝试向左移动时,例如:您在 moveCursor()
中减去 1,然后在 draw()
.
要么在 getyx()
之后从 cursorX_pos
中减去 1,要么保持你的坐标值独立于 curses 对光标位置的想法(即只省略 getyx()
).
为了加分,意识到目标坐标(下一次抽奖)和当前位置是两个不同的东西,并相应地进行优化。 (提示:向右移动根本不需要 move()
。)