Author Topic: помогите мне вылечиться от goto  (Read 30705 times)

0 Members and 2 Guests are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #60 on: September 12, 2014, 09:04:06 AM »
кстати ошибка там не нарочно получилась я просто между кликером и JAVA мечусь поэтому синтаксис в кликере забываю если не подглядывать в справку, но прогресс на лицо =)
а я между питоном...


Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #61 on: September 12, 2014, 12:29:02 PM »
Очень не хочется отрывать вас от JAVA и питона, но у меня продолжение проблемы... Я думал, что я понял с флагами всё, но нет...
Вот пример моего макроса для проверки того, что я понял:

Code: (clickermann) [Select]
SUB(MYSUB)
   MYSUB:
   WAITMS(1000)
   GETSCREEN
   IF_PIXEL_IN(933,115, 933,115, 1255211)  // Несуществующий на самом деле пиксель.
   Else
      $1 = 0  // То, как я всё понял, по идее должен был бы сработать высокий сигнал, но каждый раз срабатывает только низкий...
      WAITMS(1000)
      BEEP(300,200) // Низкий сигнал
   END_IF
   GOTO(MYSUB)
END_SUB

MYSUB()

1:

GETSCREEN
IF_PIXEL_IN(1375,23, 1375,23, 10217469)  // Несуществующий на самом деле пиксель.
Else
BEEP(800,200) // Высокий сигнал
   WAITMS(1000)
END_IF

Что я недопонял, ребят...?
« Last Edit: September 12, 2014, 12:33:44 PM by Hito »
Я не ду... Потому и не бу...

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #62 on: September 12, 2014, 12:39:35 PM »
а ты видишь переход к 1: ? я не вижу то что ты флаг поставил ты же его нигде не проверяешь ты просто установил флаг и дальше делаешь свои дела зацикливая подпрограмму.
ты путаешь флаги и метки для goto

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #63 on: September 12, 2014, 12:44:26 PM »
а ты видишь переход к 1: ? я не вижу то что ты флаг поставил ты же его нигде не проверяешь ты просто установил флаг и дальше делаешь свои дела зацикливая подпрограмму.
ты путаешь флаги и метки для goto
А как его проверить?

Вот подскажи, на примере этого скрипта, плиз:

Code: (clickermann) [Select]
SUB(MYSUB)
   MYSUB:
   WAITMS(1000)
   GETSCREEN
   IF_PIXEL_IN(933,115, 933,115, 1255211)
   Else
      $1 = 0  // То, как я всё понял, по идее должен был бы сработать высокий сигнал каждый раз, но он срабатывает лишь 1 раз...
      WAITMS(1000)
      BEEP(300,200) // Низкий сигнал
   END_IF
   GOTO(MYSUB)
END_SUB

1:

GETSCREEN
IF_PIXEL_IN(1375,23, 1375,23, 10217469)
Else
   BEEP(800,200) // Высокий сигнал
   WAITMS(1000)
   MYSUB()
END_IF
« Last Edit: September 12, 2014, 01:12:07 PM by Hito »
Я не ду... Потому и не бу...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #64 on: September 12, 2014, 12:54:08 PM »
Ребят, я понимаю, что мне наверняка это уже показывали в других примерах, но... Простите пожалуйста мне мою невнимательность.  Вот на этом покажите плиз.
« Last Edit: September 12, 2014, 01:11:28 PM by Hito »
Я не ду... Потому и не бу...

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #65 on: September 12, 2014, 01:32:44 PM »
посмотри на мой схематичный рисунок  флаг я устанавливаю в начале а потом дальше уже когда мне надо решить что делать в зависимости от флага я его проверяю ifом.

эдакая отложенная реакция, в флаг я записал состояние какой то штуки,а потом когда мне понадобилось учесть состояние флага я его проверяю.

