1 Auto game kim cuơng của zing autoit Mon Aug 22, 2011 9:57 pm
Trunks-Kun
Administrator
Phuơng pháp quét điểm ảnh. Sử dụng firefox ở chế độ full màng hình và độ phân giải 1280x800.
nguồn autoit.72ls.net
- Code:
HotKeySet("!x", "_Exit")
Global $maze[8][8]
Global $hwnd = WinGetHandle("[CLASS:MozillaUIWindowClass]")
WinActivate($hwnd)
$sx = 40
$sy = 40
Func Load()
For $x=0 To 7
For $y=0 To 7
Local $mx = 470 + $x*$sx + $sx/2
Local $my = 300 + $y*$sy + $sy/2
$maze[$x][$y] = PixelGetColor ($mx, $my)
;MouseMove($mx, $my)
Next
Next
EndFunc
For $i=0 To 1000
Local $best = 2, $xp = 0, $yp = 0, $option = -1
Local $time = TimerInit()
Load()
For $y=0 To 7
For $x=0 To 7
Local $a = MoveLeft($x, $y)
Local $c = MoveUp($x, $y)
If $best < $a Then
$xp = $x
$yp = $y
$option = 0
$best = $a
EndIf
If $best < $c Then
$xp = $x
$yp = $y
$option = 2
$best = $c
EndIf
Next
Next
Local $mouse = MouseGetPos()
Switch $option
Case -1
Sleep(500)
Case 0
MouseClick("left", 470 + $xp*$sx + $sx/2, 300 + $yp*$sy + $sy/2, 1, 1)
MouseClick("left", 470 + ($xp-1)*$sx + $sx/2, 300 + $yp*$sy + $sy/2, 1, 1)
Case 2
MouseClick("left", 470 + $xp*$sx + $sx/2, 300 + $yp*$sy + $sy/2, 1, 1)
MouseClick("left", 470 + $xp*$sx + $sx/2, 300 + ($yp-1)*$sy + $sy/2, 1, 1)
Case Else
ExitLoop
EndSwitch
MouseMove($mouse[0], $mouse[1], 1)
;ConsoleWrite($i &". Interval: " & TimerDiff($time) & @CRLF)
Sleep(500)
Next
Func MoveLeft($x, $y)
If $x>0 Then
Return Move($x, $y, -1, 0)
EndIf
Return 0
EndFunc
Func MoveUp($x, $y)
If $y>0 Then
Return Move($x, $y, 0, -1)
EndIf
Return 0
EndFunc
Func Move($x, $y, $invx, $invy)
$Mz = CoPY()
$temp = $Mz[$x][$y]
$Mz[$x][$y] = $Mz[$x+$invx][$y+$invy]
$Mz[$x+$invx][$y+$invy] = $temp
Return Evaluate($Mz)
EndFunc
Func CoPY()
Local $coMz[8][8]
For $i=0 To 7
For $j=0 To 7
$coMz[$i][$j] = $maze[$i][$j]
Next
Next
Return $coMz
EndFunc
Func Evaluate(ByRef $Mz)
Local $value = 0
For $i=0 To 7
Local $a = CountColumn($Mz, $i)
Local $b = CountRow($Mz, $i)
If $a == 3 Then $value = $value + $a
If $b == 3 Then $value = $value + $b
If $a > 3 or $b > 3 Then $value = $value + 1000
Next
Return $value
EndFunc
Func CountRow($Mz, $y)
Local $max = 0, $count = 0, $last = $Mz[$y][0]
For $i = 0 To 7
;ConsoleWrite (Hex($Mz[$y][$i]) & @TAB)
If $last == $Mz[$y][$i] Then
$count = $count + 1
Else
If $max < $count Then $max = $count
$count = 1
$last = $Mz[$y][$i]
EndIf
Next
If $max < $count Then $max = $count
Return $max
EndFunc
Func CountColumn($Mz, $x)
Local $max = 0, $count = 0, $last = $Mz[0][$x]
For $i = 0 To 7
;ConsoleWrite (Hex($Mz[$i][$x]) & @TAB)
If $last == $Mz[$i][$x] Then
$count = $count + 1
Else
If $max < $count Then $max = $count
$count = 1
$last = $Mz[$i][$x]
EndIf
Next
If $max < $count Then $max = $count
Return $max
EndFunc
Func Print($Mz = $maze)
For $x=0 To 7
For $y=0 To 7
ConsoleWrite( Hex($Mz[$x][$y]) & @TAB)
Next
ConsoleWrite(@CRLF)
Next
EndFunc
Func _Exit()
MsgBox(0, "End", "Chuong trinh ket thuc. Hen gap lai")
Exit 0
EndFunc
_Exit()
nguồn autoit.72ls.net