Помощь - Поиск - Пользователи - Календарь
Полная версия: Ожидание
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Venik
И снова здрасьте! Вообщем, выполняется операция. Repeat...until. И мне нужно, чтобы она выполнялась до тех пор, пока пользователь не нажмёт какую-нибудь клавишу.
И что получится? Напишите плиз. Пробовал разные варианты:
Repeat
...
Until AnyKey;
и тому подобное, но ничего не выходит. Скажите, какой код надо написать. Заранее спасибо.
volvo
Repeat
...
Until KeyPressed;

тебе поможет...

Только перед выходом не забудь очистить буфер клавиатуры:
While KeyPressed Do ReadKey;
мисс_граффити
В модуле crt есть ф-ция KeyPressed. Думаю, она Вас и интересует...

**опоздала. а как удалить сообщение?
Гость
Спасибо, всё получилось!
Гость
Ах, да и есшо:
Вот у меня выводится текст постепенно (тобишь медленно, по буквам). Необходимо, чтобы когда пользователь нажмёт любую клавишу, текст перестал выводится (аналог CTRL+BRAKE) и вывелся сразу весь, чтобы можно было приступить к другим операциям.
Ну вот, например заставка в играх идёт, вы нажимаете Пробел, заставка выключается и появляется главное меню. Вот также, но только с текстом.
Вариант увелечение вывода скорости текста (путём уменьшения Delay) не предлагать.
Ну блин, вообщем выводится текст. Нажимаю пробел и выводится сразу весь текст. Разом.
APAL
Пиши свою функцию/процедуру.
volvo
Цитата(Гость @ 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
Цитата(Гость @ 17.04.2006 22:07)
А попроще нельзя?

lol.gif lol.gif lol.gif Это ты меня спрашиваешь про ПОПРОЩЕ??? Я тебя должен спросить, тебе не кажется? То, что ты делаешь в сотнях строк, у меня реализовано в двух десятках...

Цитата(Гость @ 17.04.2006 22:07)
Вот код ИИ:

blink.gif Код ЧЕГО??? blink.gif Ты вообще в курсе, что такое ИИ? ЭТО по-твоему ИИ? Ну, тогда, извини, что помешал тебе создавать Искуственный Интеллект своими советами... Больше мешать не буду. Можешь продолжать спокойно.
klem4
извиняюсь за оффтоп ...

Это самый крутой код, который я видел в своей жизни. Долго писал ?))))

Хотя вообще-то да, искуственный интеллект - это вам не шутки lol.gif lol.gif lol.gif
good.gif
Lapp
В Юмор! lol.gif
FreeMan
Вся тайна ИИ в иероглифах. Вольво, ты не запутался в этом сложнейшем коде? ты мог ошибится в 56 строчке. Помоему, это очень оптимальный вариант, надо провети замеры скорости, часто большая программа выигрывает по скорости.
Гость, а попробуй графику рисовать, по точкам лучше всего. Не верь им, они тебя запугивают, продолжай в том же духе!!! Не используй сложных алгоритмов.
volvo
Цитата(FreeMan @ 18.04.2006 17:06)
а попробуй графику рисовать, по точкам лучше всего.
Главное - после вывода каждой точки не забыть Delay(1) поставить... rolleyes.gif
GoodWind
и выводить обязательно через баб-ягу - не верь что прямой вывод в видеопамять быстрее чем через прерывания.
Гость
А чё такое-то? Я просто пишу Искуственный Интеллект.
Эта программа состоит из 3 подпрограмм:
1)Массив, в котором содержаться условия;
2)Рандомизатор условий, в последствии выводит их на эран;
3)"Отвечальщик" на условия.
Ну и мелкая подподпрограмма, связывающая всё это воедино. Программа носит кодовое имя AA-v1.0FR. Принцип действия:
В массиве содержаться некие условия. Рандомизатор берёт эти условия и "перемешивает" их. Далее выводит одно из них (сами понимаете, в случайном порядке) на экран. Далее, другая подпрограмма анализирует это условие и ищет его в Базе Данных ответов. Как только она находит сопоставление, ответ сразу же выводится на экран. Пример:
Массив=Словарь, чтобы было понятнее.
В словаре есть 3 слова: препятствие, фотоаппарат, обрыв. Эти слова перемешивается и из них выбирается любое. Выбрано препятствие. На него ищется ответ и выводится на экран. Ответом является "Обойти препятствие". Т.е. грубо говоря вся работа программы сводится в одну строчку:
Условие=препятствие. Ответ на условие=обойти.
Вот собственно и всё.
Иероглифы-буквы. При Copy-Paste они превратились в кракозябру.
Delay(1) у меня стоит, так как я задолбался по 10 раз читать одно и тоже (что занимает довольно длительное вермя при выводе), чтобы протестировать 1 функцию. Поэтому я и обратился к вам за помощью в создании своеобразного "прерывания" вывода текста и вывода его целиком - сразу после нажатия люой клавиши. Стандартное значение Delay для постепенного вывода текста - 100. Чё вы сразу налетели-то?
Лучше посоветуйте, какие поправки в коде надо сделать!
Гость
Только без шуток! sad.gif
GoodWind
примерно так (компилятора на работе нет):
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;

можно конечно и оптимизировать...
Гость
А куда здесь текст вставлять?
GoodWind
блин, ты процедурами пользоваться умеешь ? а типы различаешь ? вот текст - это сторока или целое число ?
DelayedOutput('Hello World!',100);

вывод строки "Hello World!" c задержкой между в 100 мс. между выводом символов.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.