если тебе надо сразуже среагировать на изменения то зачем устанавливать флаг если ты сразу можешь использовать конструкцию if{} else{} end_if

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #66 on: September 12, 2014, 01:55:55 PM »
посмотри на мой схематичный рисунок  флаг я устанавливаю в начале а потом дальше уже когда мне надо решить что делать в зависимости от флага я его проверяю ifом.

эдакая отложенная реакция, в флаг я записал состояние какой то штуки,а потом когда мне понадобилось учесть состояние флага я его проверяю.

если тебе надо сразуже среагировать на изменения то зачем устанавливать флаг если ты сразу можешь использовать конструкцию if{} else{} end_if
Нифига не понял... Ты можешь показать на примере этого скрипта?
Code: (clickermann) [Select]
SUB(MYSUB)
   MYSUB:
   WAITMS(1000)
   GETSCREEN
   IF_PIXEL_IN(933,115, 933,115, 1255211)
   Else
      $1 = 0  // То, как я всё понял, по идее должен был бы сработать высокий сигнал каждый раз, но он срабатывает лишь 1 раз...
      WAITMS(1000)
      BEEP(300,200) // Низкий сигнал
   END_IF
   GOTO(MYSUB)
END_SUB

1:

GETSCREEN
IF_PIXEL_IN(1375,23, 1375,23, 10217469)
Else
   BEEP(800,200) // Высокий сигнал
   WAITMS(1000)
   MYSUB()
END_IF
« Last Edit: September 12, 2014, 01:59:37 PM by Hito »
Я не ду... Потому и не бу...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #67 on: September 12, 2014, 01:58:59 PM »
если тебе надо сразуже среагировать на изменения то зачем устанавливать флаг если ты сразу можешь использовать конструкцию if{} else{} end_if
В моем скрипте нет никаких изменений. Там везде (по моей задумке), при замкнутой подпрограмме, должна происходить реакция на то, что нужных пикселей нет, и в подпрграмме, и после метки "1:"
« Last Edit: September 12, 2014, 02:01:41 PM by Hito »
Я не ду... Потому и не бу...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #68 on: September 12, 2014, 02:13:25 PM »
Ну или вот, например... http://crapware.aidf.org/forum/index.php?topic=1404.msg7080#msg7080

Code: (clickermann) [Select]
SUB(бухаем)
   $падения = 0
   WHILE($ВРЕМЯ < ПОЗДНО)
      // гуляем
      // пьём
      // жрём
      // танцуем
      IF(упали?)  // И это что такое? Это типа так должно быть? - IF($падения?)
         $падения = 1
         $ВРЕМЯ = 999999
      END_IF
   END_CYC
END_SUB

бухаем()

IF($падения = 1) // Не понимаю этой команды... Что она проверяет? Нет никакого условия, по которому мы проверили бы - падали мы, или нет. Куда поставить IF_PIXEL_IN для проверки?
   GOTO(идём заклеивать синяки)
END_IF
« Last Edit: September 12, 2014, 02:18:23 PM by Hito »
Я не ду... Потому и не бу...

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #69 on: September 12, 2014, 02:18:45 PM »
глаза разуй 8 строка, дословно перевожу если упали то падения=1
16 строка, падения =1 значит значит надо синяки лечить если 8 строка не сработала значит можно калдырить дальше

честно задолбал
ты вкури свой код что он у тебя и как делает тебе уже милиард примеров сделали но толку НОЛЬ.
Code: (clickermann) [Select]
SUB(MYSUB)
   MYSUB:
   WAITMS(1000)
   GETSCREEN
   IF_PIXEL_IN(933,115, 933,115, 1255211) // 5) ищет и ненаходит картинку
   Else
      $1 = 0  // нахрена этот флаг если никто его не проверяет
      WAITMS(1000)
      BEEP(300,200) // 6) пищит
   END_IF
   GOTO(MYSUB) // 7) возврат к началу подпрограммы и повтор с пункта 5 !!!!!!! бесконечный цикл!!!!
END_SUB
 
1:// 1)запускается скрипт
 
