Головоломка для начинающих "Все пять"

Доброе утро всем! Изучаем программу Delphi, начал работу с головоломкой под названием "Все пять". Программа запускается, но не работает. Не могу понять в чем проблема, ошибок в коде не выдает.

Суть программы:

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

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

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

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

Не могу реализовать 3 пункт. После нажатия на первый CheckBox программа вылетает с ошибкой:

List index out of bounds (1636035).

По нажатию на 2-5 CheckBox ошибок не выдает, но 3 пункт не выполняется.

Помогите решить проблему пожалуйста!

DelphiВыделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    procedure FormCreate(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  s: Boolean;
 
implementation
 
{$R .dfm}
 
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;
  s:= True;
   for Index:= 0 to 4 do
    if Sender = Controls[i] then break;
    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 TCheckBox).Checked;
   num:= num + 1;
  if Index = 3 then
    num:= 0;
   (Controls[num] as TCheckBox).Checked:= not(Controls[num] as TCheckBox).Checked;
end;
  e:= True;
  for i:= 0 to 4 do
   e:= e and (Controls[i] as TCheckBox).Checked;
  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;  
 
end.