Помощь - Поиск - Пользователи - Календарь
Полная версия: Угадай число
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Nataly
Нужна ваша помощь! Программа «Угадай число» делает один проход и дальше не работает. Пытаюсь зациклить, но выводится ошибка. Как правильно оформить это все в цикл?


procedure TForm1.FormActivate(Sender: TObject);
begin
MEdit.SetFocus;
Label1.Caption:='Сыграем в игру?'
end;


procedure TForm1.BbRunClick(Sender: TObject);
begin
a:=InputBox('Диапазон чисел’,'Введите количество чисел','');
n:=StrToInt(a);
n:=random(n+1);
Label1.Caption:='Я запомнил число! Сумеешь угадать?';
MEdit.SetFocus;
BbRun.Visible:=False;
BbResult.Visible:=True;
end;

procedure TForm1.BbResultClick(Sender: TObject);
begin
if MEdit.Text='' then exit;
i:=StrToInt(Trim(MEdit.Text));
if i>n then
begin
Label1.Caption:='Введенное число больше моего! Попробуй еще раз!';
MEdit.Clear;
MEdit.SetFocus;
end;
else
if i<n then
begin
Label1.Caption:='Введенное число меньше моего! Попробуй еще раз!';
MEdit.Clear;
MEdit.SetFocus;
end
else
begin
Label1.Caption:='Поздравляю!!!! Ты угадал!!!';
b:=InputBox('Сообщение',' Повторить?','');
if InputBox.Text:='äà' then
begin
bbResult.Visible:=False;
bbRun.Visible:=True;
end
else
Form1.Close;
end;
end;

procedure TForm1.BbCloseClick(Sender: TObject);
begin
Form1.Close;
end;
end.

Reptile
Не пойму что нужно зацыклить, ведь сравнение должно происходить каждый раз после нажатия на кнопку BbRun ?Что именно пытаешся зацыклить?
Nataly
Сравнение то поисходит, только всего лишь один раз.. sad.gif
выдаст "больше" или "меньше" и дальше не идет.. sad.gif
Michael_Rybak
Выложи весь проект.
мисс_граффити
Оно ведь при введении 1 числа и должно 1 раз проверяться.
То есть человек ввел предположение, нажал на кнопку и получил результат....
Nataly
Нет, прога должна продолжать работу, пока пользователь не отгадает загаданное число.. не факт, что он сделает это спервого раза..
Гость
Что делать, если размер загружаемых файлов превышает допустимое значение?
volvo
Запаковать проект в архив (без EXE-шника, разумеется), и присоединить...
Nataly
Он у меня 6кб весит, но все равно вылазиет ошибка!
Pautina
Посмотрите, плиз!
volvo
У тебя просто не генерируется случайное число (точнее, все время N = 0), поэтому программа тебе постоянно выдает "Введенное число больше моего! Попробуй еще раз!", правда?

Попробуй добавить Randomize:
a:=InputBox('Диапазон чисел','Введите количество чисел','');
randomize;
n:=random(StrToInt(a)+1);
, тогда N будет отличаться от нуля...
Pautina
Спасибо огромное!!! РАБОТАЕТ!!
Pautina
Здравствуйте, снова нужна ваша помощь! Необходимо модифицировать прогу. В местах, отмеченных !!!, необходимо поставить условие, что если юзер правильно нажимает на кнопку, текст окрашивается в зеленый цвет, если ошибка – в красный! Подскажите, пожалуйста, как это можно осуществить! Заранее огромное спасибо!
WALdemar
нужно просто добавить в начале каждого условия
label1.Color:=clred
- это для неправильного и
label1.Color:=clgreen
для верного решения.
И не забыть указать в FormActivate
Label1.caption:=clblack
Pautina
не получается.. к примеру прога выдает "введенное чсло больше", тогда юзер должен нажать на одну из кнопочек > или <. Если нажал правильно - текст выделяется зеленым цветом, неправильно - красным.
Возникает вопрос: как я могу засунуть одну процедуру(нажатие клавиши <,>) в другую?
мисс_граффити
нажатие клавиши - это ведь обработчик события, так? может, проще в него засунуть окрашивание?
прямо при выводе проверять на правильность и окрашивать...
Pautina
проблема в том, как проверить эту правильность.. sad.gif
мисс_граффити
так, я запуталась.
что юзер должен обозначать нажатием на кнопку со знаками больше/меньше?
то есть когда надо нажимать на какую и какое нажатие считается правильным?
WALdemar
а зачем вообще эти кнопки - Больше и Меньше? По логике, число нужно угадывать так:
Например, загадано 63, диапазон от 1 до 100.

50? -нет, больше
75? -нет, меньше
63? -да, правильно.
Я такую лабу еще на первом курсе делал, по математической логике. вот ее маленький кусок. Вам это надо?

n:=(random(100));
writeln(n);
writeln('vvedite chislo ot 1 do 100');
i:=1;
repeat
begin
writeln('popitka ',i);
inc(i);
readln(chislo);
if chislo=n then
writeln('vi ugadali')
else
if chislo>n then
writeln('>')
else
writeln('<');
end;
until chislo=n;

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