Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Johnny

Pages: 1 ... 29 30 [31] 32 33 ... 40
451
Учебные статьи / Re: Массивы
« on: October 13, 2013, 09:16:44 AM »
ключевой момент в том, какого типа значение присваивается первый раз.
если инициализировать строкой, то все будет работать как в 4.7
то есть наоборот

$a = "тест"
$a = 1
print($a + 2)

в принципе, кстати, этот момент я могу исправить и вернуть как было в 4.7. но на сей раз придется пожертвовать оперативной памятью :D
а вообще, если развивать проект дальше до уровня чего-то маломальски похожего на язык программирования, то придется отказаться от такой халявы и вводить жесткие типы данных. как минимум поделить на строковый и численный (его в свою очередь можно поделить на дробный и целочисленный). без этого мы лишаемся возможности более плотно взаимодействовать с системой, в которой все типы данных четко регламентированы.

452
Учебные статьи / Re: Массивы
« on: October 13, 2013, 09:05:10 AM »
ключевой момент в том, какого типа значение присваивается первый раз.
если инициализировать строкой, то все будет работать как в 4.7
то есть наоборот

$a = "тест"
$a = 1
print($a + 2)

в принципе, кстати, этот момент я могу исправить и вернуть как было в 4.7. но на сей раз придется пожертвовать оперативной памятью :D
а вообще, если развивать проект дальше до уровня чего-то маломальски похожего на язык программирования, то придется отказаться от такой халявы и вводить жесткие типы данных. как минимум поделить на строковый и численный (его в свою очередь можно поделить на дробный и целочисленный). без этого мы лишаемся возможности более плотно взаимодействовать с системой.

453
Использование / Re: Помогите пожалуйста)
« on: October 11, 2013, 04:34:11 PM »
1. сто милионов раз оговаривалось что оконный режим - оче хитрая штука и совсем не факт что будет работать. как ты правильно заметил, далеко не во всех приложениях и зависит это от самих приложений
2. раз уж ты решил попробовать массивов, то будь добр пример копируй целиком потмоу что вместо условия там идет цикл while. а так у тебя действительно поулчится полная фигня

454
Разрешите поинтересоваться. У вас интерес практический или академический?
Я за свои эээ 10+ лет программирования ни разу не использовал даже трех мерный массив.  Неск раз использовал двух мерный (и то помоему в годы обучения, игрушки какие то делал "клеточные"). Четырех мерный (и больше) массив человеческий мозг уже не в состоянии представить.

К тому же как я уже говорил, оперативная память это одномерный массив. Поэтому все эти мерности все равно лишь условность. Любой массив одномерен а все эти измерения лишь избавляют от необходимости писать каждый раз формулу оффсета (смещения).

например для $var_2d[N, M] где N номер строки а M столбца, "одномерная"  формула смещения будет $var_1d [N * кол-во элементов на строку + M]

455
Учебные статьи / Массивы
« on: October 08, 2013, 12:44:28 PM »
последняя редакция: 21.03.2014

Вводная часть

В версии 4.8 были введены массивы. Для начала классическое школьное определение. Массив (англ. Array) – это набор однотипных данных, расположенных в памяти друг за другом. При этом, благодаря этому «друг за другом», каждый элемент массива имеет свой порядковый номер (индекс, смещение). По сути, этот номер определяет смещение элемента массива в памяти относительно его (массива) начала, но вам не стоит вникать во все эти сложности, потому что как обычно, все нюансы «сложного программирования» Clickermann обрабатывает сам.

Итак массив, как и переменная, имеет собственное имя. Правила для имен массивов такие же как и для переменных. При этом, после указания имени массива, в квадратных скобках задается индекс элемента для получения его значения (или соотв. присвоения).

Рассмотрим пример

Code: (clickermann) [Select]
$arr[0] = 1
$arr[1] = 2
$arr[2] = 3
$arr[3] = 4
$arr[4] = 5

Здесь мы разместили в массиве $arr пять элементов. Обратите внимание что индексация массива начинается (как и в С++) с нуля.
Теперь, к примеру, если мы сделаем следующую операцию

