R0b0t1
2007-09-09 22:00:14
Lots 'o logic in these folks… More to come.
function InCave(GreyCave: Boolean): Boolean;
Var
BCol, Cnt, I, CurY, WCnt, B, TruCnt: Integer;
MSPoints: Array [0..29] of TPointArray;
CheckArr: Array [0..29] of Boolean;
CaveColArr: Array [0..5] of Integer;
ColPArr: Array [0..29] of Integer;
begin;
If (GreyCave) Then
begin;
CaveColArr[0]:= 2501162;
CaveColArr[1]:= 3095614;
CaveColArr[2]:= 1382167;
CaveColArr[3]:= 3818567;
CaveColArr[4]:= 3816000;
CaveColArr[5]:= 4543832;
end else
begin;
CaveColArr[0]:= 2971749;
CaveColArr[1]:= 4088688;
CaveColArr[2]:= 538965;
CaveColArr[3]:= 2175803;
CaveColArr[4]:= 872051;
CaveColArr[5]:= 2901327;
end;
Cnt:= 0;
CurY:= 0;
WCnt:= 0;
MSPoints[0].x:= MSX1;
MSPoints[0].y:= MSY1;
For I:= 1 to 29 do
begin;
MSPoints[I].x:= 75 * Cnt;
MSPoints[I].y:= 75 * WCnt;
If (I = 1) Then
MsPoints[I].x= 75;
If (I mod 2 = 0) Then
inc(Cnt);
If (Cnt = 5) Then
begin;
Cnt:= 0;
inc(WCnt);
incex(CurY, 75);
end;
end;
For I:= 0 to 29 do
ColPArr[I]:= GetColor(MSPoint[I].x, MSPoint[I].y);
For I:= 0 to 29 do
begin;
For B:= 0 to 5 do
begin;
CheckArr[I]:= SimilarColors(ColPArr, CaveColArr[B]);
If CheckArr[I] Then Break;
end;
end;
For I:= 0 to 29 do
begin;
If (CheckArr[I]) Then
inc(TruCnt);
end;
If (TruCnt >= 5) Then
Result:= True;
else
Result:= False;
end;
function InFally: Boolean;
Var
BCol, Cnt, I, CurY, WCnt, B, TruCnt: Integer;
MSPoints: Array [0..29] of TPointArray;
CheckArr: Array [0..29] of Boolean;
FallyColArr: Array [0..5] of Integer;
ColPArr: Array [0..29] of Integer;
begin;
FallyColArr[0]:= 2501162;
FallyColArr[1]:= 3095614;
FallyColArr[2]:= 1382167;
FallyColArr[3]:= 3818567;
FallyColArr[4]:= 3816000;
FallyColArr[5]:= 4543832;
Cnt:= 0;
CurY:= 0;
WCnt:= 0;
MSPoints[0].x:= MSX1;
MSPoints[0].y:= MSY1;
For I:= 1 to 29 do
begin;
MSPoints[I].x:= 75 * Cnt;
MSPoints[I].y:= 75 * WCnt;
If (I = 1) Then
MsPoints[I].x= 75;
If (I mod 2 = 0) Then
inc(Cnt);
If (Cnt = 5) Then
begin;
Cnt:= 0;
inc(WCnt);
incex(CurY, 75);
end;
end;
For I:= 0 to 29 do
ColPArr[I]:= GetColor(MSPoint[I].x, MSPoint[I].y);
For I:= 0 to 29 do
begin;
For B:= 0 to 5 do
begin;
CheckArr[I]:= SimilarColors(ColPArr, FallyColArr[B]);
If CheckArr[I] Then Break;
end;
end;
For I:= 0 to 29 do
begin;
If (CheckArr[I]) Then
inc(TruCnt);
end;
If (TruCnt >= 5) Then
Result:= True;
else
Result:= False;
end;
function InGreenArea(PercentCorr: Extended): Boolean;
Var
I: Integer;
X, Z: Extended;
YA: Array [0..29] of Extended;
MSPoints: Array [0..29] of TPointArray;
ColPArr: Array [0..29] of Integer;
begin;
MSPoints[0].x:= MSX1;
MSPoints[0].y:= MSY1;
For I:= 1 to 29 do
begin;
MSPoints[I].x:= 75 * Cnt;
MSPoints[I].y:= 75 * WCnt;
If (I = 1) Then
MsPoints[I].x= 75;
If (I mod 2 = 0) Then
inc(Cnt);
If (Cnt = 5) Then
begin;
Cnt:= 0;
inc(WCnt);
incex(CurY, 75);
end;
end;
For I:= 0 to 29 do
begin;
ColPArr[I]:= GetColor(MSPoint[I].x, MSPoint[I].y);
ColorToXYZ(ColPArr[I], X, YA[I], Z);
If (YA[I] > PercentCorr) Then
inc(TruCnt);
end;
Result:= (TruCnt >= 5);
end;
function InRedArea(PercentCorr: Extended): Boolean;
Var
I: Integer;
Y, Z: Extended;
XA: Array [0..29] of Extended;
MSPoints: Array [0..29] of TPointArray;
ColPArr: Array [0..29] of Integer;
begin;
MSPoints[0].x:= MSX1;
MSPoints[0].y:= MSY1;
For I:= 1 to 29 do
begin;
MSPoints[I].x:= 75 * Cnt;
MSPoints[I].y:= 75 * WCnt;
If (I = 1) Then
MsPoints[I].x= 75;
If (I mod 2 = 0) Then
inc(Cnt);
If (Cnt = 5) Then
begin;
Cnt:= 0;
inc(WCnt);
incex(CurY, 75);
end;
end;
For I:= 0 to 29 do
begin;
ColPArr[I]:= GetColor(MSPoint[I].x, MSPoint[I].y);
ColorToXYZ(ColPArr[I], XA[I], Y, Z);
If (XA[I] > PercentCorr) Then
inc(TruCnt);
end;
Result:= (TruCnt >= 5);
end;
function InBlueArea(PercentCorr: Extended): Boolean;
Var
I: Integer;
X, Y: Extended;
ZA: Array [0..29] of Extended;
MSPoints: Array [0..29] of TPointArray;
ColPArr: Array [0..29] of Integer;
begin;
If (PercentCorr <= 0.5) Then
WriteLn('PercentCorr Should be above 0.5, still checking');
MSPoints[0].x:= MSX1;
MSPoints[0].y:= MSY1;
For I:= 1 to 29 do
begin;
MSPoints[I].x:= 75 * Cnt;
MSPoints[I].y:= 75 * WCnt;
If (I = 1) Then
MsPoints[I].x= 75;
If (I mod 2 = 0) Then
inc(Cnt);
If (Cnt = 5) Then
begin;
Cnt:= 0;
inc(WCnt);
incex(CurY, 75);
end;
end;
For I:= 0 to 29 do
begin;
ColPArr[I]:= GetColor(MSPoint[I].x, MSPoint[I].y);
ColorToXYZ(ColPArr[I], X, Y, ZA[I]);
If (ZA[I] > PercentCorr) Then
inc(TruCnt);
end;
Result:= (TruCnt >= 5);
end;
function InYellowArea(PercentCorr: Extended): Boolean;
Var
I: Integer;
X, Y: Extended;
ZA: Array [0..29] of Extended;
MSPoints: Array [0..29] of TPointArray;
ColPArr: Array [0..29] of Integer;
begin;
If (PercentCorr >= 0.5) Then
WriteLn('PercentCorr Should be below 0.5, still checking');
MSPoints[0].x:= MSX1;
MSPoints[0].y:= MSY1;
For I:= 1 to 29 do
begin;
MSPoints[I].x:= 75 * Cnt;
MSPoints[I].y:= 75 * WCnt;
If (I = 1) Then
MsPoints[I].x= 75;
If (I mod 2 = 0) Then
inc(Cnt);
If (Cnt = 5) Then
begin;
Cnt:= 0;
inc(WCnt);
incex(CurY, 75);
end;
end;
For I:= 0 to 29 do
begin;
ColPArr[I]:= GetColor(MSPoint[I].x, MSPoint[I].y);
ColorToXYZ(ColPArr[I], X, Y, ZA[I]);
If (ZA[I] < PercentCorr) Then
inc(TruCnt);
end;
Result:= (TruCnt >= 5);
end;