ncurses не может отображать элемент в позиции xy из структуры - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь отобразить робота с ncurses. Когда x & y печатаются с помощью printf, все в порядке, но с mvwprintw(window, x, y, "a"); ничего не отображается. В чем проблема?

Файл: просмотр.

#include <ncurses.h>
#include "config.c"
#include "arena.c"

void create_window(){
    robot robots[NUMBER_ROBOTS];

    create_robots(robots);
    initscr();
    raw();
    noecho();

    WINDOW * window = newwin(TERM_HEIGHT, TERM_WIDTH, 0, 0);

    refresh();

    box(window, 0,0); 

    for (size_t i = 0; i < NUMBER_ROBOTS; i++)
    {   
        //to_string(robots[i]);
        int x = get_posx(robots[i]);
        int y = get_posy(robots[i]);

        printf("X%d Y%d\n", x, y);

        wrefresh(window);
        mvwprintw(window, x, y, "a");

    }
    wrefresh(window);
    getch(); 
    endwin();
}

void launch(int argc, char const *argv[])
{   

    create_window(); 

}

Файл robot.h


typedef struct robot{
  int state;
  char id[1];
  double posX,posY;
  double posXo,posYo;
  int speed;
  int life;
  missile missiles[2];  
} robot ;


Файл арены. c


int get_posx(robot r){
    return (r.posX*TERM_WIDTH)/WIDTH;
}

int get_posy(robot r){
    return (r.posY*TERM_HEIGHT)/HEIGHT;
}

Экран Выполнение: введите здесь описание изображения Отображается любое "а".

1 Ответ

0 голосов
/ 16 марта 2020

Есть несколько возможностей:

  • вызов mvwprintw меняет координаты x / y (поэтому потребуется достаточно большое значение x и сделать его строкой -number, теряя любой текст, написанный, когда он выходит за пределы диапазона)
  • скриншот не показывает нижнюю часть окна (возможно, что TERM_HEIGHT неверно, усугубляя проблему с координатами)
  • printf мешает, запутывая проклятия о том, где на самом деле находится курсор
  • getch должен быть wgetch(window), на всякий случай (я не вижу никаких) были ожидающие обновления stdscr.
...