Code: (clickermann) [Select]
Print( $arr[1] )
То в лог выведется «2». По аналогии с переменными, элементы массива могут становиться аргументами функций и процедур, участниками условий и вычислений. Вы можете спросить в чем же тогда удобство? Ну, например, вышеозначенный массив имеет пять элементов, которые мы могли бы заменить переменными $arr1($arr2, …). Тогда их вывод имел бы вид

Code: (clickermann) [Select]
Print($arr1)
Print($arr2)
Print($arr3)
Print($arr4)
Print($arr5)

Уже смотрится не очень. А если бы переменных было штук пятьдесят?
Однако в случае с массивом все намного проще. Мы просто прогоним весь массив в цикле

Code: (clickermann) [Select]
For($i, $i<5)
  Print( $arr[ $i ] )
End_cyc

Да, индексный параметр в квадратных скобках так же поддерживает вычисления и переменные, что существенно облегчает нам жизнь. Три строчки кода против пяти для нашего примера. И те же три строчки против пятидесяти были бы если бы у нас было, как я говорил, пятьдесят переменных.


Объявление и доступ

Что будет если выскочить за пределы массива? В том же С++ программа при работе выдала бы ошибку доступа к виртуальной памяти. Однако в нашем случае это просто вернуло бы «0» (не уверен, что всегда).

Массивы в Clickermann являются динамическими. Поскольку, как вы уже знаете, Clickermann лишен необходимости объявлять заранее переменные (и вообще что либо… хотя не гарантирую такую халяву в будущем… шов уже трещит), то это же правило распространяется и на массивы.

Вы можете например задать массив на семь элементов таким образом

Code: (clickermann) [Select]
$arr[6] = 5
При этом элементы массива 0,1,2,3,4,5 будут содержать т.н. мусор, то есть данные, лежащие в оперативной памяти до выполнения нашего кода. Это происходит потому что память массиву присваивается, но никакие значения в нее пока не кладутся и там хранится старая мусорная информация. Данный массив так же можно растянуть еще до десяти элементов

Code: (clickermann) [Select]
$arr[8] = 32
$arr[9] = 43

Однако это работает только в одну сторону. Чтобы обрезать массив потребуется вызвать спец функции. Поговорим о них.

Функции работы с массивом

Для начала я напомню, что массив имеет собственное имя (та часть, что без квадратных скобок). Некоторые функции работы с массивом имеют в качестве аргумента именно имя массива, а не какой-то его конкретный элемент.

Функция arrsize($arr)

Поскольку массивы могут легко менять размер, то данная функция необходима. Вызвав ее, мы получим количество элементов в массиве. Крайне простой пример.

Code: (clickermann) [Select]
$arr[0] = 12
$arr[5] = 123

Print( arrsize($arr) ) // вернет «6»

К слову сказать, если размерность массива 1, то это по сути переменная. И с ним можно работать как с переменной (запись «$arr[0]» в данном случае будет эквивалента «$arr»)

Процедура arrpush($arr, value)

Данная процедура добавляет новый элемент в конец массива. Каждый ее вызов соответственно увеличивает размер массива на 1. Вот пример

Code: (clickermann) [Select]
Arrpush($arr, 1)
Arrpush($arr, 2)
Arrpush($arr, 3)

Print( $arr[1] ) // вернет «2»
Print( arrsize($arr) ) // вернет «3»

Таким образом, можно особо и не возиться с индексами чтобы заполнить массив

Функция arrpop($arr)

Данная функция возвращает последний элемент массива, при этом удаляя его из массива, уменьшая, таким образом, его размерность на 1. Да, именно так можно обрезать (или целиком вообще вычистить) массив. Стоит понимать, что эта функция выдает элементы в обратном порядке (т.к. после удаления последним элементом становится предыдущий).

Code: (clickermann) [Select]
Arrpush($arr, 1)
Arrpush($arr, 2)

