|
FAQ Часто задаваемые вопросы |
20.02.2009, 13:45
|
#1
|
Знающий
Регистрация: 29.07.2008
Адрес: Россия,Саратов
Сообщений: 206
Написано 22 полезных сообщений (для 33 пользователей)
|
нажатие кнопок подряд
Как проверить нажатие несколько кнопок подряд напримеР?
К примеру у меня есть определенная последовательнос ть -987, как сделать так, чтобы если вводишь ее - то происходило действие.
Пытался что-то типа ифов:
if key = KE_KEY8 then
begin **задержка if key = KE_KEY7 then **задержка begin
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
20.02.2009, 13:58
|
#2
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: нажатие кнопок подряд
Гы. Делал такое. Выглядело как аццкий быдлокод До сих пор чувствую, что можно проще как-то. Я только в java делал и использовал switch, в паскале его нет, придётся делать при помощи "else if".
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
20.02.2009, 19:12
|
#3
|
Знающий
Регистрация: 29.07.2008
Адрес: Россия,Саратов
Сообщений: 206
Написано 22 полезных сообщений (для 33 пользователей)
|
Ответ: нажатие кнопок подряд
Если не трудно дай код операции, просто у меня што-то не полушается
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.02.2009, 03:40
|
#4
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: нажатие кнопок подряд
Блин. Кода не осталось. Делай так. Создавай числовую переменную, например, i:=1; Открывай цикл while 1==1 , в конце которого Delay(50); Внутри цикла куча if i==1 ... else if i==2 ... else if i==3 ... И так столько раз, сколько цифр в проверяемом коде, каждый раз пиши i на один больше, чем раньше. Потом в первом условии проверяй нажата ли первая клавиша кода, если нажата, то i:=i+1; , если не нажата, то i:=1; , во втором условии проверяй нажата ли вторая клавиша кода, если нажата, то снова i:=i+1; , если не нажата, то i:=1; . Потом после последнего if пишешь ещё один и там уже код, который нужно выполнить, например, просто break; (или как там в паскале?). В итоге у тебя при запуске программы будет выполняться цикл и ждать, когда ты введёшь код, как только ты его введёшь, из цикла выкинет и будет выполняться любой код, который находится за циклом. Вроде правильно всё написал.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.02.2009, 11:52
|
#5
|
Оптимист
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений (для 259 пользователей)
|
Ответ: нажатие кнопок подряд
Если нажатия должны произойти в основном цикле, как секретный код, то можно просто писать нажатые клавиши в строку и сравнивать с нужной последовательностью. Например так
s := s + IntegerToString(key); l := Length(s); s := Copy(s, l-3, l); //отрезаем последние три клавиши. if s='987' then //нажимали, то что нужно
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Piligrim за это полезное сообщение:
|
|
21.02.2009, 12:19
|
#6
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: нажатие кнопок подряд
Во я дурак
|
(Offline)
|
|
21.02.2009, 21:49
|
#7
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: нажатие кнопок подряд
Ну вы блин даёте
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
21.02.2009, 22:30
|
#8
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: нажатие кнопок подряд
impersonalis, ты знаешь ещё более короткий и рациональный способ? О_о Поделись =)
|
(Offline)
|
|
22.02.2009, 00:22
|
#9
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: нажатие кнопок подряд
Нет, я делаю буфер длиной в кодовое слово.
Перед заполнении очредного байта содержимое буфера претрепевате сдвиг в сторну уменьшения индекса:
например, кодое слово WOW
создаём буфер на 3 элемента,
доупстим поток сообщений от ус-ва ввода такой: WO1GHWOWW
буфер будет выглядеть так (изначально буфер забит нулями или иными неанализируемымыи байтами-маркёрами, доупстим "*"):
***
**W
*WO
WO1
O1G
1GH
GHW
HWO
WOW тут произойдёт срабатывание
OWW
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
|
|
22.02.2009, 00:50
|
#10
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: нажатие кнопок подряд
Хм... Очень интересно... А что это за буфер такой? В принципе можно это и со строкой сделать.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.02.2009, 01:29
|
#11
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: нажатие кнопок подряд
буфер это алгоритмическая абстракция, харакетризующая лишь функциональность объекта, а не его реализацию. В принципе я описал алгоритм pilgrim-а, но для случая непрерывного потока с минимальным расходом памяти.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.02.2009, 12:29
|
#12
|
Оптимист
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений (для 259 пользователей)
|
Ответ: нажатие кнопок подряд
В принципе я описал алгоритм pilgrim-а, но для случая непрерывного потока с минимальным расходом памяти.
|
Спорный вопрос, если иметь в виду МР. Он не поддерживает байтовые переменные. Значит элемент массива будет integer = 4 байта. А по другому буфер реализовать сложно.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.02.2009, 16:38
|
#13
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: нажатие кнопок подряд
у тебя строка - контейнер байтов. С методами добавления элементов - перевыделния памяти (сложно, долго, нерационально). В то время как размер её не может превышать кодовго слова.
Поправь, если ошибаюсь.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.02.2009, 17:07
|
#14
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: нажатие кнопок подряд
обработка строки будет в главном цикле.
перевыделение памяти (несколько байт) за один игровой цикл - не слишком накладно, имхо.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.02.2009, 19:59
|
#15
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: нажатие кнопок подряд
Хорошо, а как применять этот алгоритм для обработки потока?
В данном услучае алгоритм со строкой заточен на введние 3х символов, после которых цикл ввода завершён с одним из условий.
А что если ввод осуществляется постоянно? например как читы в ГТА3
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:21.
|