Krótko: mamy sobie grę Snake w JavaScript w Node.js, w konsoli. Klasycznie, poruszanie wężykiem za pomocą klawiszy strzałek. Plansza przeładowuje się cała za każdym posunięciem węża.
Założenie jest takie, że wąż nie może "zawracać w miejscu". I problem – przykładowo: jeśli wąż idzie w dół, a ja nacisnę szybko po sobie LEFT
oraz UP
, to program nie zdąży przeładować planszy i wyświetlić ruchu w lewo, tylko od razu wyświetla w górę.
Jak zrobić, żeby niezależnie od szybkości naciśnięcia po sobie tych klawiszy był wyświetlany zarówno ruch w lewo, jak i w górę?
To kod, który powinien się przydać (trochę go uprościłem, odrzucając abstrakcje):
// Plik "run.js"
// Tu początek pliku
... // tu cośtam
process.stdin.on("data", (keyPressed) => {
settings.snakeSettings = handleKeypress(
keyPressed,
settings.snakeSettings,
exitGame
);
}
});
const intervalID = timers.setInterval(() => {
// W funkcji "makeStep" wywoływana jest funkcja "printBoard"
const newSnakeSettings = makeStep(
settings.environmentSettings,
settings.gameSettings,
settings.boardSettings,
settings.snakeSettings,
exitGame,
computeNewSnakePosition,
clearOutput,
printBoard
);
settings.snakeSettings = newSnakeSettings;
}, settings.gameSettings.level);
// Tu koniec pliku