Практикум по Delphi для решения прикладных задач


Головоломка № 2


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


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

  1. После запуска программы в окне изображаются пять сброшенных флажков.
  2. Щелкать разрешено только на сброшенных флажках. Щелчок на установленном флажке не действует.
  3. При установке какого-то флажка меняется состояние двух следующих флажков. При этом сброшенные флажки устанавливаются, а установленные - сбрасываются.
  4. Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.

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

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;





Начало  Назад  Вперед



Книжный магазин