|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Лабораторная работа №16. Головоломка 2Лабораторная работа №16. Головоломка 2 Цель работы - создать компьютерную версию головоломки: из изображенных пяти сброшенных флажков установить все. Но при выборе одного флажка меняется состояние двух следующих. Рис. 16.1 Решение Создать программу, выполняющую следующие действия: 1. После запуска программы в окне изображаются пять сброшенных флажков. 2. Щелкать разрешено только на сброшенных флажках. Щелчок на установленном флажке не действует. 3. При установке какого-то флажка меняется состояние двух следующих флажков. При этом сброшенные флажки устанавливаются, а установленные - сбрасываются. 4. Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка. Описание плана разработки программы 1. Открыть новый проект. 2. Разместить на форме экземпляры компонентов: список флажков CheckBox, надпись Label. 3. Выполнить следующие действия:
Таблица 16.1
4. Сохраните проект, запустите и протестируйте его. Листинг подпрограммы procedure TForml.FormCreate (Sender: TObject); begin s := False; end; procedure TForml.CheckBoxlClick (Sender: TObject); var Index, i, num : Integer; e: Boolean; begin if s then Exit; {Если программа снова вызовет процедуру обработки, будет выполнен оператор Exit - немедленный выход из процедуры} s := True; for Index: = 0 to 4 do {Оператор break прерывает выполнение цикла} if Sender = Controls[i] then break; {Определяется, какой флажок был переключен} {Когда выполнение цикла завершается, значение переменной Index соответствует переключенному флажку} {Если значение свойства Checked (Установлен) равно False (Нет), флажок сброшен, а если True (Да) - установлен. Номер флажка в массиве определяется переменной Index} if not (Controls[Index] as TCheckBox).Checked then (Controls[Index] as TCheckBox).Checked := True {Условие выполнено, если флажок сейчас сброшен, т.е. до щелчка он был установлен} else {Программирование изменения состояния "дополнительных флажков". Текущий флажок уже переключен} begin num := Index + l; {Переключение двух следующих флажков} if Index = 4 then num := 0; {Изменение состояния нулевого флажка} { Состояние флажка надо поменять на противоположное} (Controls[num] as TCheckBox).Checked := not (Controls[num] as CheckBox).Checked; {Выполнение проверки на выход за пределы массива} num := num + l; if Index = 3 then num := 0; (Controls[num] as TCheckBox).Checked := not (Controls[num] as CheckBox).Checked; end; e := True; {Головоломка решена, если установлены все пять флажков} for i := 0 to 4 do e := e and (Controls[i] as TCheckBox).Checked; { После цикла значение останется равным True, если все флажки установлены} if e then { Головоломка решена} for i := 0 to 4 do begin (Controls[i] as TCheckBox).Caption := 'Победа!'; (Controls[i] as TCheckBox).Enabled := False; {Отключение флажков} end; s := False; end;
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|