GETSCREEN
IF_PIXEL_IN(1375,23, 1375,23, 10217469) // 2)ищет картинку
Else
   BEEP(800,200) // Высокий сигнал // 3) не находит и пищит
   WAITMS(1000)
   MYSUB() // 4) вызывается подпрограмма
END_IF

мой последний пост в этой ветке, пациент хронически болен, лечение: изоляция от общества либо игра в шахматы до включения мозга пациента

Atas

  • Активный участник
  • ***
  • Posts: 147
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #70 on: September 12, 2014, 02:25:22 PM »
Немного не успел с ответом, но всетаки выложу.
[spoiler]

Просто добавил комментарии, не меняя скрипта.
Code: (clickermann) [Select]
SUB(MYSUB) // Начало описания подпрограммы "MYSUB"
   MYSUB:
   WAITMS(1000)
   GETSCREEN
   IF_PIXEL_IN(933,115, 933,115, 1255211) // Поиск на экране пикселя с кодом цвета 1255211
      // Если такой пиксель есть, то ничего не делаем
   Else
      $1 = 0 // Переменной $1 присваивается значение 0, которую нигде не используем (если небыло присвоения ранее, то значение итак равно нулю)
      WAITMS(1000)
      BEEP(300,200) // Если такого пикселя нет, то воспроизводим Низкий сигнал
   END_IF
   GOTO(MYSUB) // Переход на метку "MYSUB:" внутри подпрограммы (это зацикливает скрипт и выхода отсюда нет)
END_SUB // Конец описания подпрограммы "MYSUB"

//--------------------------------
// С этого места начинается выполнение сценария (выше было описание подпрограмм)

1: // Метка для перехода инструкцией GOTO (нигде в скрипте перехода на нее нет)

GETSCREEN
IF_PIXEL_IN(1375,23, 1375,23, 10217469) // Поиск на экране пикселя с кодом цвета 10217469
// Если такой пиксель есть, то ничего не делаем
Else
   BEEP(800,200) // Если такого пикселя нет, то воспроизводим Высокий сигнал
   WAITMS(1000)
   MYSUB() // Вызываем подпрограмму "MYSUB", которая будет выполняться бесконечно
END_IF

Получается, что выполнение сценария "болтается" бесконечно между строками скрипта GOTO(MYSUB) и MYSUB: .
Операция присвоения переменной $1 значения 0, это не есть переход на метку 1: . И если это флаг для проверки чего либо, то в этом скрипте проверка нигде увы не происходит.
Я предположил, что это весь скрипт, а не маленький кусок большого скрипта.
[/spoiler]

Думаю надо просто написать правильный скрипт с подробными комментариями.
Всё получится, главное не париться.  :)
P.S. Сегодня же пятница!!! :) :) :)
« Last Edit: September 12, 2014, 02:30:44 PM by Atas »

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #71 on: September 12, 2014, 02:27:37 PM »
глаза разуй 8 строка, дословно перевожу если упали то падения=1
16 строка, падения =1 значит значит надо синяки лечить если 8 строка не сработала значит можно калдырить дальше

Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(0,0, $_xmax,$_ymax, 255) // Упали!
  LCLICK($_return1, $_return2)
  WAITMS(100)
Else //  НЕ упали!
  WAITMS(100)
END_IF

Вот на этом скрипте есть команда, благодаря которой мы можем увидеть - падали мы, или нет!!! Команда ищет пиксель на экране и вычисляет это!!!

Как вычисляется падение на ЭТОМ скрипте???!!!

Code: (clickermann) [Select]
SUB(бухаем)
   $падения = 0
   WHILE($ВРЕМЯ < ПОЗДНО)
      // гуляем
      // пьём
      // жрём
      // танцуем
      IF(упали?)  // И это что такое? Это типа так должно быть? - IF($падения?)
         $падения = 1
         $ВРЕМЯ = 999999
      END_IF
   END_CYC
END_SUB

бухаем()

