Что нового

Как добавить +1 сразу к нескольким переменным в одной строке?

RavdonikaS

Новичок
Сообщения
68
Репутация
4
Как можно в одной строке добавить +1 к значению сразу нескольких переменных?
Код:
;Вот из такого вида
Switch $_K
			Case 1.1
				$7k+=1
				$8k+=1
				$9k+=1
				$10k+=1
				$Jk+=1
			Case 2.1
				$7k+=1
				$8k+=1
				$9k+=1
				$10k+=1
				$Jk+=1
EndSwitch

;Привести в примерно такой вид
Switch $_K
			Case 1.1
				$7k,$8k,$9k,$10k,$Jk+=1 ;Добавить +1 ко всем переменным в строке
			Case 2.1
				$7k,$8k,$9k,$10k,$Jk+=1 ;Добавить +1 ко всем переменным в строке
EndSwitch
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Возможно и глупость, но можно через функцию, например так :
Код:
Local $_K = 1.1, $7k = 1, $8k = 2, $9k = 3, $10k = 4, $Jk = 5

Switch $_K
	Case 1.1
		_Add_1('$7k,$8k,$9k,$10k,$Jk') ;Добавить +1 ко всем переменным в строке
	Case 2.1
		_Add_1('$7k,$8k,$9k,$10k,$Jk') ;Добавить +1 ко всем переменным в строке
EndSwitch


Func _Add_1($String)
	$variable = StringSplit($String, ',');Получаем в массив имена всех переменных
	For $i = 1 To $variable[0]
		$VarName = StringTrimLeft($variable[$i], 1);Убрать из имён переменных знак "$"
		Assign($VarName, Eval($VarName) + 1); Увеличить на 1 значение переменной по имени
	Next

EndFunc   ;==>_Add_1

ConsoleWrite($7k & '  ' & $8k & '  ' & $9k & '  ' & $10k & '  ' & $Jk & @CRLF)
 
Автор
RavdonikaS

RavdonikaS

Новичок
Сообщения
68
Репутация
4
ra4o сказал(а):
Возможно и глупость, но можно через функцию, например так :
Вполне неплохое решение
Если учесть что у меня этих Case 216 Штук а в каждом Сase может быть от 1до9 переменных то предложенная функция сократила мою писанину строк на 400
Пока что спасибо решение очень хорошо подошло
Может кто посоветует еще что то более короткое?
 
A

Alofa

Гость
RavdonikaS сказал(а):
... Если учесть что у меня этих Case 216 Штук а в каждом Сase может быть от 1до9 переменных...
Это не нормально. Вы сами составили скрипт, который загнал вас в угол. Для таких случаев существуют массивы.
Отвечать на данный вопрос не буду, потому что уверен - проблема не в данном куске кода, а во всем коде.
 
Автор
RavdonikaS

RavdonikaS

Новичок
Сообщения
68
Репутация
4
Alofa сказал(а):
Это не нормально. Вы сами составили скрипт, который загнал вас в угол. Для таких случаев существуют массивы.
Отвечать на данный вопрос не буду, потому что уверен - проблема не в данном куске кода, а во всем коде.
Там не совсем стандартная ситуация Это у меня некое подобие нейронной сети для распознавания карт(игральных)
Принцип у меня получился следующий: есть прямоугольник 12х18(карта) из этого прямоугольника вычленяются координаты точек которые обозначают букву или цифру достоинства карты и каждая такая точка в зависимости от местоположения добавляет +1 к той или иной карте т.е переменным $7k,$8k...$Qk,$Kk
В итоге получается та переменная которая при распознавании набрала больше всего очков и является картой на экране
Вот и выходит 12х18=216 точек относящихся к одной из 9 карт 216х9=1944 строки
Благо не все точки задействованы в написании буквы достоинства карты
Это пока еще сырой вариант пробую разные способы
 
A

Alofa

