Z MeZe
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Работающая хрень, создавай проект и меняй весь файл 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 Это, короче, твои супер извращения с часы, забыл в начале поста вписать кому. |