2015-12-14 3 views
1

Я хочу сделать игру змеи в консоли с помощью C++, но я не хочу ждать каждый «кадр» для ввода пользователем. Если я буду использовать CIN или Геч(), программа будет ждать ввода игрока каждый кадр:C++ в реальном времени змея, как игровая приставка без многопоточности

while (game) 
{ 
    c = getch(); //input 
    snake.move (c); //moving 
    draw(); //drawing 
} 

Как переместить змею и нарисовать его в консоли и не дожидаясь ввода каждого кадра?

Есть ли способ сделать это без многопоточности? Может быть, что-то вроде положить что-то в буфере cin в коде вместо использования консоли? Это выполнимо?

+0

Взгляните на SFML, прочитав учебники, в особенности графику и события. – ForeverStudent

+0

Я не хочу использовать SFML. Я хочу только стандартный C++ – Konowy

+0

Нет стандартного неблокирующего чтения AFIAK. Вот почему вы должны использовать два потока. – NathanOliver

ответ

4

Вы не можете использовать стандартный C++, потому что нет гарантии, что, когда пользователь нажимает клавишу, нажатие клавиши будет немедленно подтверждено. Многие реализации ждут нажатия клавиши Enter, а затем обрабатывают входной буфер.

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

Другой метод заключается в опросе статус переключателя. Когда ключ отпущен, вы можете переместить змею.

Все перечисленные выше решения требуют функциональных возможностей платформы или ОС.

+0

conio.h getch() работает без ввода необходимых Я использую окна, поэтому этого достаточно. Я просто хочу добавить что-то в буфер с помощью кода вместо консоли. – Konowy

+0

Файл 'conio.h' не является частью стандартного C++. –

+0

Это часть окна C++, но она привязана ко всем хорошим компиляторам. – Konowy