Гость
RavdonikaS сказал(а):
... Там не совсем стандартная ситуация
И тем не менее даже предоставленный вами кусок кода мог бы выглядеть так:
Код:
#include <Array.au3>
Global $aPlayCards[5][2] = [['$7k', 0], ['$8k', 0], ['$9k', 0], ['$10k', 0], ['$Jk', 0]] ; Это для примера 2D массив, в реале можно обойтись и 1D
_ArrayDisplay($aPlayCards, 'До')

$_K = 2.1
Switch $_K
	Case (1.1), (2.1)
		_AddValues(1)
EndSwitch

_ArrayDisplay($aPlayCards, 'После')

Func _AddValues($iValue)
	For $i = 0 To UBound($aPlayCards) - 1
		$aPlayCards[$i][1] += $iValue
	Next
EndFunc   ;==>_AddValues


С другой стороны попиксельный поиск считаю в вашем случае несовсем рациональным.
Вот почитайте: http://autoit-script.ru/index.php?topic=19819.msg118113#msg118113
 
Автор
RavdonikaS

RavdonikaS

Новичок
Сообщения
68
Репутация
4
В общем одолел
Все дело было в массивах как то туговато я их понимаю В примерах вроде бы все легко и понятно но когда пытаюсь приделать массивы к живому скрипту начинаются непонятности
Выкладываю может кому то пригодится
В дальнейшем из этого планирую сделать запоминалочку которая будет показывать на экране какие карты вышли из игры и какие остались у кого на руках (из тех которые светились на столе)
Код:
#include <WinAPIGdi.au3>
#include <Array.au3>
Global $nK, $Karta[9] =['6','7','8','9','10','J','Q','K','A'], $zKarta[9]
$iT = TimerInit()
_PixelSearchMult(582, 421, 12, 18, 0x535355, 85);Координаты прямоугольника, цвет и оттенок искомыхточек распознаваемой карты
$nArr=_ArrayMaxIndex($zKarta,1);Находим в массиве позицию карты которая набрала больший вес
ConsoleWrite($Karta[$nArr]& @LF);Выводим буквенное значение карты набравшей больший вес (распознанной)
ConsoleWrite(TimerDiff($iT) & @LF)

Func add($String)
    $nVar = StringSplit($String, ',');Получаем в массив карты к которым могут относиться найденные точки
    For $i = 1 To $nVar[0]
        $zKarta[_ArraySearch($Karta, $nVar[$i], 0, 0, 0, 1)]+=1 ;Добавляем +1 к весу возможной карты
    Next
EndFunc

Func _PixelSearchMult($i_X, $i_Y, $i_Width, $i_Height, $i_Color, $i_Shade = 0, $h_Wnd = 0, $f_FirstOnly = False)
  Local $i_Size = $i_Width * $i_Height, $a_Pixels[$i_Size + 1][2] = [[0]], $h_DC, $h_MemDC, $h_Bitmap, $t_Bits, $i_Index
  $h_DC = _WinAPI_GetDC($h_Wnd)
  $h_MemDC = _WinAPI_CreateCompatibleDC($h_DC)
  $h_Bitmap = _WinAPI_CreateCompatibleBitmap($h_DC, $i_Width, $i_Height)
  _WinAPI_SelectObject($h_MemDC, $h_Bitmap)
  _WinAPI_BitBlt($h_MemDC, 0, 0, $i_Width, $i_Height, $h_DC, $i_X, $i_Y, 0x00CC0020) ; $SRCCOPY
  _WinAPI_DeleteDC($h_MemDC)
  _WinAPI_ReleaseDC($h_Wnd, $h_DC)
  $t_Bits = DllStructCreate('dword[' & $i_Size & ']')
  _WinAPI_GetBitmapBits($h_Bitmap, 4 * $i_Size, DllStructGetPtr($t_Bits))
  _WinAPI_DeleteObject($h_Bitmap)
  If $i_Shade Then
    Local $a_RGB[3] = [BitAND(BitShift($i_Color, 16), 0xFF), BitAND(BitShift($i_Color, 8), 0xFF), BitAND($i_Color, 0xFF)]
    For $i = 1 To $i_Height - 1
      For $j = 1 To $i_Width - 1
        $i_Index += 1
        Local $i_Clr = BitAND(DllStructGetData($t_Bits, 1, $i_Index), 0x00FFFFFF)
        Switch BitAND(BitShift($i_Clr, 16), 0xFF)
          Case $a_RGB[0] - $i_Shade To $a_RGB[0] + $i_Shade
            Switch BitAND(BitShift($i_Clr, 8), 0xFF)
              Case $a_RGB[1] - $i_Shade To $a_RGB[1] + $i_Shade
                Switch BitAND($i_Clr, 0xFF)
                  Case $a_RGB[2] - $i_Shade To $a_RGB[2] + $i_Shade
                    $a_Pixels[0][0] += 1
						$_K=$j&"."&$i
						Zna4($_K)
                    If $f_FirstOnly Then ExitLoop 2
                EndSwitch
            EndSwitch
        EndSwitch
      Next
    Next
