Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 16.08.2021
Сообщений: 17

Управление змейкой

21.12.2021, 17:29. Показов 825. Ответов 9
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Как реализовать управление персонажем (например, змейкой) в консоли? Нужно ли это делать в отдельном потоке, или как-то через дельтатайм? Или нужно использовать и то, и другое? Где можно об этом почитать или увидеть какие-то примеры? Интересует именно момент со считыванием клавиш при работающей программе.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.12.2021, 17:29
Ответы с готовыми решениями:

Управление змейкой
#include <conio.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <graphics.h> #define N 30 #define M 20 ...

Сортировка змейкой
И снова прошу помочь с сортировкой).Я уже 2-ой день голову ломаю,но не могу написать программу которая отсортирует динамическую матрицу...

Заполнение змейкой
заполнение матрицы по диагонали змейкой по принципу 1 3 4 10 2 5 9 11 6 8 12 15 7 13 14 16. Программа работает при вводе данных с...

9
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
21.12.2021, 17:49
BlC, тебе под винду?
0
0 / 0 / 0
Регистрация: 16.08.2021
Сообщений: 17
21.12.2021, 17:54  [ТС]
Да, в консоли аркаду пытаюсь сделать
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
21.12.2021, 17:59
Тогда смотри консольное API Windows(и для "рисования" оно будет эффективнее).
https://docs.microsoft.com/en-... nsoleinput
Там в конце ссылка на пример есть.

Не по теме:

А вообще не нужно такие игры в консоли делать. Она для текстового ввода/вывода.

1
0 / 0 / 0
Регистрация: 16.08.2021
Сообщений: 17
21.12.2021, 18:08  [ТС]
В качестве обучения вроде бы норм, почему нет? С графикой работать — это ещё несколько месяцев читать только про графическое апи, векторную математику и прочие связанные вещи... Для первой проги, где знакомишься с основами не слишком подходит же?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
21.12.2021, 18:14
Цитата Сообщение от BlC Посмотреть сообщение
Для первой проги, где знакомишься с основами не слишком подходит же?
Трудно сказать. Знакомится с основами языка(и программирования) лучше на решении других задач.
Хотя, есть люди, которые сразу на Unreal Engine прыгают...

Да, кстати, для неблокирующего чтения тебе понадобится функция PeekConsoleInput.
ReadConsoleInput блокирует. Или предварительно запрашивай количество сообщений(функцией GetNumberOfConsoleInputEvents) и только если они есть, читай.
1
0 / 0 / 0
Регистрация: 16.08.2021
Сообщений: 17
21.12.2021, 18:20  [ТС]
Благодарю.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
21.12.2021, 18:43
Цитата Сообщение от BlC Посмотреть сообщение
С графикой работать — это ещё несколько месяцев читать только про графическое апи, векторную математику и прочие связанные вещи...
Берите готовый фреймворк, там и без векторной математики неплохо. Вот примерчик.
0
0 / 0 / 0
Регистрация: 16.08.2021
Сообщений: 17
24.12.2021, 17:05  [ТС]
Странно, что никто не предложил через _kbhit() + _getch() из <conio.h> сделать. Простейшая и удобнейшая реализация.

Добавлено через 4 минуты
Нашёл в интернете спустя некоторое время.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
Sleep(sleep_time); // задержка потока программы на заданный ранее интервал
 
        if (_kbhit()) // проверяем, была ли нажата какая-либо клавиша и запускаем её обработку в случае ИСТИНЫ
        {
            int k = _getch(); // считываем код клавиши из буфера
            if (k == 0 || k == 224) // если первый код - вспомогательный, считываем второй код
                k = _getch();
            switch (k) // пропускаем код нажатой клавиши внутрь оператора выбора
            {
            case 80: // если была нажата клавиша вниз
                                    someFunc(); // ваш код
                break;
 
...
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
25.12.2021, 16:09
Цитата Сообщение от BlC Посмотреть сообщение
В качестве обучения вроде бы норм, почему нет?
Я за написание очень маленьких игр в качестве обучающей практики программирования, но не нужно только на играх зацикливаться. Надо чередовать: что-то с GUI писать, что-то с базами данных, что-то с парсингом XML/JSON из сети, простые задачки порешать на https://www.codewars.com/, что-то клиет-серверное на сокетах, какие-то графики с таблицами, unit-тесты пописать и т.д. В качестве GUI фреймворка лучше взять Qt, потому что он самый популярный и по нему больше всего вакансий. Очень хорошие уроки по введению в Qt: https://zetcode.com/gui/qt5/ Я даже находил перевод этих уроков. В конце есть туториалы по играм: Snake game и Breakout game Для мотивации, какие маленькие игры можно ещё написать: Несколько небольших игрушек Я сам сейчас тоже пишу маленькие игры, потому что очень нравится процесс. Давно хочу написать змейку по сети на сокетах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.12.2021, 16:09
Помогаю со студенческими работами здесь

Матрица змейкой
Нужно вывести матрицу змейкой, но выводит по строчкам, что нужно исправить? // Матрица змейкой #include &quot;stdafx.h&quot; #include...

Матрица змейкой
Пытаюсь написать решение для задачи, чтобы выводила матрицу в таком виде

Заполнение матрицы змейкой
Подскажите как мне изменить код #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int main() { int n; ...

Заполнение матрицы змейкой
Дано натуральное N (1&lt;=N&lt;=10). Заполнить матрицу размера N*N целыми числами 0, 1, 2, 3, …, N^2–1 Как сделать, что бы матрицу заполнило...

Заполнение матрицы змейкой
Дано натуральное N (1&lt;=N&lt;=10). Заполнить матрицу размера N*N целыми числами 0, 1, 2, 3, …, N^2–1 в соответствии со схемой расположения. Как...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru