Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Doda on October 28, 2015, 03:42:12 AM
-
Пишу бот для игры монополия в вк, игра интересная,но охота автоматизировать процесс игровой.
Написан бот, который умеет:
1.Бросать кубики
2.Покупать фирмы
3.оплачивает налоги
4. при недостатке денег выкидывает фирму на укцион
5 участвует в аукционах
6.строит монополии
из минусов
1. не умеет определять фирмы противника(уже умеет)
2.покупает на аукционе ненужные фирмы(уже продумал алгоритм)
3.не умеет закладывать, поэтому при фирмах, монополиях зачастую вырубается
4 не считает количество денег(необходимо добавить распознавание с упрощением цвета и игнором фона)
минусов короче уйма.я за вечер изучил массивы и циклы и очеень преобразил код) например вместо
такого вот громоздкого кода на определение кому принадлежат 3 первые фирмы
GETSCREEN
IF_PIXEL_IN(424,219, 454,219, 12303604) //кафе
DEFINE($krasn, 0)
$krasn=$krasn+1
WAITMS(100)
else
IF_PIXEL_IN(424,219, 454,219, 16571048)
DEFINE($sin, 0)
$sin=$sin+1
else
IF_PIXEL_IN(424,219, 454,219, 8257535)
DEFINE($zelt, 0)
$zelt=$zelt+1
else
IF_PIXEL_IN(424,219, 454,219, 7338922)
DEFINE($zele, 0)
$zele=$zele+1
else
IF_PIXEL_IN(424,219, 454,219, 14796284)
DEFINE($roz, 0)
$roz=$roz+1
else
IF_PIXEL_IN(424,219, 454,219, 13697023)
DEFINE($zzelt, 0)
$zzelt=$zzelt+1
else
IF_PIXEL_IN(424,219, 454,219, 16708320)
DEFINE($zsin, 0)
$zsin=$zsin+1
else
IF_PIXEL_IN(424,219, 454,219, 15132667)
DEFINE($zkras, 0)
$zkras=$zkras+1
else
IF_PIXEL_IN(424,219, 454,219, 16050942)
DEFINE($zroz, 0)
$zroz=$zroz+1
else
IF_PIXEL_IN(424,219, 454,219, 13369056)
DEFINE($zzel, 0)
$zzel=$zzel+1
else
DEFINE($bel, 0)
$bel=$bel+1
IF_PIXEL_IN(512,219, 542,219, 12303604) //бар
DEFINE($krasn, 0)
$krasn=$krasn+1
WAITMS(100)
else
IF_PIXEL_IN(512,219, 542,219, 16571048)
DEFINE($sin, 0)
$sin=$sin+1
else
IF_PIXEL_IN(512,219, 542,219, 8257535)
DEFINE($zelt, 0)
$zelt=$zelt+1
else
IF_PIXEL_IN(512,219, 542,219, 7338922)
DEFINE($zele, 0)
$zele=$zele+1
else
IF_PIXEL_IN(512,219, 542,219, 14796284)
DEFINE($roz, 0)
$roz=$roz+1
else
IF_PIXEL_IN(512,219, 542,219, 13697023)
DEFINE($zzelt, 0)
$zzelt=$zzelt+1
else
IF_PIXEL_IN(512,219, 542,219, 16708320)
DEFINE($zsin, 0)
$zsin=$zsin+1
else
IF_PIXEL_IN(512,219, 542,219, 15132667)
DEFINE($zkras, 0)
$zkras=$zkras+1
else
IF_PIXEL_IN(512,219, 542,219, 16050942)
DEFINE($zroz, 0)
$zroz=$zroz+1
else
IF_PIXEL_IN(512,219, 542,219, 13369056)
DEFINE($zzel, 0)
$zzel=$zzel+1
else
DEFINE($bel, 0)
$bel=$bel+1
else
IF_PIXEL_IN(557,219, 587,219, 12303604) //ресторан
DEFINE($krasn, 0)
$krasn=$krasn+1
//1
else
IF_PIXEL_IN(557,219, 587,219, 16571048)
DEFINE($sin, 0)
$sin=$sin+1
else
IF_PIXEL_IN(557,219, 587,219, 8257535)
DEFINE($zelt, 0)
$zelt=$zelt+1
else
IF_PIXEL_IN(557,219, 587,219, 7338922)
DEFINE($zele, 0)
$zele=$zele+1
else
IF_PIXEL_IN(557,219, 587,219, 14796284)
DEFINE($roz, 0)
$roz=$roz+1
else
IF_PIXEL_IN(557,219, 587,219, 13697023)
DEFINE($zzelt, 0)
$zzelt=$zzelt+1
else
IF_PIXEL_IN(557,219, 587,219, 16708320)
DEFINE($zsin, 0)
$zsin=$zsin+1
else
IF_PIXEL_IN(557,219, 587,219, 15132667)
DEFINE($zkras, 0)
$zkras=$zkras+1
else
IF_PIXEL_IN(557,219, 587,219, 16050942)
DEFINE($zroz, 0)
$zroz=$zroz+1
else
IF_PIXEL_IN(557,219, 587,219, 13369056)
DEFINE($zzel, 0)
$zzel=$zzel+1
else
DEFINE($bel, 0)
$bel=$bel+1
else
Я сделал вот так. теперь у меня определяет фирмы какого цвета на клетке, определяет сама через логические операторы - покупать или нет фирму. единственное с чем у меня косяк, это... после выбора цвета она пишет код, осталось обозвать его нормально или цифрами от до 5(количество игроков) ну и я работаю над оптимизацией кода. подскажите что можно добавить для сокращеният.к. всего фирм 30, а у меня код для 3. и то заготовочка),тему написал днем, пока редактировал - полазал по сайту и нашел много ответов на свои вопросы
Getscreen
$cvet[0] = 12303604
$cvet[1] = 16571048
$cvet[2] = 8257535
$cvet[3] = 7338922
$cvet[4] = 14796284
$cvet[5] = 13697023
$cvet[6] = 16708320
$cvet[7] = 15132667
$cvet[8] = 16050942
$cvet[9] = 13369056
$cvet[10] = 15066597
for($e, $e < 11)
IF_PIXEL_IN(424,219, 454,219, $cvet[ $e1 ])//кафе
print($cvet[ $e1 ])
Arrpush($eda, $cvet[ $e1 ])
else
$e1=($e1+1)
end_cyc
end_if
UNDEFINE($e)
UNDEFINE($e1)
for($e, $e < 11)
IF_PIXEL_IN(512,219, 542,219, $cvet[ $e1 ]) //бар
print($cvet[ $e1 ])
Arrpush($eda, $cvet[ $e1 ])
else
$e1=($e1+1)
end_cyc
end_if
UNDEFINE($e)
UNDEFINE($e1)
for($e, $e < 11)
IF_PIXEL_IN(557,219, 587,219, $cvet[ $e1 ]) //ресторан
print($cvet[ $e1 ])
Arrpush($eda, $cvet[ $e1 ])
else
$e1=($e1+1)
end_cyc
end_if
switch($eda)
case(0) | (16708320)
print("покупай фирму")
case(0) | (8257535)
print("бери, иначе проиграешь")
case(16708320) & (8257535)
print("не трать деньги")
halt
[spoiler](https://pp.vk.me/c622918/v622918606/4fdd3/HxorBMwSd_s.jpg)[/spoiler]
-
на счет второго кода, куча ошибок.
В каждом цикле перепутаны строки
end_cyc
end_if
но самое забавное началось когда мы дошли до свитча
Вот это полнейшая бредятина
switch($eda) // у массива не указан номер ячейки памяти
case(0) | (16708320) // нельзя комбинировать условия!
print("покупай фирму")
case(0) | (8257535)
print("бери, иначе проиграешь")
case(16708320) & (8257535)
print("не трать деньги")
halt
END_SWITCH
Вообще не пойму что ты этим хотел добиться. Чтобы switch каким то волшебным образом извлек из массива то что ты хочешь?
Массив это таблица в один столбик.
Чтобы сократить повторяющийся код нужно использовать подпрограммы
$cvet[0] = 12303604
$cvet[1] = 16571048
$cvet[2] = 8257535
$cvet[3] = 7338922
$cvet[4] = 14796284
$cvet[5] = 13697023
$cvet[6] = 16708320
$cvet[7] = 15132667
$cvet[8] = 16050942
$cvet[9] = 13369056
$cvet[10] = 15066597
SUB(analiz,$pxl_x,$pxl_y)
$e1 = 0
GETSCREEN
FOR($e=0,$e<11)
IF(PXL($pxl_x,$pxl_y) = $cvet[$e1]) // на самом деле при совпадении в массив до 11 раз может быть записано одно и тоже
print($cvet[$e1])
ARRPUSH($eda, $cvet[$e1])
ELSE
INC($e1,1)
END_IF
END_CYC
END_SUB
analiz(424,219) // кафе
analiz(512,219) // бар
analiz(557,219) // ресторан
LOGWRITE ("== Массив ==")
FOR($a=0,$a<ARRSIZE($eda))
LOGWRITE ($eda[$a]) // вывод значений массива в лог
END_CYC
HALT
Может быть правильно будет так?
$cvet[0] = 12303604
$cvet[1] = 16571048
$cvet[2] = 8257535
$cvet[3] = 7338922
$cvet[4] = 14796284
$cvet[5] = 13697023
$cvet[6] = 16708320
$cvet[7] = 15132667
$cvet[8] = 16050942
$cvet[9] = 13369056
$cvet[10] = 15066597
SUB(analiz,$pxl_x,$pxl_y)
GETSCREEN
FOR($e=0,$e<11)
IF(PXL($pxl_x,$pxl_y) = $cvet[$e]) // прогоняем все цвета и записываем совпадения
print($cvet[$e])
ARRPUSH($eda, $cvet[$e])
END_IF
END_CYC
END_SUB
analiz(424,219) // кафе
analiz(512,219) // бар
analiz(557,219) // ресторан
LOGWRITE ("== Массив ==")
FOR($a=0,$a<ARRSIZE($eda))
LOGWRITE ($eda[$a]) // вывод значений массива в лог
END_CYC
HALT
-
почему люди начинают писать дефайны в интерпретируемом языке кликера? откуда они берут это?
ну и имена переменных отличные у автора, сразу понятно где что
-
Oraven, спасибо тебе огромное! я разбирал твой код, он безусловно хорош! спасибо огромное. два дня мучался как из предложенных трех фирм путем анализа определять - нужно ли покупать /закладывать фирму? даже кликер снес, но я упорный.. сейчас листал форум и меня осенило!)
вот набросок(не под игру, а попытка понять алгоритм) осталось прикрутить алгоритм под 11 монополий по 2-3 фирмы с запоминанием позиций фирм в массив, чтобы выдавать результат не такбери, твоих фирм в монополи нет
а такбери фирмы 2,3, твоих фирм в монолии нет
ну и само собой, смысл не в записи в лог, а в клике по кнопкам купли/продажи и наверн для удобства сделаю подпрограммы для нижеприведенного кода
$pustoi=0 //пустые фирмы
$moi=1 //мои фирмы
$vrag=2 //противник
for($i=0,$i<3)
arrpush($ttt, rnd(0,2))//обычно в монополии 2-3 фирмы-создаем рандомный массив на 3 элемента. от 0 до 2(мои, пустые фирмы, противника
print($ttt[$i]) //кидаем его в лог
end_cyc
for ($o=0, $o<arrsize($ttt))
$q=$ttt[$o]
if ($moi=$q)//если есть мои фирмы, $mu=1
$mu=1
end_if
end_cyc
for ($o=0, $o<arrsize($ttt))
$q=$ttt[$o]
if ($vrag=$q)//ищем фирмы врага в массиве,
$muvrag=1
end_if
end_cyc
for ($o=0, $o<arrsize($ttt))
$q=$ttt[$o]
if ($pustoi=$q)//ищем фирмы пустые
$mupustoi=1
end_if
end_cyc
//ну а тут пошел анализ ситуаций
if ($mu=0)
if ($muvrag=0)
print(" Все пусто ")
end_if
end_if
if ($mu=0)
if ($muvrag=1)
if ($mupustoi=0)
print(" Все у врага ")
end_if
end_if
end_if
if ($mu=1)
if ($muvrag=0)
if ($mupustoi=0)
print(" Все у меня ")
end_if
end_if
end_if
if ($mu=1)
if ($muvrag=1)
if ($mupustoi=1)
print(" не трать финансы ")
end_if
end_if
end_if
if ($mu=0)
if ($muvrag=1)
if ($mupustoi=1)
print(" бери, твоих фирм в монолии нет ")
end_if
end_if
end_if
if ($mu=1)
if ($muvrag=1)
if ($mupustoi=0)
print(" пустых нет, все поровну")
end_if
end_if
end_if
if ($mu=1)
if ($muvrag=0)
if ($mupustoi=1)
print(" фирмы мои, но есть пустые.покупай чтоб строить монополию ")
end_if
end_if
end_if
halt
подскажите, почему подпрограмма не хочет работать?на выходе все по нулям
sub(poisk,$firma,$parametr,$qn)
for ($o=0, $o<arrsize($ttt))
$qn=$ttt[$o]
if ($firma=$qn)
$parametr=1
// arrpush($q,$moi)
end_if
end_cyc
end_sub
poisk($moi,$mu,$q1)
poisk($vrag,$muvrag,$q2)
poisk($pustoi,$mupustoi,$q3)
без подпрограмм работает отлично
а вот уже с оптимизацией
$pustoi=0
$moi=1
$vrag=2
for($i=0,$i<3)
arrpush($ttt, rnd(0,2))
print($ttt[$i])
end_cyc
for ($o=0, $o<arrsize($ttt))
$q=$ttt[$o]
if ($moi=$q)
$mu=1
// arrpush($q,$moi)
end_if
end_cyc
for ($o=0, $o<arrsize($ttt))
$q=$ttt[$o]
if ($vrag=$q)
$muvrag=1
end_if
end_cyc
for ($o=0, $o<arrsize($ttt))
$q=$ttt[$o]
if ($pustoi=$q)
$mupustoi=1
end_if
end_cyc
sub(infa,$mu1,$muvrag1,$mupustoi1,$tekst)
if ($mu=$mu1)
if ($muvrag=$muvrag1)
if ($mupustoi=$mupustoi1)
print($tekst)
end_if
end_if
end_if
end_sub
infa(0,0,1," Все пусто ")
infa(0,1,0, " Все у врага ")
infa(1,0,0, " Все у меня ")
infa(1,1,1, " не трать финансы ")
infa(0,1,1, " бери, твоих фирм в монолии нет ")
infa(1,1,0, " пустых нет, все поровну")
infa(1,0,1, " фирмы мои, но есть пустые.покупай чтоб строить монополию ")
halt
-
подскажите, почему подпрограмма не хочет работать?на выходе все по нулям
sub(poisk,$firma,$parametr,$qn)
for ($o=0, $o<arrsize($ttt))
$qn=$ttt[$o]
if ($firma=$qn)
$parametr=1
// arrpush($q,$moi)
end_if
end_cyc
end_sub
poisk($moi,$mu,$q1)
poisk($vrag,$muvrag,$q2)
poisk($pustoi,$mupustoi,$q3)
Где по нулям и что именно?
Твоя подпрограмму меняет только локальную переменную $parametr которая при завершении уничтожается. Больше она ничего не делает.
Ты наверное думал, если передаёшь $muvrag то после обработки изменения и присвоятся $muvrag? Нет.