EndIf
EndFunc   ;==>_PixelGetArray

Func Zna4($_K)
		Switch $_K
			Case 1.1
				add('7,8,J,Q');Добавляет +1 к указанным картам
			Case 2.1
				add('8,J,Q')
			Case 3.1
			Case 4.1
			Case 5.1
			Case 6.1
			Case 7.1
			Case 8.1
			Case 9.1
			Case 10.1
			Case 11.1
			Case 12.1
			Case 1.2
			Case 2.2
				add('8,J,Q')
			Case 3.2
			Case 4.2
			Case 5.2
			Case 6.2
			Case 7.2
			Case 8.2
				add('6')
			Case 9.2
				add('J,Q')
			Case 10.2
				add('8,J,Q')
			Case 11.2
				add('J,Q')
			Case 12.2
			Case 1.3
			Case 2.3
			Case 3.3
				add('8,J,Q')
			Case 4.3
			Case 5.3
			Case 6.3
			Case 7.3
				add('7')
			Case 8.3
				add('7')
			Case 9.3
				add('8,Q')
			Case 10.3
				add('8,6')
			Case 11.3
				add('8,6')
			Case 12.3
			Case 1.4
				add('8,Q')
			Case 2.4
				add('7')
			Case 3.4
				add('7')
			Case 4.4
				add('8,J,Q')
			Case 5.4
			Case 6.4
			Case 7.4
				add('7')
			Case 8.4
				add('7')
			Case 9.4
				add('9')
			Case 10.4
				add('9')
			Case 11.4
				add('6')
			Case 12.4
			Case 1.5
			Case 2.5
				add('7,8')
			Case 3.5
				add('7')
			Case 4.5
				add('7,Q')
			Case 5.5
				add('8,J,Q')
			Case 6.5
			Case 7.5
			Case 8.5
				add('7')
			Case 9.5
				add('7')
			Case 10.5
				add('8')
			Case 11.5
				add('8,6')
			Case 12.5
			Case 1.6
				add('6')
			Case 2.6
				add('7,8')
			Case 3.6
				add('7,8')
			Case 4.6
				add('7')
			Case 5.6
				add('7')
			Case 6.6
				add('8')
			Case 7.6
			Case 8.6
				add('7')
			Case 9.6
				add('7')
			Case 10.6
			Case 11.6
				add('8')
			Case 12.6
			Case 1.7
				add('8,6')
			Case 2.7
				add('8,6')
			Case 3.7
				add('7,8')
			Case 4.7
			Case 5.7
				add('7')
			Case 6.7
				add('7')
			Case 7.7
			Case 8.7
			Case 9.7
				add('7')
			Case 10.7
				add('7')
			Case 11.7
			Case 12.7
			Case 1.8
				add('8')
			Case 2.8
				add('8,6')
			Case 3.8
				add('7,8,6')
			Case 4.8
				add('8')
			Case 5.8
				add('8')
			Case 6.8
				add('7')
			Case 7.8
				add('7')
			Case 8.8
			Case 9.8
			Case 10.8
				add('7')
			Case 11.8
				add('7')
			Case 12.8
			Case 1.9
				add('8')
			Case 2.9
				add('8')
			Case 3.9
				 add('7,6')
			Case 4.9
				 add('7,6')
			Case 5.9
				add('8')
			Case 6.9
				add('8')
			Case 7.9
				add('7')
			Case 8.9
				add('7')
			Case 9.9
			Case 10.9
			Case 11.9
				add('7')
			Case 12.9
			Case 1.10
				add('8,Q')
			Case 2.10
				add('8,Q')
			Case 3.10
				add('7')
			Case 4.10
				 add('7,6')
			Case 5.10
				 add('6')
			Case 6.10
				add('8')
			Case 7.10
				add('8,Q')
			Case 8.10
				add('7')
			Case 9.10
			Case 10.10
			Case 11.10
			Case 12.10
			Case 1.11
			Case 2.11
				add('7')
			Case 3.11
				add('7,8,Q')
			Case 4.11
				add('7,8')
			Case 5.11
				add('6')
			Case 6.11
				add('6')
			Case 7.11
				add('8,Q')
			Case 8.11
				add('7')
			Case 9.11
			Case 10.11
			Case 11.11
			Case 12.11
			Case 1.12
			Case 2.12
			Case 3.12
			Case 4.12
				add('7,8,Q')
			Case 5.12
				 add('7,8,J,Q')
			Case 6.12
				add('8,$J,Q')
			Case 7.12
				add('8,Q')
			Case 8.12
				add('7')
			Case 9.12
			Case 10.12
			Case 11.12
			Case 12.12
			Case 1.13
			Case 2.13
			Case 3.13
			Case 4.13
			Case 5.13
				add('7')
			Case 6.13
				add('J,Q')
				add('6')
			Case 7.13
				add('J,Q')
			Case 8.13
				add('7')
			Case 9.13
				add('7')
			Case 10.13
				add('7')
			Case 11.13
			Case 12.13
			Case 1.14
			Case 2.14
			Case 3.14
			Case 4.14
			Case 5.14
				add('6')
			Case 6.14
				add('6')
			Case 7.14
				add('6')
			Case 8.14
			Case 9.14
				add('7')
			Case 10.14
				add('7')
			Case 11.14
				add('7')
			Case 12.14
			Case 1.15
				add('7')
			Case 2.15
			Case 3.15
			Case 4.15
			Case 5.15
			Case 6.15
			Case 7.15
				 add('7,8,6')
			Case 8.15
				 add('7,8,J,Q')
			Case 9.15
				add('7,Q')
			Case 10.15
			Case 11.15
			Case 12.15
			Case 1.16
			Case 2.16
			Case 3.16
				add('6')
			Case 4.16
			Case 5.16
			Case 6.16
			Case 7.16
				 add('7,8,J,Q')
			Case 8.16
				 add('7,8,J,Q')
			Case 9.16
				 add('7,8,J,Q')
			Case 10.16
				 add('7,8,J,Q')
			Case 11.16
				add('7')
			Case 12.16
			Case 1.17
			Case 2.17
			Case 3.17
			Case 4.17
				 add('7,8,6')
			Case 5.17
			Case 6.17
				 add('7,8,Q')
			Case 7.17
				 add('7,8,J,Q')
			Case 8.17
				 add('7,8,J,Q')
			Case 9.17
				 add('7,8,J,Q')
			Case 10.17
				 add('7,8,J,Q')
			Case 11.17
				 add('7,8,J,Q')
			Case 12.17
		EndSwitch
EndFunc
 
Автор
RavdonikaS

RavdonikaS

Новичок
Сообщения
68
Репутация
4
Alofa сказал(а):
Таким макаром скрипт у вас никогда не найдет '10', 'K', 'A'.[/off]
Это же я только пробовал работоспособность на '6','7','8','J','Q'
Координаты остальных карт не проблема дописать
 
Верх