Что нового

[Массивы] Заполнить двумерный массив индексами другого массива

Strog

Новичок
Сообщения
22
Репутация
0
У меня есть массив 6*6 ($polemassiv) и надо чтобы цикл for заполнил его значениями от 0 до 5 ,т.е. записал значения соответствующие 5 цветам, каждая переменная массива $color cодержит значение цвета, каждый цвет имеет значение
зелёный = 0x75BC3C = 1
синий = 0:rofl:8B983 = 2
жёлтый = 0xFFF528 =3
серебрянный = 0x8D8676 = 4
красный = 0:rofl:3131E =5
Вот на примерах ваших попробовал , но что то не работает :scratch:
Код:
Dim $color[5] = [$grinK, $cherep ,$elloweK, $lechenie, $redK]

For $pp = 0 To 4 Step 1
For $a = 0 To UBound($color) - 1
      $Pozik1 = PixelSearch($XB, $YB , $XN, $YN, $color[$pp], $shade)
        If Not @error Then 
		$PoleMassiv[0][0] = $a
	Else
		$PoleMassiv[0][0] = 0
	EndIf
Next
Next
 

Fever

Скриптер
Сообщения
308
Репутация
112
Strog, я не слишком понял задачу, но вот, что получилось
Код:
Dim _
$aArray[6][6], _
$aColor[0, "0x75BC3C", "0xD8B983", "0xFFF528", "0x8D8676", "0xD3131E"]

For $aX = 0 To 5
	For $aY = 0 To 5
		$sSearch = PixelSearch($XB, $YB , $XN, $YN, $aColor[$aY], $shade)
		If IsArray($sSearch) Then
			$aArray[$aX][$aY] = $aColor[$aX]
		EndIf
	Next
Next
 
Автор
S

Strog

Новичок
Сообщения
22
Репутация
0
Fever Вообще не разобрался , паутина какая то.Но Спасибо за попытку помочь :smile:

попробую написать задачу по другому
1 есть двумерный массив
Код:
Global $PoleMassiv[6][6] (6*6)

2 есть массив цветов
Код:
Dim $color[5] = ["0x75BC3C", "0xD8B983", "0xFFF528", "0x8D8676", "0xD3131E"]

3 есть 36 квадратов на экране
Цель каждый квадрат мы проверяем на наличие одного из 5 цветов, и добавляем в массив
Код:
$PoleMassiv[*][**] = "***"

*индекс 1
** индекс 2
*** индекс 3 (из массива $color)
$color
индекс 1 значение 0x75BC3C
индекс 2 значение 0:rofl:8B983
индекс 3 значение 0xFFF528
индекс 4 значение 0x8D8676
индекс 5 значение 0:rofl:3131E
Иными словами : координаты квадрата на экране → поиск цвета → нашел красный → добавил значение 5 в ячейку (индекс от руки напишу) массива
Или : координаты квадрата на экране → поиск цвета → не нашел ни один из цветов → добавил значение 0 в ячейку (индекс от руки напишу) массива
Если снова не понятно то уточняйте в каком месте :read_this:

И подскажите как цитировать?
 

Fever

Скриптер
Сообщения
308
Репутация
112
Strog
теперь все понятно, вот

Код:
#include <Array.au3>

Dim _
$aArray[6][6], _ ;массив с результатами 1-5
$aColor[6], $aColorS[6]

;код цвета
$aColor[1] = "0x75BC3C"
$aColor[2] = "0xD8B983"
$aColor[3] = "0xFFF528"
$aColor[4] = "0x8D8676"
$aColor[5] = "0xD3131E"

;сигнатура цвета
$aColorS[1] = 1
$aColorS[2] = 2
$aColorS[3] = 3
$aColorS[4] = 4
$aColorS[5] = 5

; === эти данные заполни сам! ===
Dim _
$XB[6][6], _ ;массив точек Х ячеек
$YB[6][6], _ ;массив точек Y ячеек
$XN[6][6], _ ;массив широт ячеек
$YN[6][6]    ;массив высот ячеек
; ===

For $aX = 0 To 5 ;горизонтальная прямая
    For $aY = 0 To 5 ;вертикальная прямая
		_CheckColor()
    Next
Next

_ArrayDisplay($aArray)

