Хелпикс

Главная

Контакты

Случайная статья





Лабораторная работа №16. Головоломка 2



Лабораторная работа №16. Головоломка 2

Цель работы - создать компьютерную версию головоломки: из изображенных пяти сброшенных флажков установить все. Но при выборе одного флажка меняется состояние двух следующих.

Рис. 16.1

Решение

Создать программу, выполняющую следующие действия:

1. После запуска программы в окне изображаются пять сброшенных флажков.

2. Щелкать разрешено только на сброшенных флажках. Щелчок на установленном флажке не действует.

3. При установке какого-то флажка меняется состояние двух следующих флажков. При этом сброшенные флажки устанавливаются, а установленные - сбрасываются.

4. Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.

Описание плана разработки программы

1. Открыть новый проект.

2. Разместить на форме экземпляры компонентов: список флажков CheckBox, надпись Label.

3. Выполнить следующие действия:

 

Таблица 16.1

Выделенный объект Вкладка окна Object Inspector Имя свойства/ имя события

Действие

Form1 Properties Caption

Установка имени формы "Все пять"

  Events OnCreate

Создать глобальную логическую переменную s. В то время, когда идет обработка события, переменная имеет значение True (да).

CheckBox1 Properties Caption

Задать значение "1".

(Вкладка Standard) Events OnClick

Необходимо работать с флажками, как с массивом. Форма является контейнером для флажков. У объектов-контейнеров имеется свойство Controls (Элементы управления) - массив элементов управления, находящихся в данном контейнере: Controls [i] as TCheckBox.

Для создания еще пяти флажков можно использовать метод копирования через буфер обмена.

CheckBox2 Properties Caption

Задать значение "2".

CheckBox3 Properties Caption

Задать значение "3".

CheckBox4 Properties Caption

Задать значение "4".

CheckBox5 Properties Caption

Задать значение "5".

Выделенный объект

Вкладка окна Object Inspector

Имя свойства/ имя события Действие

Label1

(Вкладка Standard)

Properties

Caption Введите текст: "Сумма: 0"
Autosize Задайте значение False
Alignment Задайте значение taCenter

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;

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.