2015-01-22 3 views
0

Etch-n-sketch 게임을 만들려고하고 있는데 화살표 키를 위아래로 움직이면 커서가 오른쪽으로 이동하고 내가 누른 방향으로 움직입니다. 이 자리를 건너 뛰는 것으로 나타납니다하지만 나는 바로 이동할 수 있습니다 나는 이동 및 도면에 대한Ncurses "mvaddch()"대각선으로 이동

코드를 왼쪽으로 이동하지 못할 :

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

더 많은 코드를 제공해야합니다. 제공 한 코드로 도움을 줄 수는 없습니다. – rhubarbdog

답변

1

문자를 화면에 추가하면 커서가 그 다음 위치로 이동합니다. 그래서, 현재 커서 위치를 가져올 때, 문자를 추가하기 전에 이동 한 위치의 오른쪽에있는 하나의 셀입니다. 따라서 왼쪽으로 이동하려고하면 moveCursor()에서 1을 빼고 draw()에 1을 더합니다.

getyx() 이후에 cursorX_pos에서 1을 뺍니다. 또는 curses가 커서의 위치와 관계없이 좌표 값을 유지합니다 (즉, getyx()을 생략하십시오).

보너스 포인트의 경우 목표 좌표 (다음 무승부)와 현재 위치가 서로 다른 두 가지이며 그에 따라 최적화됨을 알 수 있습니다. (힌트 : 오른쪽으로 이동하면 move()이 필요하지 않습니다.)