WT-Fakawi
2006-04-30 19:41:45
I have written a draft SandWichLady Solver. I have a 4 second uncompressed True Color Screen Record of the SandWichLady: HERE (10 Meg)
Please run this script with the video and post me:
Here is the Script:
Tthis is NOT a complete Sandwich solver, just a test of the engine!!
[php]
program SandWichLadySolver;
{.include SRL/SRL.scar}
var Baquette, Bread, ChocolateBar, Kebab, Pie, SquareSand,
TriangleSand, SquareTriangle, Solved: Integer;
SWText:array[1..7] of string;
//—————————————————————————-//
Procedure LoadSWBitMaps;
begin
Baquette := BitmapFromString(4, 6, 'AE9A62AE9A62B29E66957E' +
'36B09D64B4A067988037988037B29E669B83379B83379B83379D8' +
'5399D85399D85399D8539BFA96CBFA96CBFA96CBFA96CB4A067B6' +
'A268B6A268B6A268');
Bread := BitmapFromString(25, 1, '9F8111A889159F81119176116' +
'9550969550980680E80680E9F81119F8111886E0E645109846B0E' +
'846B0E9C7F11A28411A28411604D09604D09604D09604D097C660' +
'E7C660E7C660E7C660E');
ChocolateBar := BitmapFromString(6, 1, '4B2E1B5C39205C3920' +
'5C39206F45275C3920');
Kebab := BitmapFromString(1, 8, '564C09118E15118E156458090E' +
'84151195150E8815605409');
Pie := BitmapFromString(1, 10, 'BFB06CBFB06CC3B46FC2B36EBF' +
'B06C756D6C776F6E776F6E7971707B7272');
SquareSand := BitmapFromString(49, 1, 'z78DAA5CF310EC0' +
'201003C12F819D48D01EBEFCFF49408DA9D24CB9D28E40D4364ED' +
'3AB0259DF65181BD22A6F82E5A79DA8BAF9918FF35613F7C50494' +
'104240');
TriangleSand := BitmapFromString(1, 8, 'B29E66FBBC20F8' +
'BA1DFBBC20FBBC20FBBC20FBBD27B4A067');
SquareTriangle := BitmapFromString(1, 6, '519111519111E7AD1' +
'DFBC036FB5A4DE7301D');
end;
//—————————————————————————-//
procedure SetupSandWich;
begin
SWText[1]:='pie';
SWText[2]:='square';
SWText[3]:='bread';
SWText[4]:='triangle';
SWText[5]:='baguette';
SWText[6]:='chocolate';
SWText[7]:='kebab';
LoadSWBitMaps;
end;
//—————————————————————————-//
Function SWEngine(SWBitMap, SWDelay, SWSearchTime:integer; SWAcc:extended):Boolean;
var Dx,Dy,i,SX1, SY1, SX2, SY2:integer;
var acc:Extended;
begin
for I := 1 to 7 do
begin
case I of
1: begin
SX1 := 100; SY1 := 80; SX2 := 210; SY2:= 160;
end;
2: begin
SX1 := 210; SY1 := 80; SX2 := 320; SY2:= 160;
end;
3: begin
SX1 := 300; SY1 := 80; SX2 := 420; SY2:= 160;
end;
4: begin
SX1 := 90; SY1 := 160; SX2 := 170; SY2:= 264;
end;
5: begin
SX1 := 170; SY1 := 160; SX2 := 260; SY2:= 264;
end;
6: begin
SX1 := 260; SY1 := 160; SX2 := 352; SY2:= 264;
end;
7: begin
SX1 := 340; SY1 := 160; SX2 := 450; SY2:= 264;
end;
end;
MarkTime(Mark);
Repeat
FindDeformedBitmapToleranceIn(SWBitMap, Dx, Dy, SX1, SY1, SX2, SY2, 5, 1, True, acc);
begin
AddToReport('Slot '+IntTostr(I)+': ');
AddToReport('acc'+FloatToStr(acc));
if (acc >= SWAcc) then
begin
MMouse(Dx,Dy,0,0);
Result:=True;
Exit;
end;
end;
wait(SWDelay);
ClearReport;
until TimeFromMark(Mark)>SWSearchTime;
ClearReport;
end;
end;
//—————————————————————————-//
Function SolveSandWich:integer;
var c:integer;
begin
for c:=1 to 7 do
begin
if FindText(x,y,SWText[c],UpChars,107,260,424,300) then
begin
result:=c;
writeln('Looking for :'+SWText[c]);
if C=1 then
begin
SWEngine(Pie,50,2000,0.5);
end;
if C=2 then
begin
SWEngine(SquareSand,20,5000,0.3);
end;
if C=3 then
begin
SWEngine(Bread,50,2000,0.5);
end;
if C=4 then
begin
SWEngine(TriangleSand,100,6000,0.7);
end;
if C=5 then
begin
SWEngine(Baquette,100,4000,0.6);
end;
if C=6 then
begin
SWEngine(ChocolateBar,50,2000,0.7);
end;
if C=7 then
begin
SWEngine(Kebab,50,3000,0.5);
end;
end;
end;
end;
//—————————————————————————-//
procedure TestSandWich;
var c:integer;
begin
for c:=1 to 7 do
begin
writeln('Solving :'+SWText[c]);
if C=1 then
begin
if SWEngine(Pie,50,2000,0.5) then
begin
writeln('Solved Pie');
Solved:=Solved+1;
end
else writeln('Missed Pie');
end;
if C=2 then
begin
if SWEngine(SquareSand,20,5000,0.30) then
begin
writeln('Solved Square Sandwich');
Solved:=Solved+1;
end
else writeln('Missed Square Sandwich');
end;
if C=3 then
begin
if SWEngine(Bread,50,2000,0.5) then
begin
writeln('Solved Bread');
Solved:=Solved+1;
end
else
writeln('Missed Bread');
end;
if C=4 then
begin
if SWEngine(TriangleSand,100,6000,0.7) then
begin
writeln('Solved Triangle Sandwich');
Solved:=Solved+1;
end
else
writeln('Missed Triangle Sandwich');
end;
if C=5 then
begin
if SWEngine(Baquette,100,4000,0.6) then
begin
writeln('Solved Baquette');
Solved:=Solved+1;
end
else
writeln('Missed Baquette');
end;
if C=6 then
begin
if SWEngine(ChocolateBar,50,500,0.2) then
begin
writeln('Solved Chocolate Bar');
Solved:=Solved+1;
end
else
writeln('Missed Chocolate Bar');
end;
if C=7 then
begin
if SWEngine(Kebab,50,3000,0.5) then
begin
writeln('Solved Kebab');
Solved:=Solved+1;
end
else
writeln('Missed Kebab');
end;
end;
end;
begin
SetupSRL;
SetupSandWich;
MouseSpeed:=1;
TestSandWich;
Writeln('Solved '+IntToStr(Solved)+ ' Ladies');
// If you want to individual test the engine unblank any of these;
//SWEngine(Pie,100,3000,0.7);
//SWEngine(SquareSand,20,5000,0.30);
//SWEngine(Bread,50,2000,0.5);
//SWEngine(TriangleSand,100,6000,0.7);
//SWEngine(Baquette,100,4000,0.6);
//SWEngine(ChocolateBar,50,500,0.2);
//SWEngine(Kebab,50,3000,0.5);
//SWEngine(SquareTriangle,50,3000,0.5);
end.[/php]
Please run this script with the video and post me:
- 1 Results.
- 2. Computer Speed.
- 3. Visual feedback. Lag?
Here is the Script:
Tthis is NOT a complete Sandwich solver, just a test of the engine!!
[php]
program SandWichLadySolver;
{.include SRL/SRL.scar}
var Baquette, Bread, ChocolateBar, Kebab, Pie, SquareSand,
TriangleSand, SquareTriangle, Solved: Integer;
SWText:array[1..7] of string;
//—————————————————————————-//
Procedure LoadSWBitMaps;
begin
Baquette := BitmapFromString(4, 6, 'AE9A62AE9A62B29E66957E' +
'36B09D64B4A067988037988037B29E669B83379B83379B83379D8' +
'5399D85399D85399D8539BFA96CBFA96CBFA96CBFA96CB4A067B6' +
'A268B6A268B6A268');
Bread := BitmapFromString(25, 1, '9F8111A889159F81119176116' +
'9550969550980680E80680E9F81119F8111886E0E645109846B0E' +
'846B0E9C7F11A28411A28411604D09604D09604D09604D097C660' +
'E7C660E7C660E7C660E');
ChocolateBar := BitmapFromString(6, 1, '4B2E1B5C39205C3920' +
'5C39206F45275C3920');
Kebab := BitmapFromString(1, 8, '564C09118E15118E156458090E' +
'84151195150E8815605409');
Pie := BitmapFromString(1, 10, 'BFB06CBFB06CC3B46FC2B36EBF' +
'B06C756D6C776F6E776F6E7971707B7272');
SquareSand := BitmapFromString(49, 1, 'z78DAA5CF310EC0' +
'201003C12F819D48D01EBEFCFF49408DA9D24CB9D28E40D4364ED' +
'3AB0259DF65181BD22A6F82E5A79DA8BAF9918FF35613F7C50494' +
'104240');
TriangleSand := BitmapFromString(1, 8, 'B29E66FBBC20F8' +
'BA1DFBBC20FBBC20FBBC20FBBD27B4A067');
SquareTriangle := BitmapFromString(1, 6, '519111519111E7AD1' +
'DFBC036FB5A4DE7301D');
end;
//—————————————————————————-//
procedure SetupSandWich;
begin
SWText[1]:='pie';
SWText[2]:='square';
SWText[3]:='bread';
SWText[4]:='triangle';
SWText[5]:='baguette';
SWText[6]:='chocolate';
SWText[7]:='kebab';
LoadSWBitMaps;
end;
//—————————————————————————-//
Function SWEngine(SWBitMap, SWDelay, SWSearchTime:integer; SWAcc:extended):Boolean;
var Dx,Dy,i,SX1, SY1, SX2, SY2:integer;
var acc:Extended;
begin
for I := 1 to 7 do
begin
case I of
1: begin
SX1 := 100; SY1 := 80; SX2 := 210; SY2:= 160;
end;
2: begin
SX1 := 210; SY1 := 80; SX2 := 320; SY2:= 160;
end;
3: begin
SX1 := 300; SY1 := 80; SX2 := 420; SY2:= 160;
end;
4: begin
SX1 := 90; SY1 := 160; SX2 := 170; SY2:= 264;
end;
5: begin
SX1 := 170; SY1 := 160; SX2 := 260; SY2:= 264;
end;
6: begin
SX1 := 260; SY1 := 160; SX2 := 352; SY2:= 264;
end;
7: begin
SX1 := 340; SY1 := 160; SX2 := 450; SY2:= 264;
end;
end;
MarkTime(Mark);
Repeat
FindDeformedBitmapToleranceIn(SWBitMap, Dx, Dy, SX1, SY1, SX2, SY2, 5, 1, True, acc);
begin
AddToReport('Slot '+IntTostr(I)+': ');
AddToReport('acc'+FloatToStr(acc));
if (acc >= SWAcc) then
begin
MMouse(Dx,Dy,0,0);
Result:=True;
Exit;
end;
end;
wait(SWDelay);
ClearReport;
until TimeFromMark(Mark)>SWSearchTime;
ClearReport;
end;
end;
//—————————————————————————-//
Function SolveSandWich:integer;
var c:integer;
begin
for c:=1 to 7 do
begin
if FindText(x,y,SWText[c],UpChars,107,260,424,300) then
begin
result:=c;
writeln('Looking for :'+SWText[c]);
if C=1 then
begin
SWEngine(Pie,50,2000,0.5);
end;
if C=2 then
begin
SWEngine(SquareSand,20,5000,0.3);
end;
if C=3 then
begin
SWEngine(Bread,50,2000,0.5);
end;
if C=4 then
begin
SWEngine(TriangleSand,100,6000,0.7);
end;
if C=5 then
begin
SWEngine(Baquette,100,4000,0.6);
end;
if C=6 then
begin
SWEngine(ChocolateBar,50,2000,0.7);
end;
if C=7 then
begin
SWEngine(Kebab,50,3000,0.5);
end;
end;
end;
end;
//—————————————————————————-//
procedure TestSandWich;
var c:integer;
begin
for c:=1 to 7 do
begin
writeln('Solving :'+SWText[c]);
if C=1 then
begin
if SWEngine(Pie,50,2000,0.5) then
begin
writeln('Solved Pie');
Solved:=Solved+1;
end
else writeln('Missed Pie');
end;
if C=2 then
begin
if SWEngine(SquareSand,20,5000,0.30) then
begin
writeln('Solved Square Sandwich');
Solved:=Solved+1;
end
else writeln('Missed Square Sandwich');
end;
if C=3 then
begin
if SWEngine(Bread,50,2000,0.5) then
begin
writeln('Solved Bread');
Solved:=Solved+1;
end
else
writeln('Missed Bread');
end;
if C=4 then
begin
if SWEngine(TriangleSand,100,6000,0.7) then
begin
writeln('Solved Triangle Sandwich');
Solved:=Solved+1;
end
else
writeln('Missed Triangle Sandwich');
end;
if C=5 then
begin
if SWEngine(Baquette,100,4000,0.6) then
begin
writeln('Solved Baquette');
Solved:=Solved+1;
end
else
writeln('Missed Baquette');
end;
if C=6 then
begin
if SWEngine(ChocolateBar,50,500,0.2) then
begin
writeln('Solved Chocolate Bar');
Solved:=Solved+1;
end
else
writeln('Missed Chocolate Bar');
end;
if C=7 then
begin
if SWEngine(Kebab,50,3000,0.5) then
begin
writeln('Solved Kebab');
Solved:=Solved+1;
end
else
writeln('Missed Kebab');
end;
end;
end;
begin
SetupSRL;
SetupSandWich;
MouseSpeed:=1;
TestSandWich;
Writeln('Solved '+IntToStr(Solved)+ ' Ladies');
// If you want to individual test the engine unblank any of these;
//SWEngine(Pie,100,3000,0.7);
//SWEngine(SquareSand,20,5000,0.30);
//SWEngine(Bread,50,2000,0.5);
//SWEngine(TriangleSand,100,6000,0.7);
//SWEngine(Baquette,100,4000,0.6);
//SWEngine(ChocolateBar,50,500,0.2);
//SWEngine(Kebab,50,3000,0.5);
//SWEngine(SquareTriangle,50,3000,0.5);
end.[/php]