Bomjara |
Отправлено: 30 Января, 2022 - 15:29:28
|
Прохожий
Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2022
Репутация: 0
|
Zireael пишет: Цитата: это из-за количества функций
Нет. Количество функций не ограничено.
Если вылетает значит где-то в вашем коде ошибка.
Включите отладку, галка под меню. В окне отладки последней будет строка, на которой произошёл вылет.
Отладка не поможет, увы. Вылет происходит сразу же после запуска и отладка ничего не захватывает. Вывод о том, что именно из-за кол-ва функций ошибка, сделал потому что, если удалить несколько функций (так, что-бы общее кол-во не превышало 10), то всё ок. |
|
|
Bomjara |
Отправлено: 30 Января, 2022 - 15:59:18
|
Прохожий
Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2022
Репутация: 0
|
Zireael пишет: Тогда нужен весь код, который не запускается.
CODE://Константы изображений
#define ARENA 0
#define FIGHT 1
#define ARSENAL 2
#define MENU 3
#define LEVELUP 4
#define CLOSE 5
#define BALLS 6
#define DISTRIBUTEBALLS 7
#define NUMBER 8
#define SIZE 10
//######
//Константы клавиш
#define SPACE 32
//######
//Загрузка изображений
string root = "D:\Desktop\Kibor\project\";
string nameImages[NUMBER] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};
int images[NUMBER][SIZE][SIZE];
for (int i = 0; i < NUMBER; i++) loadimage(#images[i][0][0], root + nameImages[i] + ".bmp");
//######
function centerImage(int #position) //Получение центра изображения
{
for (int i = 0; i < 2; i++) position[i] = (2 * position[i] + SIZE) / 2;
}
function shortFindImage(int image, int #position) //Функция findimage, но короче и удобней
{
return findimage(1, #images[image][0][0], -1, #position[0], #position[1], 0, 0, wind.widthclient, wind.heightclient, wind);
}
function dynamicCheck(int image, int #position, int numberCheck, int delayCheck) //Проверка того, не двигается ли изображение
{
int oldPosition[2];
loop (numberCheck)
{
for (int i = 0; i < 2; i++) oldPosition[i] = position[i];
sleep(delayCheck);
shortFindImage(image, #position[0]);
if (oldPosition[0] == position[0] && oldPosition[1] == position[1]) return 1;
}
return 0;
}
function findImage(int image, int #position, int numberTries, int delayTries) //Поиск изображения
{
loop (numberTries)
{
if (shortFindImage(image, #position[0])) return 1;
sleep(delayTries);
}
return 0;
}
function clickImage(int image, int numberTries, int delayTries, int numberCheck, int delayCheck) //Вспомагательная функция. Поиск и нажатие на картинку
{
int position[2];
if (findImage(image, #position[0], numberTries, delayTries) == 0 ||
(numberCheck > 0 && dynamicCheck(image, #position[0], numberCheck, delayCheck) == 0)) return 0;
centerImage(#position[0]);
sendmouse(LEFT, position[0], position[1], wind);
return 1;
}
function checkImage(int image, int numberTries, int delayTries) //Вспомагательная функция. Проверка того, появилось ли изображение на экране.
{
int position[2];
return findImage(image, #position[0], numberTries, delayTries);
}
function sendKeyString(string _key, int number, int delay) //Нажатие клавиши с перерывом несколько раз (для клавиш, заданных строкой)
{
loop (number)
{
sendkey(_key, wind);
sleep(delay);
}
}
function sendKeyInt(int _key, int number, int delay) //Нажатие клавиши с перерывом несколько раз (для клавиш, заданных числом)
{
loop (number)
{
sendkey(_key, wind);
sleep(delay);
}
}
function a1() { return 0; }
function a2() { return 0; }
function a3() { return 0; }
//Скрипт
loop()
{
if (getkeystate(67)) break;
if (getkeystate(66)) close();
}
win wind = getwindow();
loop (1)
{
clickImage(ARENA, 50, 100, 0, 0);
clickImage(FIGHT, 50, 100, 50, 100);
checkImage(ARSENAL, 50, 100, 0, 0);
sendKeyString("c1", 1, 500);
sendKeyInt(SPACE, 1, 1500);
sendKeyString("z", 1, 5000);
while (clickImage(MENU, 1, 0, 0, 0) == 0) sendKeyString("9", 1, 50);
}
//######
Функции a1-a3 добавлены для примера. В таком виде не работает (11 функций в общем). Но если закомментить любую функцию, к примеру a3, то всё работает (10 функций в общем). |
|
|
Zireael |
Отправлено: 30 Января, 2022 - 16:12:25
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: string nameImages[NUMBER] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};
В кибор такое недопускается.
Либо указывайте число.
CODE:string nameImages[8] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};
Либо используйте динамический массив, но инициализировать придётся каждый элемент отдельно.
CODE:#define NUMBER 8
new string nameImages[NUMBER];
nameImages[0] = "arena";
nameImages[1] = "fight"; (Отредактировано автором: 30 Января, 2022 - 16:17:19) |
|
|
Bomjara |
Отправлено: 30 Января, 2022 - 16:56:56
|
Прохожий
Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2022
Репутация: 0
|
Zireael пишет: Цитата: string nameImages[NUMBER] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};
В кибор такое недопускается.
Либо указывайте число.
CODE:string nameImages[8] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};
Либо используйте динамический массив, но инициализировать придётся каждый элемент отдельно.
CODE:#define NUMBER 8
new string nameImages[NUMBER];
nameImages[0] = "arena";
nameImages[1] = "fight";
Нет, ты ошибаешься. #define NUMBER 8 - это директива препроцессора, которая заменяет в коде все места, где встречается NUMBER на число 8 до трансляции программы. То есть, NUMBER - это не переменная. |
|
|
Zireael |
Отправлено: 30 Января, 2022 - 17:14:00
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Нет, ты ошибаешься. #define NUMBER 8 - это директива препроцессора, которая заменяет в коде все места, где встречается NUMBER на число 8 до трансляции программы.
Замените:
Цитата: string root = "D:\Desktop\Kibor\project\";
string nameImages[NUMBER] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};
int images[NUMBER][SIZE][SIZE];
for (int i = 0; i < NUMBER; i++) loadimage(#images[i][0][0], root + nameImages[i] + ".bmp" );
На:
CODE:string root = "D:\Desktop\Kibor\project\";
string nameImages[8] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};
int images[8][10][10];
for (int i = 0; i < 8; i++) loadimage(#images[i][0][0], root + nameImages[i] + ".bmp");
и код запустится. |
|
|
Bomjara |
Отправлено: 30 Января, 2022 - 17:17:17
|
Прохожий
Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2022
Репутация: 0
|
Zireael пишет: Цитата: Нет, ты ошибаешься. #define NUMBER 8 - это директива препроцессора, которая заменяет в коде все места, где встречается NUMBER на число 8 до трансляции программы.
Замените:
Цитата: string root = "D:\Desktop\Kibor\project\";
string nameImages[NUMBER] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};
int images[NUMBER][SIZE][SIZE];
for (int i = 0; i < NUMBER; i++) loadimage(#images[i][0][0], root + nameImages[i] + ".bmp" );
На:
CODE:string root = "D:\Desktop\Kibor\project\";
string nameImages[8] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};
int images[8][10][10];
for (int i = 0; i < 8; i++) loadimage(#images[i][0][0], root + nameImages[i] + ".bmp");
и код запустится.
Вынужден тебя огорчить... |
|
|
|