Как исправить "Ошибка открытия терминала: неизвестно". ncurses C ++ Ma c ОС - PullRequest
1 голос
/ 29 мая 2020

Не могу понять. Пытаюсь реализовать игровую змейку в терминале. Приведенный ниже код отлично работает в интегрированном терминале Visual Studio Code, но возвращает Error opening terminal: unknown., когда я запускаю ту же программу в терминале ОС Ma c. Не уверен, почему я получаю разные результаты на этих двух терминалах. Когда я проверяю переменную TERM с помощью printenv в обоих терминалах, они говорят: TERM=xterm-256color

#include <stdio.h>
#include <ncurses.h>
#include <iostream>
#include <unistd.h>

enum direction { UP, DOWN, LEFT, RIGHT };

int main()
{
    int ch;
    int ** field;
    direction snake_direction;

    WINDOW *snake_window;

    initscr();
    clear();
    noecho();
    cbreak();
    snake_window = newwin(0, 0, 0, 0);
    keypad(snake_window, TRUE);
    nodelay(snake_window, TRUE);

    int x = 5;
    int y = 5;

    for (int i = 0; i < 20; i++)
    {
        for (int j = 0; j < 20; j++)
        {
            if (i == x && j == y)
            {
                mvwaddch(snake_window, i, j, 64);
            }
            else if ( i == 0 || i == 19)
            {
                mvwaddch(snake_window, i, j, 88);
            }
            else if (j == 0 || j == 19)
            {
                mvwaddch(snake_window, i, j, 88);
            }
            else
            {
                mvwaddch(snake_window, i, j, 32);
            }
         }
    }
    while (ch != 113)
    {
        usleep(1 * 1000000);
        ch = wgetch(snake_window);
        switch(ch)
        {
            case(KEY_UP):
                snake_direction = UP;
                break;
            case(KEY_DOWN):
                snake_direction = DOWN;
                break;
            case(KEY_LEFT):
                snake_direction = LEFT;
                break;
            case(KEY_RIGHT):
                snake_direction = RIGHT;
                break;
            case(ERR):
                break;
        }

        if (snake_direction == UP)          { x--; }
        else if (snake_direction == DOWN)   { x++; } 
        else if (snake_direction == LEFT)   { y--; } 
        else if (snake_direction == RIGHT)  { y++; } 

        for (int i = 0; i < 20; i++)
        {
            for (int j = 0; j < 20; j++)
            {
                if (i == x && j == y)
                {
                    mvwaddch(snake_window, i, j, 64);
                }
                else if ( i == 0 || i == 19)
                {
                    mvwaddch(snake_window, i, j, 88);
                }
                else if (j == 0 || j == 19)
                {
                    mvwaddch(snake_window, i, j, 88);
                }
                else
                {
                    mvwaddch(snake_window, i, j, 32);
                }
            }
        }
        wrefresh(snake_window);
    }

    endwin();
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

project(Snake)

find_package(Curses REQUIRED)
include_directories(${CURSES_INCLUDE_DIR})

add_executable(snake src/main.cpp)
target_link_libraries(snake ${CURSES_LIBRARIES})
...