Программа неправильно выполняется в консоли linux
Я делаю рогалик, но столкнулся с проблемой, когда я двигаю героя, он иногда перестаёт ходить, причём в коде есть проверка можно ли вставать на следующий блок, я внедрил проверку происходит ли перемещение и выяснил, что иногда он не видит нужных значений, так же я обнаружил что этот баг проявляется лишь в *nix консолях, когда как в cmd например, всё нормально.
Код рогалика:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "coniox/coniox.h"
char field[2048][2048];
int main() {
int steps = 15, feel = 50, range = 5, grade = 3, x = 0, y = 0; // 35
int userX = 0, userY = 0, in = 0;
srand(time(NULL));
clean();
for (int i = 0; i < steps; i++, feel -= grade, range += grade) {
for (int j = 0; j < feel; j++) {
x = rand() % range;
y = rand() % range;
if (x < 2048 && y < 2048) {
field[x][y] = '#';
setColor(BLACK, GREEN, NORMAL);
mvCursor(x, y);
putc('#', stdout);
setColor(BLACK, WHITE, NORMAL);
}
}
}
mvCursor(0, 0);
setColor(BLACK, YELLOW, BRIGHT);
putc('@', stdout);
setColor(BLACK, WHITE, NORMAL);
in = readKb();
while (in != 'q') {
switch (in) {
case 'k':
if (field[userX][userY-1] == '#') {
mvCursor(userX, userY);
putc(',', stdout);
userY--;
}
else puts("error");
break;
case 'h':
if (field[userX-1][userY] == '#') {
mvCursor(userX, userY);
putc(',', stdout);
userX--;
}
else puts("error");
break;
case 'j':
if (field[userX][userY+1] == '#') {
mvCursor(userX, userY);
putc(',', stdout);
userY++;
}
else puts("error");
break;
case 'l':
if (field[userX+1][userY] == '#') {
mvCursor(userX, userY);
putc(',', stdout);
userX++;
}
else puts("error");
break;
}
mvCursor(userX, userY);
setColor(BLACK, YELLOW, BRIGHT);
putc('@', stdout);
setColor(BLACK, WHITE, NORMAL);
in = readKb();
}
clean();
return 0;
}
В коде используются функции setColor, mvCursor, readKb и clean, все они проверены ошибок нет.