IF($падения = 1) // Не понимаю этой команды... Что она проверяет? Нет никакого условия, по которому мы проверили бы - падали мы, или нет. Куда поставить IF_PIXEL_IN для проверки?
   GOTO(идём заклеивать синяки)
END_IF

Я не заставляю тебя реагировать на мое непонимание вопроса! Но глаза мои по жизни открыты настолько, что они видели намного больше твоего!
« Last Edit: September 12, 2014, 02:30:49 PM by Hito »
Я не ду... Потому и не бу...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #72 on: September 12, 2014, 02:40:17 PM »
Code: (clickermann) [Select]
SUB(бухаем)
   $падения = 0
   WHILE($ВРЕМЯ < ПОЗДНО)
      // гуляем
      // пьём
      // жрём
      // танцуем
      IF(упали?)  // И это что такое? Это типа так должно быть? - IF($падения?)
         $падения = 1
         $ВРЕМЯ = 999999
      END_IF
   END_CYC
END_SUB

бухаем()

IF($падения = 1)
   GETSCREEN
   IF_PIXEL_IN(0,0, $_xmax,$_ymax, 255) // Падали
      WAITMS(100)
      GOTO(идём заклеивать синяки)
   END_IF
END_IF

Так чтоли...
Я не ду... Потому и не бу...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #73 on: September 12, 2014, 03:00:26 PM »
 :'(
Я не ду... Потому и не бу...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: помогите мне вылечиться от goto
« Reply #74 on: September 12, 2014, 04:27:28 PM »
Не так. Не в последее условие, а на место 8 строки. Это же абстрактный пример.
Можно искать пиксел пола перед носом (как ты хочешь сделать)
Code: (clickermann) [Select]
   GETSCREEN
  IF_PIXEL_IN(0,0, $_xmax,$_ymax, 255) // Падали
...

А можно и у друга спросить
Code: (clickermann) [Select]
IF(упали?)
...

Абстрактные примеры не нужно так подробно пережевывать.

Я кажется понял что ты не понял  :D ;D
вот здесь http://crapware.aidf.org/forum/index.php?topic=1404.msg7031#msg7031
Вот я начал просматривать скрипт и дошел до команды - "$Time_Out = 1" и сразу в голове вопрос - "Эт че такое?..."
$Time_Out = 1 и Time Out:   это разные вещи никак не связанные друг с другом. Перваое - переменная, второе ссылка для GOTO, просто их назвали одинаково чтобы не путаться. Связать логически ты уже должен их сам через условие.

Так же и дальше у тебя http://crapware.aidf.org/forum/index.php?topic=1404.msg7107#msg7107
Code: (clickermann) [Select]
$1 = 0 .....это просто переменная с именем "$1". Никакого отношения к ссылке 1: она не имеет, никуда автоматом не переводит и никак не влияет. И может называться не $1, а хоть $vasya_pupkin

В этом примере    http://crapware.aidf.org/forum/index.php?topic=1404.msg7107#msg7107
показать что такое флаг бессмысленно, флаг нужен там где есть 2 и больше вариантов развития событий, а там у тебя один цикл через GOTO без вариантов.

Ну последний пример
Code: (clickermann) [Select]
SUB(MYSUB)
   IF_PIXEL_IN(933,115, 933,115, 10217469)
      $vasya_pupkin = 1
   Else
      $vasya_pupkin = 0
   END_IF
END_SUB



MYSUB()
IF($vasya_pupkin = 1)
   BEEP(300,200) // Низкий сигнал
Else
   $vasya_pupkin = 0
   BEEP(800,200) // Высокий сигнал
END_IF

если  найдёт цвет 10217469  будет низкий сигнал, иначе - высокий.

Всё, хорошь. Если никак, то забей и жди пока Джонни введёт команды return для саба и break/continue для циклов.

P.S. Если это троллизм, то мне по барабану. Мне не зазорно попасться на троллинг, смущённо чувствовать я себя не буду. В любом случае всегда исхожу из того, что собеседник нормальный.