Member 12197225 Ответов: 1

Рисунок # ' s в квадрате


Всем привет вот код:


#include <curses.h>
#define LEN 21
#define TRUE 1
#define FALSE 0
#define UP 3
#define DOWN 2
#define RIGHT 5
#define LEFT 4

// A simple program that allows a cursor to be moved around the screen.
void dispMap(int x, 
             int y, 
             char map[][LEN]){
  int row,col;
  // draw basic map
  for(row=0;row<LEN;row++){
    for(col=0;col<LEN;col++){
      mvaddch(row+1,col+1,map[row][col]);
    }
  }
  // cursor symbol
  mvaddch(y+1,x+1,'#');
}
     
int main(void){
     char map[][LEN]={" ---------------     ", // empty space to fill array to length of LEN
                      "|               |    ",
                      "|               |    ",
                      "|               |    ",
                      "|               |    ",
                      "|               |    ",
                      "|               |    ",
                      "|               |    ",
                      "|               |    ",
                      "|               |    ",
                      "|               |    ",
                      "|               |    ",
                      "|               |    ",
                      "|               |    ",
                      " ---------------     ",    
                      "Drawing feild of play", 
                      "Press p to toggle pen", 
                      "Press q to quit      ", 
                      "Pen down             ",    //Maybe define a string to allow it to change
                      "                     ", 
                      "                     ", 
  };
  
  // activate the keypad to read from this terminal
  keypad(initscr(),TRUE);
  //don't show cursor
  curs_set(0);


  // initialise the x and y positions of the cursor
  int xPos=1;
  int yPos=1;
  int p = 1;
  char c='\0';       // input character initialise to null
  
  while( c!='q'){
    dispMap(xPos,yPos,map);
    // read a single character
    c=getch();
    mvaddch(yPos,xPos,'#');        // erase old position
    // move according to cursor
 
    switch(c){
    case UP:
      if (map[yPos-1][xPos]== ' '){
        yPos--;
        mvaddch(yPos,xPos,'#');
      }
      break;
    case DOWN:
      if (map[yPos+1][xPos]== ' '){
        yPos++;
        mvaddch(yPos,xPos,'#');
      }
      break;
    case LEFT:
      if (map[yPos][xPos-1]== ' '){
        xPos--;
        mvaddch(yPos,xPos,'#');
      }
      break;
    case RIGHT:
      if (map[yPos][xPos+1]== ' '){
        xPos++;
        mvaddch(yPos,xPos,'#');
      }
    }
  }
  endwin();
}



Однако проблема в том, что когда я перемещаю свой ключ, он не печатает хэш в форме

Что я уже пробовал:

Я попытался изменить положение линии
mvaddch(yPos, xPos,'#'); в операторе is, но это не помогает

CPallini

Ваш код отлично работает на моей коробке Lubuntu 16. Я могу с радостью переместить " # " в пустую область.

Member 12197225

Да. Это должно было случиться. Но что желательно, так это то, что, когда он движется, он оставляет след # ' s

1 Ответов

Рейтинг:
2

Patrice T

Используйте отладчик, чтобы проверить, что вы получаете с клавиатуры, у вас может быть сюрприз с кодами, которые вы получаете !
попробуйте изменить коды стрелок на простые буквы, просто для проверки.

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.