Ncurses" mvaddch()"移动对角线

时间:2015-01-22 22:55:39

标签: c ncurses

我正在尝试创建一个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部分时,它会跳过并走向对角线。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

当您向屏幕添加字符时,光标移动到其后的位置。因此,当您获取当前光标位置时,在添加角色之前,它是您移动到的位置右侧的一个单元格。因此,当尝试向左移动时,例如:您在moveCursor()中减去1,并在draw()中添加1。

cursorX_pos之后从getyx()中减去1,或者可能保持您的坐标值独立于诅咒'关于光标在哪里的想法(即只是忽略getyx())。

对于奖励积分,要意识到目标坐标(下一次抽奖)和当前位置是两个不同的东西,并相应地进行优化。 (提示:向右移动不应该只需move()。)