Как добиться того, чтобы объект в консоли двигался вниз вне зависимости от того, нажимаю я клавишу или нет
Как добиться того, чтобы объект o
в консоли двигался по направлению вниз вне зависимости от того, нажимаю я клавишу или нет.
Понятное дело, чтобы он двигался вниз, необходимо переменную x
инкрементрировать (x++ или ++x). Но дело в том, что объект спускается вниз только тогда, когда я нажимаю какую-либо клавишу с помощью функции _getche()
. А в свою очередь функция _kbhit
ждет, пока клавиша будет нажата, иначе она вернет 0
. Например, нажимаю я 'a'
, объект смещается влево и уже потом смещается вниз.
Вопрос: Как добиться того, чтобы он каждые пол секунды (может и быстрее , если это можно настраивать) спускался вниз, при этом я мог бы его сдвигать влево и вправо, независимо от того, двигается ли он вниз прямо сейчас или стоит.
Вот сам исходный код:
#include <iostream>
#include <vector>
#include <conio.h>
#include <windows.h>
#include <time.h>
#include <cstdlib>
#include <cstdio>
#include <utility>
const int HEIGHT{ 25 }; /* --ВЫСОТА-- */
const int WIDTH{ 50 }; /* --ШИРИНА-- */
int map[HEIGHT][WIDTH];
int x = 4;
int y = 15;
void init(void)
{
for (int i = 0; i != HEIGHT; i++)
for (int j = 0; j != WIDTH; j++)
map[i][j] = ' ';
}
void draw(void)
{
static int count = 0;
if (count++ == 0) {
init();
map[x][y] = 'o';
}
for (int i = 0; i != HEIGHT; i++) {
for (int j = 0; j != WIDTH; j++){
if (i == 0 || j == 0 || j == WIDTH-1 || i == HEIGHT-1)
map[i][j] = '#';
}
}
}
void print_map(void)
{
for (int i = 0; i != HEIGHT; i++)
{
for (int j = 0; j != WIDTH; j++)
{
printf("%c", map[i][j]);
}
std::cout << std::endl;
}
printf("x = %i; y = %i;", x, y);
}
//int x = 4;
//int y = 15;
void move()
{
x++;
map[x][y] = ' ';
int prev_x = x, prev_y = y;
if (_kbhit)
{
char input = _getche();
switch (input)
{
case 'w':
case 'W': --x;
break;
case 's':
case 'S': ++x;
break;
case 'd':
case 'D': ++y;
break;
case 'a':
case 'A': --y;
break;
}
}
if (map[x][y] == '#') {
x = prev_x; y = prev_y;
}
else
map[x][y] = 'o';
}
void clear_screen(void)
{
std::system("cls");
}
int main(void)
{
while (true)
{
draw();
print_map();
move();
clear_screen();
}
return 0;
}
Буду сильно благодарен, если действительно поможете!