Здравствуйте, уважаемые посетители форума. 
Пишу вам вот с таким вопросом: есть некое поле 7х7 с разноцветными камнями, скриншот в аттаче. Я написал алгоритм для сканирования поля и определения цвета каждой ячейки, но теперь встал вопрос составления алгоритма подбора вариантов, то есть, если мы получим массив
[box title=TitleBox]0.0.0.0.1.0.0
0.0.1.1.0.0.0
0.0.0.0.0.0.0
0.0.0.0.0.0.0
0.0.0.0.0.0.0
0.0.0.0.0.0.0
0.0.0.0.0.0.0[/box]
то нужно составить алгоритм, для определения возможной перестановки единичек (в моем случае похожим камушков) в линию из 3 и больше элементов, то есть
[box title=TitleBox]0.0.1.1.1.0.0[/box]
Алгоритм поиска цвета и составления массива:
Ну и собственно вопрос состоит в составлении алгоритма для проведения вот таких вот манипуляций.

Пишу вам вот с таким вопросом: есть некое поле 7х7 с разноцветными камнями, скриншот в аттаче. Я написал алгоритм для сканирования поля и определения цвета каждой ячейки, но теперь встал вопрос составления алгоритма подбора вариантов, то есть, если мы получим массив
[box title=TitleBox]0.0.0.0.1.0.0
0.0.1.1.0.0.0
0.0.0.0.0.0.0
0.0.0.0.0.0.0
0.0.0.0.0.0.0
0.0.0.0.0.0.0
0.0.0.0.0.0.0[/box]
то нужно составить алгоритм, для определения возможной перестановки единичек (в моем случае похожим камушков) в линию из 3 и больше элементов, то есть
[box title=TitleBox]0.0.
Алгоритм поиска цвета и составления массива:
Код:
#include <Array.au3>
Global Const _
$iColor[7] = [0, "0xA4037C", "0x2C8A27", "0xB5FEFE", "0xFFBF08", "0x3B537B", "0xFF2433"], _ ;фиолетовый, зеленый, голубой, желтый, синий, красный
$iColorS[7] = [0, 1, 2, 3, 4, 5, 6], _ ;коды цветов
$iLeftCornerColor = "0x0000AA", _ ;цвет левого угла игрового экрана
$aTableSize[2] = [721,323], _ ;точный размер игрового экрана
$aFieldSize[2] = [240,240] ;точный размер игрового поля
Global $aTable[8][8] ;конечная таблица
HotKeySet("{ESC}", "_Exit")
HotKeySet("^1", "_Start")
While 1
Sleep(100)
WEnd
Func _GetTablePos() ; возвращает массив x,y позиции игрового окна
Local $_aSearch
$_aSearch = PixelSearch(0, 0, @DesktopWidth, @DesktopHeight, $iLeftCornerColor, 10, 2)
If IsArray($_aSearch) Then
$_aSearch[0] += 190
$_aSearch[1] += 40
Return $_aSearch
Else
Return 0
EndIf
EndFunc
Func _CreatePattern(ByRef $_Table, $_aTablePos) ;перебор таблицы 7х7 в игровом окне
Local $__y = 1, $__x = 1
For $y = $_aTablePos[1] To $_aTablePos[1] + $aFieldSize[1] Step 38
For $x = $_aTablePos[0] To $_aTablePos[0] + $aFieldSize[0] Step 38
$idColor = _SearchCellColor($x, $y)
$_Table[$__y][$__x] = $idColor
$__x += 1
Next
$__y += 1
$__x = 1
Next
EndFunc
Func _Start()
$aPos = _GetTablePos()
If IsArray($aPos) Then
_CreatePattern($aTable, $aPos)
_ArrayDisplay($aTable)
Else
_Start()
EndIf
EndFunc
Func _SearchCellColor($_x, $_y) ;перебирает цвета в ячейке, возвращая код цвета (1-6)
For $i = 1 To UBound($iColorS) -1
$sSearch = PixelSearch($_x, $_y, $_x + 30, $_y + 30, $iColor[$i], 25, 3)
If IsArray($sSearch) Then
Return $i
EndIf
Next
Return 0
EndFunc
Func _Exit()
Exit
EndFunc
Ну и собственно вопрос состоит в составлении алгоритма для проведения вот таких вот манипуляций.