Расстояние между клеммами и столбцами - PullRequest
1 голос
/ 03 февраля 2020

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

Я рисую простую рамку с пробелами, чтобы получить «карту» для змеи.

void draw(){
    for(int i = 0; i < cols; i++){
        for(int j = 0; j < rows; j++){
            if(i == 0 || i == cols-1 || j == 0 || j == rows-1)
                mvaddch(i,j,'#');
            else
                mvaddch(i,j,' ');
        }
    }
    refresh();
}

У меня проблема в том, что расстояние между столбцами и строками разное.
Строки и столбцы оба инициализируются со значением 20. Поэтому я подумал, что это должен быть квадрат. Скорость движения также меняется, если я двигаюсь вверх / вниз или вправо / влево.

Эта проблема возникает в Terminal.app и iterm2. Есть ли способ изменить интервал, который ему соответствует?

enter image description here

1 Ответ

2 голосов
/ 03 февраля 2020

Если вы используете одно и то же число по вертикали и горизонтали практически не квадратных квадратов, то результат будет не квадратным. То же самое относится и к скорости, если вы перемещаете одинаковое количество шагов в секунду по горизонтали и вертикали, но длина шага отличается, поскольку это ширина и высота неквадратной плитки, тогда воспринимаемая скорость будет разные.

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

Таким образом, вместо того, чтобы, например, представлять эту ситуацию (квадрат со змеей) с таким же количеством символов по горизонтали и по вертикали

##########
#        #
#  ooO   #
#  o     #
#  o     #
#  o     #
#  o     #
#        #
#        #
##########

Попробуйте это для той же ситуации, то есть вставьте горизонтальный пробел после каждого непустого символа, в результате чего число символов по горизонтали вдвое больше, чем вертикально. Их гораздо более длинная высота, чем ширина, и тот факт, что верхняя половина большинства печатных символов в основном пуста, приводит к равномерному, гораздо более скварированному впечатлению sh.

# # # # # # # # # #
#                 #
#     o o O       #
#     o           #
#     o           #
#     o           #
#     o           #
#                 #
#                 #
# # # # # # # # # #

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

Если вам не нравятся пропуски, которые неизбежны по вертикали и преднамеренно по горизонтали, то нормальная терминальная среда не подходит для вашей игры и вам нужно перейти в графическую среду c, которая позволяет вам с точностью до пикселя контролировать результат.

...