Func _CheckColor()
	For $i = 1 To UBound($aColor) - 1 ;сверяем наличие 5 цветов в ячейке...
		$sSearch = PixelSearch($XB[$aX][$aY], $YB[$aX][$aY], $XN[$aX][$aY], $YN[$aX][$aY], $aColor[$i], $shade) ;...
		If IsArray($sSearch) Then ;...если предыдущая ф-ция возвратила массив, то значит цвет найден и он в массиве под номером $i, тоесть $aColorS[$i]
			$aArray[$aX][$aY] = $aColorS[$i] ; присваеваем ячейке это значение

			Return 1
		EndIf
	Next ;если же цикл прошел до конца, звачит совпадения цвета нет, следовательно присваеваем текущей ячейке значение 0

	$aArray[$aX][$aY] = 0
	Return 0
EndFunc
 
Автор
S

Strog

Новичок
Сообщения
22
Репутация
0
Только вопросик ,
Код:
 $sSearch = PixelSearch($XB[$aX][$aY], $YB[$aX][$aY], $XN[$aX][$aY], $YN[$aX][$aY], $aColor[$i], $shade)
здесь где координаты двумерные массивы, а значение параметра 1, как я так заполню?
Код:
$sSearch = PixelSearch(ХВерхнегоЛевогоУгла,УВерхнегоЛевогоУгла,ХНижнегоПравогоУгла, УНижнегоПравогоУгла, Цвет который будем искать в формате 0х000000, шейдер )
или я не догоняю? давайте проясним момент.
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Strog
Попробуйте так:
Код:
;~ зелёный		= 0x75BC3C = 1
;~ синий		= 0xD8B983 =  2
;~ жёлтый		= 0xFFF528 =3
;~ серебрянный	= 0x8D8676 = 4
;~ красный		= 0xD3131E =5

#include <Array.au3>

Dim $aColor[5] = [0x75BC3C, 0xD8B983 ,0xFFF528, 0x8D8676, 0xD3131E]
Dim $aPoleMassiv[5][2], $hWin
Dim $iLeft = 200, $iTop = 200, $iRight = 100, $iBottom = 100

$hWin = WinGetHandle('...Title game...')
WinActivate($hWin)
	Sleep(250)

For $c = 0 To UBound($aColor) -1
	$aPozik1 = PixelSearch($iLeft, $iTop , $iRight, $iBottom, $aColor[$c], 0, 1, $hWin)
	If Not @error Then 
		$aPoleMassiv[$c][0] = $aPozik1[0] &'x'& $aPozik1[1]
		$aPoleMassiv[$c][1] = '0x' & Hex($aColor[$c], 6)
	Else
		$aPoleMassiv[$c][0] = 0
		$aPoleMassiv[$c][1] = 0
	EndIf
Next

_ArrayDisplay($aPoleMassiv)



Добавлено:
Сообщение автоматически объединено:

или так:
Код:
;...
Dim $aPoleMassiv[5][3]
; ...
If Not @error Then 
	$aPoleMassiv[$c][0] = $aPozik1[0] ; x position Pixel
	$aPoleMassiv[$c][1] = $aPozik1[1] ; y position Pixel
	$aPoleMassiv[$c][2] = '0x' & Hex($aColor[$c], 6) ; color Pixel
Else
	$aPoleMassiv[$c][0] = 0
	$aPoleMassiv[$c][1] = 0
	$aPoleMassiv[$c][2] = 0
EndIf
;...
 
Автор
S

Strog

Новичок
Сообщения
22
Репутация
0
Я разобрался с вашим примером, но это к сожалению не то , может вы не так поняли задачу,
я ищу не координаты первого пикселя а хотя бы его наличие.Дальше отталкиваясь от этого заношу значения в массив.

Сейчас состоит трудность в том что я не пойму как связано
Код:
$sSearch = PixelSearch($XB[$aX][$aY], $YB[$aX][$aY], $XN[$aX][$aY], $YN[$aX][$aY], $aColor[$i], $shade)
и
Код:
$aArray[$aX][$aY] = $aColorS[$i]
а именно [$aX][$aY]

скрипт Fever
 

Fever

Скриптер
Сообщения
308
Репутация
112
Strog я прокоментировал свой код

а насчёт заполнять так, например:

Код:
$XB[0][0] = 10
$YB[0][0] = 10
$XN[0][0] = 20
$YN[0][0] = 20

тогда первые 2 переменные - координаты X & Y квадрата, а вторые 2 - координаты противоположного края и таких связок должно быть 36 ;D


Добавлено:
Сообщение автоматически объединено:

Код:
[$aX][$aY]
- координаты текущей ячейки (от 0 до 5) в сетке 6*6, которые используются в цикле
 
Автор
S

Strog

Новичок
Сообщения
22
Репутация
0
Большое спасибо! :ok: буквально 2 минуты назад на бумаге начирикал и стало ясно !
как сделаю 36 связок так сразу отпишусь !
 
Верх