unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, abfControls, Buttons, ComCtrls; type TForm1 = class(TForm) Button1: TButton; ComboBox1: TComboBox; ComboBox2: TComboBox; ComboBox3: TComboBox; ComboBox4: TComboBox; Button2: TButton; Button3: TButton; Button4: TButton; Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ComboBox1KeyPress(Sender: TObject; var Key: Char); procedure ComboBox1Change(Sender: TObject); procedure Button3Click(Sender: TObject); procedure ComboBox3Change(Sender: TObject); procedure ComboBox2Change(Sender: TObject); procedure ComboBox4Change(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Memo1Enter(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Disks: array[1..8, 1..10] of TShape; Score: array[1..10, 1..4] of boolean; DCols: array[1..4] of integer; RowCount :integer; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); var Rows: integer; Cols: integer; begin RowCount := 1; // create array of TShapes for Rows := 1 to 10 do begin for Cols := 1 to 4 do begin Disks[Cols,Rows] := TShape.Create(self); Disks[Cols,Rows].Parent := self; Disks[Cols,Rows].Top := 8 + (Rows * 25); Disks[Cols,Rows].Height := 20; Disks[Cols,Rows].Left := 4 + (Cols * 25); Disks[Cols,Rows].Width := 20; Disks[Cols,Rows].Visible := True; Disks[Cols,Rows].Update; Disks[Cols,Rows].Shape := stCircle; Disks[Cols,Rows].Brush.Color := clGray; end; end; for Rows := 1 to 10 do begin for Cols := 5 to 8 do begin Disks[Cols,Rows] := TShape.Create(self); Disks[Cols,Rows].Parent := self; Disks[Cols,Rows].Top := 13 + (Rows * 25); Disks[Cols,Rows].Height := 10; Disks[Cols,Rows].Left := 75 + (Cols * 12); Disks[Cols,Rows].Width := 10; Disks[Cols,Rows].Visible := True; Disks[Cols,Rows].Update; Disks[Cols,Rows].Shape := stCircle; Disks[Cols,Rows].Brush.Color := clGray; end; end; ComboBox1.ItemIndex := 0; ComboBox2.ItemIndex := 0; ComboBox3.ItemIndex := 0; ComboBox4.ItemIndex := 0; end; procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin Randomize; for i := 1 to 4 do begin DCols[i] := Random(4); end; Button4.Enabled := true; ComboBox1.Enabled := true; ComboBox2.Enabled := true; ComboBox3.Enabled := true; ComboBox4.Enabled := true; Button1.Enabled := false; end; procedure TForm1.Button2Click(Sender: TObject); begin Close(); end; procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char); begin if ComboBox1.Text <> ComboBox1.Items.Strings[ComboBox1.ItemIndex] then ComboBox1.Text := ComboBox1.Items.Strings[ComboBox1.ItemIndex]; end; procedure TForm1.ComboBox1Change(Sender: TObject); var MyNumber: integer; begin ComboBox1.Text := ComboBox1.Items.Strings[ComboBox1.ItemIndex]; // set circle colour MyNumber := ComboBox1.ItemIndex; if(MyNumber = 0) then Disks[1,RowCount].Brush.Color := clRed; if(MyNumber = 1) then Disks[1,RowCount].Brush.Color := clGreen; if(MyNumber = 2) then Disks[1,RowCount].Brush.Color := clBlue; if(MyNumber = 3) then Disks[1,RowCount].Brush.Color := clYellow; end; procedure TForm1.Button3Click(Sender: TObject); begin RowCount := RowCount +1; if RowCount = 11 then begin MessageDlg('Thats all. Youve lost', mtWarning, [mbOk],0); Close(); end; Button3.Enabled := false; end; procedure TForm1.ComboBox3Change(Sender: TObject); var MyNumber: integer; begin ComboBox3.Text := ComboBox3.Items.Strings[ComboBox3.ItemIndex]; // set circle colour MyNumber := ComboBox3.ItemIndex; if(MyNumber = 0) then Disks[3,RowCount].Brush.Color := clRed; if(MyNumber = 1) then Disks[3,RowCount].Brush.Color := clGreen; if(MyNumber = 2) then Disks[3,RowCount].Brush.Color := clBlue; if(MyNumber = 3) then Disks[3,RowCount].Brush.Color := clYellow; end; procedure TForm1.ComboBox2Change(Sender: TObject); var MyNumber: integer; begin ComboBox2.Text := ComboBox2.Items.Strings[ComboBox2.ItemIndex]; // set circle colour MyNumber := ComboBox2.ItemIndex; if(MyNumber = 0) then Disks[2,RowCount].Brush.Color := clRed; if(MyNumber = 1) then Disks[2,RowCount].Brush.Color := clGreen; if(MyNumber = 2) then Disks[2,RowCount].Brush.Color := clBlue; if(MyNumber = 3) then Disks[2,RowCount].Brush.Color := clYellow; end; procedure TForm1.ComboBox4Change(Sender: TObject); var MyNumber: integer; begin ComboBox4.Text := ComboBox4.Items.Strings[ComboBox4.ItemIndex]; // set circle colour MyNumber := ComboBox4.ItemIndex; if(MyNumber = 0) then Disks[4,RowCount].Brush.Color := clRed; if(MyNumber = 1) then Disks[4,RowCount].Brush.Color := clGreen; if(MyNumber = 2) then Disks[4,RowCount].Brush.Color := clBlue; if(MyNumber = 3) then Disks[4,RowCount].Brush.Color := clYellow; end; procedure TForm1.Button4Click(Sender: TObject); var i: integer; begin if (Disks[1,RowCount].Brush.Color = clGray) or (Disks[2,RowCount].Brush.Color = clGray) or (Disks[2,RowCount].Brush.Color = clGray) or (Disks[2,RowCount].Brush.Color = clGray) then begin MessageDlg('Finish the row first!', mtInformation, [mbOk],0); exit; end else begin Button3.Enabled := true; // set all disks to false for i := 5 to 8 do begin Disks[i,RowCount].Brush.Color := clBlack; end; // check colours against random list if(ComboBox1.ItemIndex = DCols[1]) then Disks[5,RowCount].Brush.Color := clWhite; if(ComboBox2.ItemIndex = DCols[2]) then Disks[6,RowCount].Brush.Color := clWhite; if(ComboBox3.ItemIndex = DCols[3]) then Disks[7,RowCount].Brush.Color := clWhite; if(ComboBox4.ItemIndex = DCols[4]) then Disks[8,RowCount].Brush.Color := clWhite; // check to see if all boxes are white if(Disks[5,RowCount].Brush.Color = clWhite) and (Disks[6,RowCount].Brush.Color = clWhite) and (Disks[7,RowCount].Brush.Color = clWhite) and (Disks[8,RowCount].Brush.Color = clWhite) then begin MessageDlg('You have won!', mtInformation, [mbOk],0); Close(); end; end; RowCount := RowCount +1; if RowCount = 11 then begin MessageDlg('Thats all. Youve lost', mtWarning, [mbOk],0); Close(); end; end; procedure TForm1.Memo1Enter(Sender: TObject); begin Button2.SetFocus; end; end.