И снова здрасьте! Вообщем, выполняется операция. Repeat...until. И мне нужно, чтобы она выполнялась до тех пор, пока пользователь не нажмёт какую-нибудь клавишу. И что получится? Напишите плиз. Пробовал разные варианты: Repeat ... Until AnyKey; и тому подобное, но ничего не выходит. Скажите, какой код надо написать. Заранее спасибо.
volvo
17.04.2006 1:45
Repeat ... Until KeyPressed;
тебе поможет...
Только перед выходом не забудь очистить буфер клавиатуры:
While KeyPressed Do ReadKey;
мисс_граффити
17.04.2006 1:48
В модуле crt есть ф-ция KeyPressed. Думаю, она Вас и интересует...
**опоздала. а как удалить сообщение?
Гость
17.04.2006 2:13
Спасибо, всё получилось!
Гость
17.04.2006 2:20
Ах, да и есшо: Вот у меня выводится текст постепенно (тобишь медленно, по буквам). Необходимо, чтобы когда пользователь нажмёт любую клавишу, текст перестал выводится (аналог CTRL+BRAKE) и вывелся сразу весь, чтобы можно было приступить к другим операциям. Ну вот, например заставка в играх идёт, вы нажимаете Пробел, заставка выключается и появляется главное меню. Вот также, но только с текстом. Вариант увелечение вывода скорости текста (путём уменьшения Delay) не предлагать. Ну блин, вообщем выводится текст. Нажимаю пробел и выводится сразу весь текст. Разом.
APAL
17.04.2006 2:56
Пиши свою функцию/процедуру.
volvo
17.04.2006 3:15
Цитата(Гость @ 16.04.2006 22:20)
Вариант увелечение вывода скорости текста (путём уменьшения Delay) не предлагать.
Но совсем без Delay ты тоже не обойдешься. Я надеюсь, объяснять, почему - не нужно?
uses crt; const T = 50;
function get_char(var f: text): string; var ch: char; begin read(f, ch); if ch = #13 then begin read(f, ch); get_char := #13#10; end else get_char := ch; end;
var f: text; ch: char;
begin assign(f, 'aa.txt'); reset(f);
repeat if not eof(f) then begin write(get_char(f)); delay(T) end; until eof(f) or keypressed;
while keypressed do readkey;
while not eof(f) do write(get_char(f)); close(f); end.
В файле 'aa.txt' - текст, который будет печататься. Величину T подберешь экспериментально.
Строчки, после которых идёт Delay (1) - это постепенный вывод текста. Затем, где If C[ix] - это ответ на условия. Могу потом поконкретнее объяснить. Так вот. Мне нужно чтобы текст, который медленно выводится, при нажатии любой клавиши выводился сразу и у меня появлялось меню. Т.е. чтобы ты нажимаешь кнопку, текст перестаёт выводится, выводится сразу и появляется меню. Вот.
volvo
18.04.2006 4:10
Цитата(Гость @ 17.04.2006 22:07)
А попроще нельзя?
Это ты меня спрашиваешь про ПОПРОЩЕ??? Я тебя должен спросить, тебе не кажется? То, что ты делаешь в сотнях строк, у меня реализовано в двух десятках...
Цитата(Гость @ 17.04.2006 22:07)
Вот код ИИ:
Код ЧЕГО??? Ты вообще в курсе, что такое ИИ? ЭТО по-твоему ИИ? Ну, тогда, извини, что помешал тебе создавать Искуственный Интеллект своими советами... Больше мешать не буду. Можешь продолжать спокойно.
klem4
18.04.2006 11:14
извиняюсь за оффтоп ...
Это самый крутой код, который я видел в своей жизни. Долго писал ?))))
Хотя вообще-то да, искуственный интеллект - это вам не шутки
Lapp
18.04.2006 13:32
В Юмор!
FreeMan
18.04.2006 21:06
Вся тайна ИИ в иероглифах. Вольво, ты не запутался в этом сложнейшем коде? ты мог ошибится в 56 строчке. Помоему, это очень оптимальный вариант, надо провети замеры скорости, часто большая программа выигрывает по скорости. Гость, а попробуй графику рисовать, по точкам лучше всего. Не верь им, они тебя запугивают, продолжай в том же духе!!! Не используй сложных алгоритмов.
volvo
18.04.2006 21:10
Цитата(FreeMan @ 18.04.2006 17:06)
а попробуй графику рисовать, по точкам лучше всего.
Главное - после вывода каждой точки не забыть Delay(1) поставить...
GoodWind
18.04.2006 21:36
и выводить обязательно через баб-ягу - не верь что прямой вывод в видеопамять быстрее чем через прерывания.
Гость
19.04.2006 0:58
А чё такое-то? Я просто пишу Искуственный Интеллект. Эта программа состоит из 3 подпрограмм: 1)Массив, в котором содержаться условия; 2)Рандомизатор условий, в последствии выводит их на эран; 3)"Отвечальщик" на условия. Ну и мелкая подподпрограмма, связывающая всё это воедино. Программа носит кодовое имя AA-v1.0FR. Принцип действия: В массиве содержаться некие условия. Рандомизатор берёт эти условия и "перемешивает" их. Далее выводит одно из них (сами понимаете, в случайном порядке) на экран. Далее, другая подпрограмма анализирует это условие и ищет его в Базе Данных ответов. Как только она находит сопоставление, ответ сразу же выводится на экран. Пример: Массив=Словарь, чтобы было понятнее. В словаре есть 3 слова: препятствие, фотоаппарат, обрыв. Эти слова перемешивается и из них выбирается любое. Выбрано препятствие. На него ищется ответ и выводится на экран. Ответом является "Обойти препятствие". Т.е. грубо говоря вся работа программы сводится в одну строчку: Условие=препятствие. Ответ на условие=обойти. Вот собственно и всё. Иероглифы-буквы. При Copy-Paste они превратились в кракозябру. Delay(1) у меня стоит, так как я задолбался по 10 раз читать одно и тоже (что занимает довольно длительное вермя при выводе), чтобы протестировать 1 функцию. Поэтому я и обратился к вам за помощью в создании своеобразного "прерывания" вывода текста и вывода его целиком - сразу после нажатия люой клавиши. Стандартное значение Delay для постепенного вывода текста - 100. Чё вы сразу налетели-то? Лучше посоветуйте, какие поправки в коде надо сделать!
Гость
19.04.2006 0:58
Только без шуток!
GoodWind
19.04.2006 10:32
примерно так (компилятора на работе нет):
procedure DelayedOutput(str:string; delay_value:longint); var i:byte; begin repeat write(str[i]); inc(i); delay(delay_value); until (keypressed) or (i>length(str)); while i<=length(str) do begin write(str[i]); inc(i); end; end; end;
можно конечно и оптимизировать...
Гость
19.04.2006 21:44
А куда здесь текст вставлять?
GoodWind
20.04.2006 10:25
блин, ты процедурами пользоваться умеешь ? а типы различаешь ? вот текст - это сторока или целое число ?
DelayedOutput('Hello World!',100);
вывод строки "Hello World!" c задержкой между в 100 мс. между выводом символов.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.