Print( arrpop($arr) ) // «2»
Print( arrpop($arr) ) // «1»

Но самое главное, что с помощью этих двух функций – arrpush и arrpop – можно без труда организовать самый натуральный стэк. Это тема отдельной беседы, потому что стэк (и регистры) фундаментальные понятия микропрограммирования. Нам же нужно помнить, что стэк, это стопка. Если положить то только сверху. Если взять, то только сверху. Если нужен предпоследний элемент, извольте сначала «снять с него» последний. Можете почитать Вики, если интересно, http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D0%BA

Процедуры scanpicture и scanpxl

Ну и наконец две самые вкусные функции, призванные, наконец, если не заменить, то дополнить два самых старейших костыля if_pixel_in и if_picture_in. Они конечно работают и на них построено огромное количество скриптов, однако у них есть один существенный недостаток – они находят только один элемент. Точнее первый. Например, как только наличие картинки на экране будет установлено, дальнейший анализ прекращается. Продвинутые пользователи конечно выходили из ситуации, играясь с координатами поиска, но это все не то (хотя безусловно полезно для общего развития).

Теперь разберем рассмотрим следующий скрипт

Code: (clickermann) [Select]
getscreen

scanpicture($var, 0,0, 1250,959, "pict.bmp")

while (arrsize($var) > 0)
  $y = arrpop($var)
  $x = arrpop($var)
  lclick($x, $y)
end_cyc

Этот короткий скрипт реализует очень большой геморрой. Он ищет в заданной области все экземпляры картинки pict.bmp и последовательно кликает на каждую из них. Разберем его по порядку. Прежде всего обратите внимание на новую процедуру scanpicture. Ее синтаксис схож с if_picture_in за тем исключением, что первым параметром идет массив. В этот массив процедура последовательно добавляет (через внутренний вызов arrpush) координаты каждого найденного экземпляра искомого изображения. Таким образом после выполнения scanpicture, входной массив $var будет содержать N пар координат x,y, где N количество найденных картинок.

Полученный массив можно представить схематически так:
[x1, y1, x2, y2, … , xN, yN] где x,y – пара координат

Далее необходимо всю эту кучу пробежать. Удобнее всего, как известно, перебирать массивы в цикле. Организуем цикл while с условием arrsize($var) > 0. Это будет оптимально по тому что позволит сразу проскочить тело цикла, если ничего не найдено. Стоит заметить что arrsize вернет значение N * 2, потому что эта функция возвращает длину массива и ее не волнует наше представление данных (в данном случае имеется ввиду что i – это координата X, i+1 – координата Y).
Далее мы в теле цикла вызываем arrpop($var) таким образом выдергивая последнюю координату Y и уменьшая длину цикла на 1. Следующий вызов arrpop вернет уже координату X последней пары (про работу стэка я уже рассказывал выше, вот это типичный пример). Таким образом в координатах $x, $y у нас лежат координаты последней найденной картинки. А поскольку arrpop уже удалил эту пару из массива, то сейчас там в самом конце лежат уже координаты предыдущей картинки. Таким образом извлекаются все координаты найденных картинок. И когда будет извлечена последняя пара, arrsize вернет 0 и цикл закончится.

Как видите разжевывание механизма работы занимает намного больше места, чем сам короткий скрипт. К слову, данный скрипт кликает по картинкам в обратном порядке, потому что начинает извлечение с последней. Но вы можете организовать свой обход цикла слева направо, например через for и индексы. Тут уже полная свобода действия.

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

Стоит добавить, что массивы, как и переменные хранят свои значения. Поэтому последовательный вызов двух scanpicture (например) без извлечения элементов через arrpop приведет к тому что у вас будет двойная очередь координат. Поэтому если вам для работы необходим «чистый» массив, то не забывайте высвобождать память, путем вызова undefine($var). Тут все как для переменных.

Такие дела. Я как мог подробно разжевал основные моменты работы с массивами в общем и тонкости их использования непосредственно в Clickermann. Надеюсь что данный материал поможет вам легко и быстро освоить новые способы программирования.

456
работа в оконном режиме (с привязкой к окну) негарантирована так как зависит от конкретных случаев. перечитайте материал в справке. там же описано про "квадрат в центре" и систему координат

457
помоему в 4.4 еще не было разбиений на папки проектов, там использовалась спецпапка bmps

458
Использование / Re: помогите со скриптом
« on: September 30, 2013, 10:45:08 AM »
специфика программы. защита так же относится к специфике. хорошо хоть без привязки работает

459
что именно не работает? картинку находит? разберитесь сначала с этим, поставьте в условие например вывод текста  лог

460
Прочее / Re: Чмоки
« on: September 21, 2013, 07:42:52 AM »
А давай я тебе даже отвечу

Нет ничего страшного в том что кто-то соскачил с кликера, аудитория у нас столько растет. К тому же для абсолютно бесплатной программы это не критично. Доната мы как не получали так и не получаем. Даже хостинг не отбивается по прежнему. ЧСВ мне так же не чешут, только долбят глупыми вопросами в личку...
Я и сам всегда говорил что Кман - это связующее звено между кликером точки и серьезным языком. Отправная точка для начинающих.

Но вот единственное чего я не очень понимаю, почему на автоит. Я говорил "серьезные языки". А автоит это такой же Clickermann, только старше на десять лет (конечно у автора было немного форы прикрутить побольше плюшек лол, но и мы потихоньку развиваемся). Почему бы не перейти на С\С++, Delphi? Вот это был бы скачек.
Тем более что autoit с его указателями, типами данных, хитрыми функциями (совершенно не нужными кликеру) пытается пародировать серьезный язык со всеми тонкостями, но не является таковым. Поэтому я не понимаю тех кто кодит на автоите. Я извиняюсь, но это как ребенок, который никак не отучится от горшка. Вот кликер точки - это подгузник. Clickermann это горшок. Автоит это такой же горшок, ну может другой формы, побольше и с удобным сливом. Но господа! Право смешно! Садитесь уже на нормальный унитаз, если в собрались какать по взрослому. Такой вот пример пришел мне в голову...

Я рад что мы "вырастили" еще одного будущего программиста. Но чувак, если и идти вперед, то большими шагами. Если ты уже "вырос" из Кмана и понимаешь каких вещей тебе не хватает, то берись за серъезный инструмент. Тем более что в этом случае тебе будет в помощь весь интернет, а не небольшое сообщество на сайте программы. Просто можешь мне поверить, как человеку, который на серьезном языке написал свой, маленький.

461
build 002

* исправлена ошибка с малыми числами типа 0.0001
* httpwork.dll больше не должна съедаться антивирусами

462
execute запуск приложений (и не только) с параметрами

463
Использование / Re: аион
« on: March 15, 2013, 10:37:04 AM »
зощита же. читайте форумы читерские.
практика показывает если конкретный кликер "не может", то 90% остальных тоже не смогут потому что я уже озвучивал - механизм у всех (практически) один

464
Использование / Re: Google Code - статистика
« on: March 15, 2013, 10:32:44 AM »
Кстати о привлечении. Куда в последнее время обыватель направляет лыжи когда слышит что-то для себя новое?
в гугл. серьезно. при вводе "кликерманн" наши ресурсы болтаются в самом верху. по преславутой статистике опять же больше половины посетителей на сайте - с поисковиков.

Quote
Короче, где статья в Википедии о Clickermann?
а надо? я не считаю что это продукт такого уровня, чтоб писать о нем статью. многое там сделано на коленке. я считаю что пока рановато. к тому же не представляю что писать в статье. а статья в два обзаца - несерьезно.
впрочем я не могу запретить кому-то сделать это за меня.

465
Общие вопросы / Re: инструкция CALL
« on: March 15, 2013, 10:21:25 AM »
потому что нужно писать не Hello world, а библиотеку DLL с экспортируемой функцией

нет, даже не так. нужно прочитать справку

Pages: 1 ... 29 30 [31] 32 33 ... 40