Работающая хрень, создавай проект и меняй весь файл Unit1 unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
const
FigureArr: array [0..9,0..6] of boolean =
((true ,true ,true ,true ,true ,true ,false),
(false,true ,true ,false,false,false,false),
(true ,true ,false,true ,true ,false,true ),
(true ,true ,true ,true ,false,false,true ),
(false,true ,true ,false,false,true ,true ),
(true ,false,true ,true ,false,true ,true ),
(true ,false,true ,true ,true ,true ,true ),
(true ,true ,true ,false,false,false,false),
(true ,true ,true ,true ,true ,true ,true ),
(true ,true ,true ,true ,false,true ,true ));
// массив с начальными данными (10 цифр, 7 позиций)
type
TForm1 = class(TForm)
Image0: TImage;
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Image5: TImage;
Image6: TImage;
Label1: TLabel;
BtnRun: TButton;
procedure Image0Click(Sender: TObject);
procedure BtnRunClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
CheckArr: array [0..6] of boolean; // массив для проверки нажатых имиджей
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var i : byte;
begin
for i:=0 to 6 do
with (findcomponent('Image'+IntToStr(i)) as TImage) do begin
Canvas.Brush.Color:=clGray;
Canvas.FillRect(Rect(0,0,Width,Height))
end
// делаем все имиджи серые.
end;
procedure TForm1.Image0Click(Sender: TObject);
begin
with (Sender as TImage) do begin
CheckArr[Tag]:=not CheckArr[Tag];
if CheckArr[Tag] then Canvas.brush.Color:=clRed
else Canvas.brush.Color:=clGray;
Canvas.FillRect(Rect(0,0,Width,Height))
end
// нажали на серый - стал красным (активным), нажали на красный - стал
// серый (неактивный)
end;
procedure TForm1.BtnRunClick(Sender: TObject);
var j, WhichFigure, Max : byte;
i, ThisStep: ShortInt;
FlagBool, FindFigureBool : boolean;
begin
Max:=0;
i:=-1;
while (i<9)and (not FindFigureBool) do begin // пока не кончатся или не найдет цифру
inc(i);
ThisStep:=-1;
FlagBool:=false;
for j:=0 to 6 do
if (FigureArr[i,j] = CheckArr[j]) then Inc(ThisStep)
else FlagBool:=true;
// если началные данные совпадают с нажатыми, увеличиваем "похожесть" на 1,
if not FlagBool then begin
FindFigureBool:=true;
WhichFigure:=i
end
// если не изменена FlagBool, то найдена "100% похожесть" на цифру
else if ThisStep>Max then begin
Max:=ThisStep;
WhichFigure:=i
end
// если "похожесть на цифру" этого шага больше, чем предыдущего, Max:=ThisStep
// WhichFigure присваивается цифры этого шага
end;
Label1.Caption:=IntToStr(WhichFigure)
end;
end.
-----------------------------------------------------------
На форме (если непонятно) от Image0 до Image6 (верхний - Image0, далее по час.
стрелке до | Image5, Image6 - средний)
Свойства Tag у каждого имиджа соответственно 0,1,2,3,4,5,6,
События OnClick у КАЖДОГО имиджа - Image0Click
Кнопка BtnRun
лабел Label1
---
Что буде непонятно - спрашивай через профильное мыло.
Удачи
Добавлено Paha_W Это, короче, твои супер извращения с часы, забыл в начале поста вписать кому.