создать компьютерную версию головоломки: из
Цель работы - создать компьютерную версию головоломки: из изображенных пяти сброшенных флажков установить все. Но при выборе одного флажка меняется состояние двух следующих.
Создать программу, выполняющую следующие действия:
- После запуска программы в окне изображаются пять сброшенных флажков.
- Щелкать разрешено только на сброшенных флажках. Щелчок на установленном флажке не действует.
- При установке какого-то флажка меняется состояние двух следующих флажков. При этом сброшенные флажки устанавливаются, а установленные - сбрасываются.
- Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.
Описание плана разработки программы
1. Открыть новый проект.
2. Разместить на форме экземпляры компонентов: список флажков
CheckBox, надпись
Label.
3. Выполнить следующие действия:
Таблица 21.
Выделенный объект
|
Вкладка окна
Object Inspector
|
Имя свойства/
имя события
|
Действие
|
Form1
|
Properties
|
Caption
|
Установка имени формы «Все пять»
|
|
|
Events
|
OnCreate
|
Создать глобальную логическую переменную s. В то время, когда идет обработка события, переменная имеет значение True (да).
|
CheckBox1
(Вкладка Standard)
|
Properties
|
Caption
|
Задать значение «1».
|
Events
|
OnClick
|
Необходимо работать с флажками, как с массивом. Форма является контейнером для флажков. У объектов-контейнеров имеется свойство Controls (Элементы управления) – массив элементов управления, находящихся в данном контейнере: Controls [i] as TCheckBox.
|
Для создания еще пяти флажков можно использовать метод копирования через буфер обмена.
|
CheckBox2
|
Properties
|
Caption
|
Задать значение «2».
|
CheckBox3
|
Properties
|
Caption
|
Задать значение «3».
|
CheckBox4
|
Properties
|
Caption
|
Задать значение «4».
|
CheckBox5
|
Properties
|
Caption
|
Задать значение «5».
|
|
|
|
Продолжение таблицы 21.
|
Выделенный объект
|
Вкладка окна
Object Inspector
|
Имя свойства/
имя события
|
Действие
|
Label1
(Вкладка Standard)
|
Properties
|
Caption
|
Введите текст: «Сумма: 0»
|
Autosize
|
Задайте значение False
|
Alignment
|
Задайте значение taCenter
|
4. Сохраните проект, запустите и протестируйте его.
Листинг подпрограммы
procedure TForm1.FormCreate (Sender: TObject);
begin
s := False;
end;
procedure TForm1.CheckBox1Click (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 + 1; {Переключение двух следующих флажков}
if Index = 4
then num := 0; {Изменение состояния нулевого флажка}
{Состояние флажка надо поменять на противоположное}
(Controls[num]
as
TCheckBox).Checked :=
not (Controls[num] as CheckBox).Checked;
{Выполнение проверки на выход за пределы массива}
num := num + 1;
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;
Все публикации раздела