Author Topic: Решено: Прошу подсказки, компоновка переменных  (Read 5032 times)

0 Members and 2 Guests are viewing this topic.

blazzed

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
    • Хронология :)
Доброго времени суток!
Возникла недавно задача считать 36 точек с экрана (квадрат 6х6) и найти одинаковые. Координаты точек я узнал, но как их получить?

Вот пример скрипта (цикл в цикле)
Code: (clickermann) [Select]
$x = 100
$y= 100
$c = -41
$d = -41

GETSCREEN

FOR ($a, $a <6)
   Inc ($d, 41)
   $c = -41
   FOR ($b, $b <6)
      Inc ($c, 41)
     
     
      $var$a$b = pxl ($x+307+$c,$y+144+$d)
      LOGWRITE ("a = ",$a , " b = ", $b, " " ,$var$a$b)
     
   END_CYC
END_CYC

Вызов любой переменной (к примеру, $var10) возвращает ноль.

Кто сталкивался с такой проблемой, подскажите, в чём ошибка?
« Last Edit: March 12, 2014, 06:14:43 PM by blazzed »

Крис Тинка

  • Активный участник
  • ***
  • Posts: 171
    • View Profile
Кликерман так не работает с переменными, тебе нужно использовать массивы.

Code: (clickermann) [Select]
$x = 100
$y= 100
$c = -41
$d = -41
define($n)
GETSCREEN
 
FOR ($a, $a <6)
   Inc ($d, 41)
   $c = -41
   FOR ($b, $b <6)
      Inc ($c, 41)

      $var[$n] = pxl ($x+307+$c,$y+144+$d)
      LOGWRITE ("a = ",$a , " b = ", $b, " " ,$var[$n])
      INC($n)
   END_CYC
END_CYC
halt
« Last Edit: March 08, 2014, 06:05:41 AM by Крис Тинка »

blazzed

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
    • Хронология :)
тебе нужно использовать массивы.

Да, но тут жёсткая привязка к расположению точек. Если бы можно было создать двумерный массив, то этого вопроса не было. А мне на основе каждой точки надо найти по определённым шаблонам две соседние, у которых такие же пиксели.
Пример:
Code: (clickermann) [Select]
FOR ($a, $a<6)
FOR ($b, $b<6)
IF (($var$a$b = $var$a-1$b+1) & ($var$a$b = $var$a$b+2))
LOGWRITE ("BINGO ", $a,$b, " ", $a+1,$b, " ", $a+1,$b+1)
HALT
END_IF
END_CYC
END_CYC

P.S. Это всё делается для игры 3 в ряд, где есть поле размером 6х6.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile

Крис Тинка

  • Активный участник
  • ***
  • Posts: 171
    • View Profile
Ну тогда так:
Code: (clickermann) [Select]
$x = 100
$y= 100
$c = -41
$d = -41

GETSCREEN

FOR ($a, $a <6)
   Inc ($d, 41)
   $c = -41
   FOR ($b, $b <6)
      Inc ($c, 41)
     
     
      $var[10*$a + $b] = pxl ($x+307+$c,$y+144+$d)
      LOGWRITE ("a = ",$a , " b = ", $b, " " ,$var[10*$a + $b])
     
   END_CYC
END_CYC
HALT

blazzed

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
    • Хронология :)
Посмотри здесь
http://crapware.aidf.org/forum/index.php?topic=1047.0

Огромное спасибо, даёт ответы на все мои вопросы  :D


Крис Тинка, спасибо за
Code: (clickermann) [Select]
$var[10*$a + $b]Его стоит взять на вооружение... Во всяком случае до тех пор, пока не будут реализованы двухмерные массивы

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Крис Тинка, спасибо за
Code: (clickermann) [Select]
$var[10*$a + $b]Его стоит взять на вооружение... Во всяком случае до тех пор, пока не будут реализованы двухмерные массивы
Только не
Code: (clickermann) [Select]
$var[10*$a + $b]а
Code: (clickermann) [Select]
$var[6*$a + $b]


blazzed

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
    • Хронология :)
Только не
Code: (clickermann) [Select]
$var[10*$a + $b]а
Code: (clickermann) [Select]
$var[6*$a + $b]

Как раз 10*$a, тогда у нас любая переменная будет иметь порядочный вид (12, 44, 32, 65, и т.д.) И мы сможем, зная место в массиве, вытащить её в любой момент.
Во всяком случае, для меня более понятная логика (первая цифра - ряд, вторая строка)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Ааааа. Ну если мыслить частностями. Я же расчитываю на все случаи жизни. А если будет 12 на 12 ???

Тем более мне плевать какая там строка, всё равно перебираем переменные в цикле. Я к конкретной вручную не обращаюсь.
Что-то типа $map[$sost_X+$sost_Y*$max_X]
« Last Edit: March 12, 2014, 05:22:30 PM by Vint »


blazzed

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
    • Хронология :)
Ааааа. Ну если мыслить частностями. Я же расчитываю на все случаи жизни. А если будет 12 на 12 ???

Тем более мне плевать какая там строка, всё равно перебираем переменные в цикле. Я к конкретной вручную не обращаюсь.
Что-то типа $map[$sost_X+$sost_Y*$max_X]

Ну если будет 12 на 12, то можно использовать 1000*$a+$b (1212 в данном случае, или 1001 для $a=1, $b=1). Данное соответствие необходимо больше для наглядности логики решения задачи, чем для какой-то функциональной нагрузки.

В любом случае, спасибо за скрипт. Там есть реализация того, что я хотел получить. Хотя и немного в другой форме. В свободное время попытаюсь осилить его и модифицировать под свои нужды  :)