forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=48)
-   -   нажатие кнопок подряд (http://forum.boolean.name/showthread.php?t=7870)

temned 20.02.2009 13:45

нажатие кнопок подряд
 
Как проверить нажатие несколько кнопок подряд напримеР?
К примеру у меня есть определенная последовательнос ть -987, как сделать так, чтобы если вводишь ее - то происходило действие.
Пытался что-то типа ифов:
if key = KE_KEY8 then
PHP код:

begin
**задержка
 
if key KE_KEY7 then
**задержка
begin 


Phantom 20.02.2009 13:58

Ответ: нажатие кнопок подряд
 
Гы. Делал такое. Выглядело как аццкий быдлокод :-D До сих пор чувствую, что можно проще как-то. Я только в java делал и использовал switch, в паскале его нет, придётся делать при помощи "else if".

temned 20.02.2009 19:12

Ответ: нажатие кнопок подряд
 
Если не трудно дай код операции, просто у меня што-то не полушается

Phantom 21.02.2009 03:40

Ответ: нажатие кнопок подряд
 
Блин. Кода не осталось. Делай так. Создавай числовую переменную, например, 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; (или как там в паскале?). В итоге у тебя при запуске программы будет выполняться цикл и ждать, когда ты введёшь код, как только ты его введёшь, из цикла выкинет и будет выполняться любой код, который находится за циклом. Вроде правильно всё написал.

Piligrim 21.02.2009 11:52

Ответ: нажатие кнопок подряд
 
Если нажатия должны произойти в основном цикле, как секретный код, то можно просто писать нажатые клавиши в строку и сравнивать с нужной последовательностью. Например так
PHP код:

:= IntegerToString(key);
:= Length(s);
:= Copy(sl-3l); //отрезаем последние три клавиши.
if s='987' then //нажимали, то что нужно 


Phantom 21.02.2009 12:19

Ответ: нажатие кнопок подряд
 
Во я дурак :-D

impersonalis 21.02.2009 21:49

Ответ: нажатие кнопок подряд
 
Ну вы блин даёте

Phantom 21.02.2009 22:30

Ответ: нажатие кнопок подряд
 
impersonalis, ты знаешь ещё более короткий и рациональный способ? О_о Поделись =)

impersonalis 22.02.2009 00:22

Ответ: нажатие кнопок подряд
 
Нет, я делаю буфер длиной в кодовое слово.
Перед заполнении очредного байта содержимое буфера претрепевате сдвиг в сторну уменьшения индекса:
например, кодое слово WOW
создаём буфер на 3 элемента,
доупстим поток сообщений от ус-ва ввода такой: WO1GHWOWW
буфер будет выглядеть так (изначально буфер забит нулями или иными неанализируемымыи байтами-маркёрами, доупстим "*"):
***
**W
*WO
WO1
O1G
1GH
GHW
HWO
WOW тут произойдёт срабатывание
OWW

Phantom 22.02.2009 00:50

Ответ: нажатие кнопок подряд
 
Хм... Очень интересно... А что это за буфер такой? В принципе можно это и со строкой сделать.

impersonalis 22.02.2009 01:29

Ответ: нажатие кнопок подряд
 
буфер это алгоритмическая абстракция, харакетризующая лишь функциональность объекта, а не его реализацию. В принципе я описал алгоритм pilgrim-а, но для случая непрерывного потока с минимальным расходом памяти.

Piligrim 22.02.2009 12:29

Ответ: нажатие кнопок подряд
 
Цитата:

В принципе я описал алгоритм pilgrim-а, но для случая непрерывного потока с минимальным расходом памяти.
Спорный вопрос, если иметь в виду МР. Он не поддерживает байтовые переменные. Значит элемент массива будет integer = 4 байта. А по другому буфер реализовать сложно.

impersonalis 22.02.2009 16:38

Ответ: нажатие кнопок подряд
 
у тебя строка - контейнер байтов. С методами добавления элементов - перевыделния памяти (сложно, долго, нерационально). В то время как размер её не может превышать кодовго слова.
Поправь, если ошибаюсь.

HolyDel 22.02.2009 17:07

Ответ: нажатие кнопок подряд
 
обработка строки будет в главном цикле.
перевыделение памяти (несколько байт) за один игровой цикл - не слишком накладно, имхо.

impersonalis 22.02.2009 19:59

Ответ: нажатие кнопок подряд
 
Хорошо, а как применять этот алгоритм для обработки потока?
В данном услучае алгоритм со строкой заточен на введние 3х символов, после которых цикл ввода завершён с одним из условий.
А что если ввод осуществляется постоянно? например как читы в ГТА3


Часовой пояс GMT +4, время: 12:35.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot