нажатие кнопок подряд
Как проверить нажатие несколько кнопок подряд напримеР?
К примеру у меня есть определенная последовательнос ть -987, как сделать так, чтобы если вводишь ее - то происходило действие. Пытался что-то типа ифов: if key = KE_KEY8 then PHP код:
|
Ответ: нажатие кнопок подряд
Гы. Делал такое. Выглядело как аццкий быдлокод :-D До сих пор чувствую, что можно проще как-то. Я только в java делал и использовал switch, в паскале его нет, придётся делать при помощи "else if".
|
Ответ: нажатие кнопок подряд
Если не трудно дай код операции, просто у меня што-то не полушается
|
Ответ: нажатие кнопок подряд
Блин. Кода не осталось. Делай так. Создавай числовую переменную, например, 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; (или как там в паскале?). В итоге у тебя при запуске программы будет выполняться цикл и ждать, когда ты введёшь код, как только ты его введёшь, из цикла выкинет и будет выполняться любой код, который находится за циклом. Вроде правильно всё написал.
|
Ответ: нажатие кнопок подряд
Если нажатия должны произойти в основном цикле, как секретный код, то можно просто писать нажатые клавиши в строку и сравнивать с нужной последовательностью. Например так
PHP код:
|
Ответ: нажатие кнопок подряд
Во я дурак :-D
|
Ответ: нажатие кнопок подряд
Ну вы блин даёте
|
Ответ: нажатие кнопок подряд
impersonalis, ты знаешь ещё более короткий и рациональный способ? О_о Поделись =)
|
Ответ: нажатие кнопок подряд
Нет, я делаю буфер длиной в кодовое слово.
Перед заполнении очредного байта содержимое буфера претрепевате сдвиг в сторну уменьшения индекса: например, кодое слово WOW создаём буфер на 3 элемента, доупстим поток сообщений от ус-ва ввода такой: WO1GHWOWW буфер будет выглядеть так (изначально буфер забит нулями или иными неанализируемымыи байтами-маркёрами, доупстим "*"): *** **W *WO WO1 O1G 1GH GHW HWO WOW тут произойдёт срабатывание OWW |
Ответ: нажатие кнопок подряд
Хм... Очень интересно... А что это за буфер такой? В принципе можно это и со строкой сделать.
|
Ответ: нажатие кнопок подряд
буфер это алгоритмическая абстракция, харакетризующая лишь функциональность объекта, а не его реализацию. В принципе я описал алгоритм pilgrim-а, но для случая непрерывного потока с минимальным расходом памяти.
|
Ответ: нажатие кнопок подряд
Цитата:
|
Ответ: нажатие кнопок подряд
у тебя строка - контейнер байтов. С методами добавления элементов - перевыделния памяти (сложно, долго, нерационально). В то время как размер её не может превышать кодовго слова.
Поправь, если ошибаюсь. |
Ответ: нажатие кнопок подряд
обработка строки будет в главном цикле.
перевыделение памяти (несколько байт) за один игровой цикл - не слишком накладно, имхо. |
Ответ: нажатие кнопок подряд
Хорошо, а как применять этот алгоритм для обработки потока?
В данном услучае алгоритм со строкой заточен на введние 3х символов, после которых цикл ввода завершён с одним из условий. А что если ввод осуществляется постоянно? например как читы в ГТА3 |
Ответ: нажатие кнопок подряд
Стоп! Кто где завершен? Просто вставляем код в основной цикл обработки нажатий клавиш.
Если прошло условие, то делаем что надо, а иначе просто обрабатывает очередную нажатую клавишу. Под три символа заточен из условия автора темы, никто не мешает проверить и два с помощью if(s.endsWith("98"){ просто этой функции нет в МР, но ее можно легко написать |
Ответ: нажатие кнопок подряд
просто память хаваетцо и хаваетцо =\
а если пользователь килобайт текста натарабанит до контрольного слова? В остальном алгоритмы не отлчиаютцо. |
Ответ: нажатие кнопок подряд
На каждом цикле
Цитата:
|
Ответ: нажатие кнопок подряд
Такая мелкая тема заинтересовала местных гигантов программирования =) Круть =)
|
Ответ: нажатие кнопок подряд
можно по-извращатся и оптимизировать до максимума
расмотрим integer : abcd, то-есть в нём 4 байта клавишу телефона можно кодировать 1 байтом младший байт d не будем использовать (нужна комбинация из 3) потому d всегда равен 0 после нажатия клавиши мы смещяем этот integer в лево на байт пишем в c нашу текущую клавишу и потом проверяем весь integer с заранее подготовленым числом которое означает комбинацию после прохождения какого нибудь времени (300 мс) после последнего нажатия - можно обнулить наш integer чтобы комбинация не сработала без учёта времени между клавишами для комбинаций больше чем 4 клавиши надо что-то другое использовать |
Ответ: нажатие кнопок подряд
Если использовать только числовые клавиши 0-9, то хватит 4 байт на клавишу =) Значит в int можно впихнуть уже 8 символов =) А если больше, можно несколько переменных заюзать. Может либу написать? Lib_cheats =)
|
Ответ: нажатие кнопок подряд
протупил =(
тогда алгоритмы одинаковы |
Ответ: нажатие кнопок подряд
да просто можно сделать
s=0; repeat key:=getKeyPressed; if (s=0) and (key=KE_KEY1) then s:=1; if (s=1) and (key=KE_KEY2) then s:=2; if (s=2) and (key=KE_KEY3) then s:=3; until s=3; ...... Еще нада б добавить условие, что при нажатии др. кнопки s=0 |
Ответ: нажатие кнопок подряд
Я раньше тоже так делал, но потом тоже догадался всё в одну строку склеивать и потом уже сравнивать строки. Это более оптимальный вариант. Так что можно теперь смело вставлять в свои мидлеты т.н. "пасхальные яйца".
|
Ответ: нажатие кнопок подряд
Цитата:
|
Часовой пояс GMT +4, время: 17:49. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot