@TyLo

Почему в терминале linux рендер игровой территории на c++ постоянно косит?

Добрый день. Уже некоторое время мучаюсь с "рендером", который при отрисовке должен показывать в терминале linux игровую территорию, ограниченную стенками из "#". Но проблема в том, что он рисуется как-то наперекосяк, появляются сдвиги и прочее мракобесие, которое я никак не могу решить.

Код

#include <curses.h>
#include <iostream>

// Init game loop limiter
bool loop = false;

// Init game area
int area_w = 100;
int area_h = 20;

// Init player
int player_x = 2;
int player_y = 2;
enum player_c {
    UP = 119,
    DOWN = 115,
    LEFT = 97,
    RIGHT = 100
};

// Input
void g_input() {
    char c = getch();
    switch(c) {
        case UP:
            player_y -= 1;
            break;
        case DOWN:
            player_y += 1;
            break;
        case LEFT:
            player_x -= 1;
            break;
        case RIGHT:
            player_x += 1;
            break;
    }
}

// Render 
void g_render() {
    std::system("clear");
    
    for(int py = 0; py < area_h; py++) {
        for(int px = 0; px < area_w; px++) {
            if(px == 0 || px == area_w || py == 0 || py == area_h) {
                printf("#");
            } else {
                printf(" ");
            }
            if(px == player_x && py == player_y) {
                printf("@");
            }
        }
        printf("\n");
    }
}

int main() {
    initscr();
    
    loop = true;
    while(loop) {
        g_render();
        g_input();
    }
    
    endwin();
    return 0;
}

  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
zagayevskiy
@zagayevskiy
Android developer at Yandex
Небось потому что ширина терминала 80 символов, а не 100.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@whiteBlackness
Ещё есть вариант, что у тебя шрифт не моноширный.
Т.е символы могут быть разной ширины
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы