Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
 Аватар для Andrey040601
5 / 5 / 3
Регистрация: 13.07.2014
Сообщений: 129

Осуществить движение змейки без задержки на ожидания ввода

23.07.2015, 17:36. Показов 2806. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я вот пишу змейку и у меня встал вопрос. Змейка движется сама, то есть мы управляем только ее поворотом. Но управление производится с помощью _getch() который перехватывает кнопки W, A, S, D. Но когда _getch() начинает работать, змейка не может двигаться в это время, так как все переходит именно к функции _getch() и пока не нажмешь кнопу, все будет стоять на месте. Так вот, как реализовать одновременно движение змейки и ожидание клавиши?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.07.2015, 17:36
Ответы с готовыми решениями:

Получить код нажатой клавиши без ожидания ввода в консоли
Задание сделать консольный арканоид. Естественно, что нужно получить управление и при этом игра должна продолжать идти, если игрок ничего...

Движение змейки
Никак не получается сделать движение змейки с последующим присоединением элементов к ней при съедании яблока. Помогите пожалуйста!!! ...

Движение змейки
Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown Const r = 0 Do...

6
 Аватар для Kollap
6 / 6 / 4
Регистрация: 13.07.2015
Сообщений: 23
23.07.2015, 17:51
Что такое _getch? Установите таймер и обрабатывайте сообщение WM_CHAR. Тогда змейка будет двигаться
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
23.07.2015, 17:55
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Есть функция kbhit (_kbhit для MSVC) она возвращает 0, если буфер клавиатуры пуст.
0
 Аватар для Andrey040601
5 / 5 / 3
Регистрация: 13.07.2014
Сообщений: 129
23.07.2015, 17:56  [ТС]
_getch()? Ожидает нажатие клавиши и возвращает ее код

Добавлено через 34 секунды
Цитата Сообщение от shmkv Посмотреть сообщение
Есть функция kbhit (_kbhit для MSVC) она 0, если буфер клавиатуры пуст.
Попробую, спасибо
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
23.07.2015, 17:56
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <windows.h>
#include <iostream>
using namespace std;
 
int main()
{
    HDC hDC = GetDC(GetConsoleWindow());
    HPEN pen = CreatePen(PS_SOLID, 5, RGB(255, 255, 255)); // ободок белый
    SelectObject(hDC, pen);
    
    int step = 1;
    double x, y;
    x = y = 10;
 
    while(true)
    {
        if(GetAsyncKeyState(VK_LEFT))
        {
            x -= step;
        }
        if(GetAsyncKeyState(VK_RIGHT))
        {
            x += step;
        }
        if(GetAsyncKeyState(VK_UP))
        {
            y -= step;
        }
        if(GetAsyncKeyState(VK_DOWN))
        {
            y += step;
        }
        if(GetAsyncKeyState(VK_ESCAPE))
        {
            exit(0);
        }
        MoveToEx(hDC, x, y, NULL);
        LineTo(hDC, x, y);
        Sleep(10);
    }
    DeleteObject(pen);
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream> 
#include <windows.h>
#include <conio.h>
using namespace std;
enum class Keys
{
    NOSET,
 
    LEFT = 75,
    RIGHT = 77,
    TOP = 72,
    DOWN = 80,
    ESC = 27,
    SPACE = 32,
    ENTER = 13,
 
};
void main()
{
    while(true)
    {
        if(_kbhit()) // слушатель нажатия на клаву
        {
            switch(static_cast<Keys>(_getch())) // ждёт нажатия на клаву без Enter после этого
            {
                case Keys::TOP: //вверх
                    cout << "Up" << endl;
                    break;
                case Keys::DOWN: //вниз
                    cout << "Down" << endl;
                    break;
                case Keys::LEFT: //влево 
                    cout << "left" << endl;
                    break;
                case Keys::RIGHT: //вправо
                    cout << "Right" << endl;
                    break;
                case Keys::ESC: //вправо
                    exit(0);
                    break;
            }           
        }       
    }   
}
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
23.07.2015, 17:58
Все почему-то сразу решили, что ТС пишет под win...
0
 Аватар для Andrey040601
5 / 5 / 3
Регистрация: 13.07.2014
Сообщений: 129
23.07.2015, 18:23  [ТС]
Спасибо, разобрался! Но что-то с движением тяжко. Я за поле взял двумерный массив, который заполнен точками. А в середине три нуля, это собственно змейка. Передвижение осуществляется смещением этих нулей на какое-то расстояние, как сместить? Если еще учесть, что нули будут добавляться. Что-то не выходит: то вообще не двигается, то одна часть змейки в начале поля, а другая в конце.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.07.2015, 18:23
Помогаю со студенческими работами здесь

Реализовать движение змейки
Помогите сделать курсовую из turbo pascal в ABC! uses crt,graph; {подключаем модули Crt и Graph} type Tsnake = record {объявляем...

Как происходит движение змейки?
Подскажите пожалуйста,как происходит движение змейки? Вот она съедает кубик,и я делаю picturebox1.weidth = 16 но как сделать что она не...

Движение змейки - разобрать код
Доброе время суток. Есть задание написать змейку, которая ползает по экрану. Искал подобные темы, нашел кучу игр &quot;Змейка&quot;, где...

Реализация ожидания ввода
#include&lt;stdio.h&gt; int main (void) { float kat_1 = 17850; float kat_2 = 23900; float kat_3 = 29750; float kat_4...

Scanner без задержки
Я, если честно, хреновый пользователь jav'ой, но кое-что знаю. Так вот: когда мы пишем стандартный sc.nextInt() (пусть int) всё...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru