Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.64
leviaphan
4 / 4 / 0
Регистрация: 18.08.2008
Сообщений: 73
#1

Пишу игру "змейка". Есть вопрос по ней - C++

15.10.2008, 20:11. Просмотров 3059. Ответов 5
Метки нет (Все метки)

Я сейчас пишу игру "змейка". (в консоли), но возникла одна проблема. Направление движения от пользователя я принимаю так: раз в секунду запускаю getch(). Если пользователь ничего не вводит, тогда вся программа останавливается, т. е. операторы, идущие дальше, не выполняются, пока пользоваеть что-либо не вводит. Если так и оставить, игрок сможет мухлевать: не нажимать никакую клавишу и тем самым приостановливать ход исполнения игры. Как этого избежать? Может, есть какой-то другой оператор, кроме getch() для приёма данных от пользователя?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2008, 20:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пишу игру "змейка". Есть вопрос по ней (C++):

Небольшой пример. Игра "змейка" - как в ней делают препятствия - C++
Здравствуйте сегодня случайно увидел старенькую игру "змейка" и меня заинтересовало как именно они делают там препятствия чтобы их нужно...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно". Я так...

Ввести с клавиатуры строку, заменить в ней все буква "а" на букву "b" - C++
Здравствуйте) Вот возникла такая проблема.... не умею работать с указателями еще(( Помогите написать задачку: "используя указатели,...

Дана строка, в котором есть слово "да" или слово "нет". Если в нем есть слово "нет", то удалить его - C++
Дана строка, в котором есть слово "да" или слово "нет". Если в нем есть слово "нет", то удалить его или получить строку в слова "да" и...

Вопрос "хорошего тона", "стиля" в программировании - правильное использование #include - C++
Привет. Вступление. Имею небольшой опыт в программировании. Сейчас мне дали разобрать один проект, как пример работы HGE и Box2D. ...

Как сделать, так чтобы i и j можно было вводить самому "i" И "j" в цикле, есть программа - C++
#include <iostream> using namespace std; int main() {int a=0,b=0; int i=0; cout<<"Vvedite i="<<endl; cin>>i; ...

5
Varlock
365 / 68 / 2
Регистрация: 25.09.2008
Сообщений: 402
16.10.2008, 14:53 #2
твоя ошибка в том, что ты пытаешься использовать однопоточный режим, ИМХО в одном потоке красиво реализовать подобное приложение нельзя+)
создай два потока, один поток для отображения того что делает змейка, второй для приема информации от пользователя+)
(как конкретно это реализуется зависит от ОС...)
0
Lurker
6129 / 1887 / 13
Регистрация: 07.07.2008
Сообщений: 10,443
16.10.2008, 15:46 #3
Можно в однопоточном. Надопросто проверять нажата-ли клавиша. А как конкретно это сделать не скажу потому что не помню.
0
Varlock
365 / 68 / 2
Регистрация: 25.09.2008
Сообщений: 402
16.10.2008, 17:04 #4
могу ошибаться, по моему можно проверить, нажата ли клавиша, считав информацию из входного потока in (уже непомню точно как это должно выглядеть, т.к. сями давно не занимался...+) помниться что там есть потоки in и out, которые поидее могут помочь с этим+) )
но имхо 2 потока всётки красивее будет+) если считывать значение клавиши в том же потоке, ИМХО, больше места для глюков будет...хотя то наверно дело личных предпочтений+)) мне было бы проще в соседнем потоке всё предусмотреть, и уже в основной выдать, должна ли змейка поворачивать+)
0
leviaphan
4 / 4 / 0
Регистрация: 18.08.2008
Сообщений: 73
16.10.2008, 22:05  [ТС] #5
а где можно почитать про многопочное программирование? просто никогда не имел с ним дело.
0
XuTPbIu_MuHTAu
Эксперт С++
2226 / 741 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
16.10.2008, 22:22 #6
leviaphan,почитать можно в вебе. Однако,многопоточное программирование есть программирование с тесным взаимодействием с операционкой. Если вы ниразу не программировали именно под вашу ось (буд то винда или никс) могут возникнуть сложности. Другое дело,что совсем не обязательно делать все так мрачно.
C++
1
2
3
4
5
while ( gameon )  {
if(kbhit() ) // нажата кнопка!обрабатываем пользовательский ввод.
// Здесь обрабатываем игровую логику. Скажем,передвигаем змейку каждые N милисекунд.
 
};
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2008, 22:22
Привет! Вот еще темы с ответами:

Для массива из 10 чисел проверить, есть ли в нем два одинаковых числа и напечатать "да" или "нет" - C++
void check_same(const int* a) { for (const int* p = a; p < a + 9; p++) for (const int* q = p+1; q < a + 10; q++) ...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

"Змейка": при нажатии клавиши игра просто останавливается - C++
#include<iostream> #include<windows.h> #include<conio.h> using namespace std; const int Y = 20, X = 50; enum DIR{UP, DOWN, LEFT,...

Загрузка информации из файла (система рекордов в игре "Змейка") - C++
Не получается сделать считывание из файла и загрузки рекорда,помогите.Пытался сам,но всё запорол#include <glut.h> #include <iostream> ...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
16.10.2008, 22:22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru