Урок 2
Резюмируем чему мы научились в 1 уроке:
1) Определять свою магию.
2) Задавать условие проверки хватки камней на произнесение магии.
3) И нажать её, если всё-таки наше условие выполнилось.
Что ждет нас в этом уроке? а вот что:
1) Определение своих переменных.
2) Произведение арифметических операций над переменными и над переменными и константами.
3) Как и зачем производить сортировку результата.
4) Что такое цикл и как его использовать
5) И что такое безУсловный переход.
Как и в прошлый раз дам рабочий скрипт, а потом объясню всё по полочкам, что к чему. Собственно сам скрипт:
Переменные:
_i 0
_Выбор 0
_Случ 0
Успешное_считывание_камней:
{
}
Успешное_считывание_поля:
{
~Сортировка 1 6 5 4 Ч
_i -1
:начало
_i _i + 1
ЕСЛИ _i < _Вариантов_Ходов
{
ЕСЛИ _Ход[_i].Число_6 > 0 | _Ход[_i].Число_5 > 0 | _Ход[_i].Число_4 > 0
{
_Выбор _i
ИДТИ конец
}
ИНАЧЕ
{
ЕСЛИ ( _Ход[_i].Итог = 0)
{
_Выбор _i
ИДТИ конец
}
}
ЕСЛИ _i = (_Вариантов_Ходов - 1 )
{
_Выбор 0
ИДТИ конец
}
ИДТИ начало
}
:конец
~Случайное_Число 1000 _Случ
_Случ _Случ + 1000
~Пауза_Боя _Случ
~Клик _Ход[_Выбор].Ячейка_11 _Ход[_Выбор].Ячейка_12
~Спать 300
~Клик _Ход[_Выбор].Ячейка_21 _Ход[_Выбор].Ячейка_22
}
Теперь, если внимательно посмотреть, мы не используем магию и не определяем её, а уже работаем с полем камней и анализируем это поле, а как мы это делаем, давайте разбираться.
Этот скрипт вы найдете в любом другом скрипте представленном с ботом, да и вы будете пользоваться им (в дальнейшем, может, с кое-какими изменениями, сделанными под ваши нужды) и он является "Де-факто" Разобраться с ним - очень важно.
В данном примере мы ничего менять пока не будем, а просто разберемся что к чему и не просто разберемся а поймём что к чему!
Первое, что нам встречается это раздел Переменные:. Здесь вы объявляете свои переменные. Для каждой переменной должно быть задано значение по умолчанию. В нашем примере все значения переменных равняются 0. Переменная начинается со знака подчеркивания "_", а дальше пишется имя переменной и через пробел её значение.
Важно!!!:
Если видим любое значение с подчеркиванием, а через пробел стоит число, то мысленно заменяем пробел знаком "=". Например: _i -1 заменяем в уме на _i = -1. Если же после пробела стоит число (переменная), потом арифметический знак и снова число (переменная) то мысленно считаем это выражение простым примером. Например: _i _i + 1 заменяем в уме на _i = _i + 1, т. е. значение i увеличилось на единицу.
Следующий раздел у нас пустой, так как в данном примере нам не надо знать сколько камней у нас сейчас есть в наличии.
Успешное_считывание_камней:
{
}
Всё дальнейшее происходит в разделе: Успешное_считывание_поля:. и этот раздел обозначает, что всё поле у нас с читано и можно производить его анализ.
Первое что нам встречается в разделе это ~Сортировка 1 6 5 4 Ч. Что я выделил в синий цвет, то задаем сами для себя. В данном примере идет сначала сортировка по линиям из 6 камней, а в конце по черепам. Вот некоторые еще из сортировок:
6, 5, 4, 3 - это соответственно сортировки по собираемым линиям камней.
К, С, З, Ч - это (красный, синий, зеленый, череп) сортировка по тому сколько камней соберется этим ходом.
Есть еще, но это уже смотрите Здесь
Рассмотрим пример: ~Сортировка 1 3 4 С Сортируем по линиям из 3 каней, потом по линиям из 4 камней, и уже потом в каждой из выборок 3 или 4 сортируется по синим камням.
Что же такое безУсловный переход? А это структура в нашем примере:
ИДТИ конец
:конец
Как только программа доходит до строчки ИДТИ, она сразу же перепрыгивает на метку, которая указана после слова ИДТИ. т. е. в данном случае программа сразу перепрыгнет в место :конец и продолжит свое выполнение. Смотрим приведенный скрипт и всё станет сразу понятно.
Теперь с совместным переходом и условием ЕСЛИ можем сделать цикл со счеткиком:
_i -1
:начало
_i _i + 1
ЕСЛИ _i < _Вариантов_Ходов
{
//Здесь распологоется всё что просчитывается в цикле
ИДТИ начало
}
Параметр _Вариантов_Ходов показывает сколько ходов при данной раскладке поля вообще возможно. Выше приведенным циклом, мы рассматриваем поочередно все эти ходы.
Начальное значение задается как _i -1 (_i = -1). далее идет метка :начало (это куда будем переходить из условия ЕСЛИ, пока выполняется условие _i < _Вариантов_Ходов. Например: у нас вариантов ходов сейчас 2. Тогда сначала программа приняла значение _i = -1 и после метки :начало прибавило 1 (_i _i + 1) к нашему значению _i и оно стало равняться 0. Потом программа проверяет _i < _Вариантов_Ходов (0 < 2) в условии ЕСЛИ выполняются действия, пока не доходим до поля ИДТИ начало. Переходим на поле :начало и программа выполняется дальше, а дальше пять прибавляем 1 (_i _i + 1) к нашему значению _i и оно стало равняться 1 и опять проверяем условие (1<2). И программа проделывает то же самое до поля ИДТИ начало, а вот уже после следующего прибавления 1 к _i условие (2<2) перестанет выполняться и программа выходит из цикла и продолжает идти дальше. Может сначала трудно для понимания, но на бумажке пройдите все этапы сами и всё встанет на свои места, не забываем смотреть наш начальный скрипт, всё беру только от туда.
Рассмотрим: _Ход[{индекс}].[свойство]
_Ход[{индекс}] В цикле выше рассмотренном мы перебираем все доступные ходы, а то бы узнать у каждого хода его параметры (свойства), нужно рассмотреть свойства хода. Например из нашего скрипта: _Ход[_i].Число_4 >0 Означает если в ходе _i соберется хоть одна четверка камней, то условие выполнится.
Какие же свойства мы можем использовать (т.е. те параметры которые пишутся после "точки" и без скобок после слова ход. можно посмотреть Здесь, а основные:
Координаты ячеек куда нужно кликнуть, что бы сходит. За начало принимается левый верхний угол поля, отсчет идет от 0. Первый параметр по горизонтали второй по вертикали.
Ячейка_11
Ячейка_12
Ячейка_21
Ячейка_22
Число сложенных не пересекающихся линий черепов, при включенной галке “ВС” учитываются и линии камней.
Атак
Сумма собираемых камней этим ходом:
Черепов_Соберется
Красных_Соберется
Синих_Соберется
Зеленых_Соберется
Черепов_С_Ур_Соберется
Красных_С_Ур_Соберется
Синих_С_Ур_Соберется
Зеленых_С_Ур_Соберется
Сумма собираемых линий разной длины этим ходом:
Число_3
Число_4
Число_5
Число_6
Какая линия черепов по длине максимум собралась:
Возвращаемые значения:
4 – Четыре или больше
3 – Тройка
0 – Линий черепов нет.
Комбо_Черепов
Что можно сложить на поле, после этого хода:
Возвращаемые значения(старшие могут включать младших):
0 – Конец, т.е стол разобран
1 – Тройки камней
2 – Тройки черепов
3 – Четверки и более камней
4 – Четверки и более черепов
Итог
И последнее что надо рассмотреть - ~Клик _Ход[_Выбор].Ячейка_11 _Ход[_Выбор].Ячейка_12.
В общем виде ~Клик [ячейка по горизонтали] [ячейка по вертикали]
В данном случае _Выбор это тот ход, который мы по всем заданным нашим условиям выбираем (смотрите скрипт и разберетесь).
Связка:
~Клик _Ход[_Выбор].Ячейка_11 _Ход[_Выбор].Ячейка_12
~Спать 300
~Клик _Ход[_Выбор].Ячейка_21 _Ход[_Выбор].Ячейка_22
Нажимает на ячейку 1 и на ячейку 2, тем самым в игре передвигая 2 соседних камня, ~Спать 300 нужно для того, что бы не нажать сильно быстро 2 соседние клетки. Если эту задержку убрать, то нажмется только 2 ячейка, т.к. не успеется обработаться 1 нажатие.
Уф. как много понаписал...
P.S. Материал очень важный и в этом скрипте должны знать что каждая строчка значит, иначе дальше будет очень сложно разбираться, а примеры может быть пойдут оооочень интересные.
Удачи.
Задание: Попробуйте разные сортировки, можете поиграть с условиями, а главное НЕ ВЕРЬТЕ мне на слово, а проверьте практически!
Отредактировано Stanislav (2010-03-28 09:08:22)