Mr.Pistol |
Отправлено: 09 Июля, 2021 - 05:47:11
|
Прохожий
Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2021
Репутация: 0
|
Итак друзья...
В написании бота для мобильной игры Top War, после своих неудач я продвинулся глубже.
Разные действия, которые должны привести к результату в игре, я сгруппировал по функциям. Эти функции на данном этапе выполняются линейно (по порядку).
В боте я макасимально рандомизировал тайминги действий, к этому вопросов по логам, у разработчиков не возникнет, но этого не достаточно.
Линейность вызова функций на продолжительном времени очень выделит игровой аккаунт. т.к. игра завязана на интернете полностью (клик по любой кнопке отправляет запрос на сервер). Следовательно одинаковая последовательность запросов может привести к блокировке.
В Киборе присутствует анти- антикликер, но полагаю в данной игре он не поможет.
В связи с этим остановился на следующей задачи:
В визуальном редакторе необходимо вызывать функции в разной последовательности, но так, что бы не одна не была пропущена.
Решение есть в теории, а именно:
1) Создать трехмерный массив с внесением присвоенного номера для функции, название функции и переменную, которая при завершении функции будет вносится в массив.
(Номер|Название|Переменная)
2) Будет проверятся условие, вызывалась ли функция под номером N в массиве, а по завершению в Массив (Переменная) вносится информация о её вызове.
3) Тэгом rand(0,N), где N количество всех функций, будет вызывать случайную функцию, если она уже была, генерируем рандом дальше, иначе если нет вызываем её
попробую описать кодом недопрограммиста, надеюсь никого не запутал и не запутаю.
Есть Массив (а,б,с), функцияРаз, функцияТри. Помещаем их в массив.
(1, функцияРаз,0)
(2, функцияТри,1)
рандом (0,2)
Рандом выдал номер 2 и пошло условие:
Если Массив(с) = 1, значит пропускаем .
Складываем столбик массива (c) , если сума равна количеству переменных закончили, если нет, запускаем рандом опять.
Рандом выдал номер 1, проверяем
Если Массив(с) = 0 запускаем функцию и возвращаем в Массив(с) единицу. Так пока все функции не будут вызваны.
Напомню, действую в визуальном редакторе и нужна подсказка по внедрению кода в визуал, и сам код, либо другие решения которые проще моего.
Пожалуйста подскажите, благодарю. |
|
|
Ilya001 |
Отправлено: 09 Июля, 2021 - 10:45:08
|
Эксперт
Покинул форум
Сообщений всего: 459
Дата рег-ции: Май 2020
Репутация: 23
|
Если я правильно понял, то думаю можно и без массива такое реализовать.
Пример:
CODE:int a=0, b=0, c=0; //переменные а,b,c
na4alo:; // поставил метку, чтобы зациклить код
if(a==0)
{
goto ablock;
}
else
{
if(b==0) //проверяем если "b" ровно 0, переход к bblock(аналогично и для "a" и "c"), иначе проверяем следующую переменную
{
goto bblock;
}
else
{
if(c==0) //проверяем если "c" ровно 0, иначе обнуление переменных
{
goto cblock;
}
else //если у всех переменных не 0, а 1, т.е если все функции уже выполнялись
{
a=0; //тут обнуляем всех переменных
b=0;
c=0;
messagebox("Все переменные успешно обнулены!");
pause(500); //пауза 500мс, можно убрать
}
}
}
ablock:; messagebox("A");
a++; // присваиваем единицу к переменную "a"
goto na4alo; //переходим к началу кода
bblock:; messagebox("B");
b++;
goto na4alo;
cblock:; messagebox("C");
c++;
goto na4alo;
Тут код работает как переключатель, если один переключатель выключен(0), то он его включает(+1), и так далее.(Отредактировано автором: 09 Июля, 2021 - 10:54:53) |
|
|
Mr.Pistol |
Отправлено: 10 Июля, 2021 - 03:14:36
|
Прохожий
Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2021
Репутация: 0
|
Zireael пишет: int array[3]; // массив на 3 элемента
int i;
int size_array = sizearray(array); // записать в переменную размер массива
for(i=0; i<size_array; i++)array[i]=i; // заполнить массив числами 0,1,2...
Да,круто , то что нужно и гораздо легче в исполнени, чем я придумал!
Пару вопросов :
1) int array[3] - одномерный массив, а int array[a,..,n]- многомерный так?
2) Верно ли интерпретирует программа следующий код: func(int a=22, string txt= good);?
Данный код вызовет функцию func с объявленными в ней переменными "a" и "txt"?(Отредактировано автором: 10 Июля, 2021 - 03:15:11) |
|
|
Zireael |
Отправлено: 10 Июля, 2021 - 19:21:56
|
Эксперт
Покинул форум
Сообщений всего: 4456
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: 1) int array[3] - одномерный массив, а int array[a,..,n]- многомерный так?
CODE:int array[3]; // одномерный массив
int arr[3][10]; // двухмерный
int c[3][5][2]; // трёхмерный
Цитата: 2) Верно ли интерпретирует программа следующий код: func(int a=22, string txt= good);?
CODE:func(22, "good");
func(12345, "hello");
function func(int a, string txt)
{
messagebox(a);
messagebox(txt);
} |
|
|
Mr.Pistol |
Отправлено: 14 Июля, 2021 - 21:51:13
|
Прохожий
Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2021
Репутация: 0
|
Поэксперементировал.
1) Помимо вызова функций рандомно, пытался сгруппировать несколько функций которые можно сделать в одном меню.
Те. несколько массивов. Первый содержит две функции, в которых вызываются другие группы функций. Получалось не получалось . Оставил эту затею.
Выдвинул несколько предположений которые неохото проверять но доведу.
1) Условие в котором вызываются условия, в которых вызываются функции, в которых вложен вызов других функций, сделанные в виз. редакторе - это мягко говоря головная боль, окно отладки вытворяло виртуозные деяния, которые мне были непонятны.
Мог накодить и запутаться в скобках и прочем, наделать синтаксических ошибок.
2) Сократив код и использовав один массив с перемешанными функциями с циклом for не получалось, всё почему? Потому что, как я понял, цикл пропускает 0 и начинает запись с array[1] ,а адресный номер массива в свою очередь начинается с 0. сответственно for заканчивает действие попыткой записать array[5], когда сам масив длинной 5, но последний адрес массива 4. поменял на цикл While и всё заработало.
Потом опять программа сломалась полностью, посыпались и ошибки, и недостаточно памяти, и даже новые скрипты (которые точно без ошибок), запускал ооочень тяжко и с теми же ошибками.. почти каждый запуск скрипта, заканивался закрытием кибора через ctrl+alt+delete. переустановил кибор обновился, цэклинером почистил реестр и вроде помогло.. незнаю надолго ли.
У меня кибор работает(в моём понимании) крайне не стабильно. По сути единственная прорамма на компьютере которая сыпет ошибки, и в таком количестве.
Естественно не без моих ошибок в коде. Но и Баги кибора уверен тоже присутствуют.
Таймер.. Нормармальной реализации, я так понимаю тоже нет. Планировалось после всех команд запускать таймер, который будет начанать всё сначала, с рандомным интервалом( от 20 до 30 минут)
int t1, t2,r;
r = rand(1000000,1800000);
t1=gettime();
t2=time1;
while (t2-t1<r)
{
t2=gettime();
pause (20000);
}
StartGame();
t1=0;
t2=0;
r=0;
После одного цикла всё пошло на перекосяк. Объявленные переменные внутри блока, даже не функции- т.е. они нигде не повторяются в коде, а после обнуляются.
Вопрос: Как бы сделать так, что бы скомпилированный exe файл после отработанного кода закрывал сам себя?. Скажем имеется 2 Exe файла, один отрабатывает, предпоследняя команда запускает второй файл, а последняя команда закрывает первый?(Отредактировано автором: 14 Июля, 2021 - 21:58:15) |
|
|
Kibor |
Отправлено: 14 Июля, 2021 - 21:59:28
|
Эксперт
Покинул форум
Сообщений всего: 8203
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Mr.Pistol пишет: У меня кибор работает(в моём понимании) крайне не стабильно. По сути единственная прорамма на компьютере которая сыпет ошибки, и в таком количестве.
Естественно не без моих ошибок в коде. Но и Баги кибора уверен тоже присутствуют.
У вас много на компьютере программ в которых вы что то программируете? Тем более с ошибками?
Можете поставить другую среду программирования и записать в ней что то типа:
Mr.Pistol пишет: for заканчивает действие попыткой записать array[5], когда сам масив длинной 5, но последний адрес 4. поменял на цикл While и всё заработало.
И там тоже ошибки посыпятся.
Программа достаточно нормально работает (по крайне мере с моим кодом), если не допускать ошибки в коде. |
|
|
Mr.Pistol |
Отправлено: 14 Июля, 2021 - 22:10:17
|
Прохожий
Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2021
Репутация: 0
|
Kibor пишет: У вас много на компьютере программ в которых вы что то программируете? Тем более с ошибками?
Можете поставить другую среду программирования и записать в ней что то типа:
Нет не много, но активно использую только её.
Владимир к вам и к программе нет не каких притензий, несмотря на то что у она временами работает некорректно, она классная, действительно.
Надеюсь что и дальше она будет развиваться в лучшую сторону. Она мне интересна и я с удовольствием её исследую.
Я не программист, но имею такое убеждение и понимание, что написать интерпретатор команд на интерпертаторе команд, который будет без багов это невозможно,подзреваю, что на ассемблере кибор был бы более стабильнее. Но без багов не обойтись в любом случае. В моей ситуации конечно больше виноват я, чем программа. |
|
|
|