Кибор » Скрипты на заказ » Заказать скрипт » Игра жанра "три в ряд"

Страниц (1): [1]
 

1. username - 17 Апреля, 2014 - 05:48:44 - перейти к сообщению
Есть поле разбитое на ячейки, в которых кристалы разных цветов. Нужно поменять местами два кристала, чтоб в одном из рядов получилось три и более, тогда они исчезают и сверху падают новые.
В нашем случае поле шесть на шесть, всего 36 ячеек. И пять видов кристалов.
Это приложение в одноклассниках "Небеса". И мини игрой в нём реализован процесс боя.
Вот картинка игрового поля.



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

Можно использовать findimage дабы определить какой кристал расположен в какой ячейке. Для этого нужно определить кардинаты начала и конца поиска для каждой ячейки.
Вот так, например.



Мы получаем семь пар координат, которыми можно обозначить любую ячейку.

CODE:

int x1, x2, x3, x4, x5, x6, x7;
int y1, y2, y3, y4, y5, y6, y7;
[color=green]//можно сразу указать конкретные цифры.[/color]

int a1,b1,c1,d1,e1,f1, a2,b2,c2,d2,e2,f2, a3,b3,c3,d3,e3,f3, a4,b4,c4,d4,e4,f4, a5,b5,c5,d5,e5,f5, a6,b6,c6,d6,e6,f6;
[color=green]//Это переменные для ячеек. Например левому верхниму углу ячейки а1 соответствуют координаты x1, y1, ячейки b1 - x1, y2, ячейки d3 - x3, y4. и так далее.[/color]


Ещё у нас есть пять картинок кристалов.

CODE:

int red[28][28]; int redX[512]; int redY[512]; int yell[29][29]; int yellX[512]; int yellY[512]; int green[30][29]; int greenX[512];
int greenY[512]; int skull[28][30]; int skullX[512]; int skullY[512]; int ank[27][26]; int ankX[512]; int ankY[512];

loadimage (#red[0][0], "C:\krst\red.bmp");
loadimage (#yell[0][0], "C:\krst\yell.bmp");
loadimage (#green[0][0], "C:\krst\green.bmp");
loadimage (#skull[0][0], "C:\krst\skull.bmp");
loadimage (#ank[0][0], "C:\krst\ank.bmp");

[color=green]//Загружаем их в память.[/color]

(Добавление)
Потом определяем в какой ячейке находится какой кристал.

CODE:

if (findimage(1, #red[0][0], 8388672, #redX[0], #redY[0], x1, y1, x2, y2, r,r,r,r,r,r, 90, 1, wind)==1){int a1=1; goto ob1;}
else{ if (findimage(1, #skull[0][0], 8388672, #skullX[0], #skullY[0], x1, y1, x2, y2, r,r,r,r,r,r, 90, 1, wind)==1){int a1=2; goto ob1;}
else{ if (findimage(1, #yell[0][0], 8388672, #yellX[0], #yellY[0], x1, y1, x2, y2, r,r,r,r,r,r, 90, 1, wind)==1){int a1=3; goto ob1;}
else{ if (findimage(1, #green[0][0], 8388672, #greenX[0], #greenY[0], x1, y1, x2, y2, r,r,r,r,r,r, 90, 1, wind)==1){int a1=4; goto ob1;}
else{ if (findimage(1, #ank[0][0], 8388672, #ankX[0], #ankY[0], x1, y1, x2, y2, r,r,r,r,r,r, 90, 1, wind)==1){int a1=5; goto ob1;}
else{ messagebox("А1 не определён"); goto end;}}}}}
//Программа определяет кристал в ячейке и зависимо от этого присваивает соответствующей переменной значение.


ob1:
//Тут такой же код для определения содержимого ячейки b1, и далее аналогично для остальных.

(Добавление)
Я уже не понимаю что творю.

Код уже выглядит чудовищно, но ещё не закончился. Огорчение
После назначения цифер идёт перебор вариантов хода.


CODE:
int px=28, py=56; //Поправка координат, чтоб клик попадал в квадратик.

if (a1==b1==d1){mouse(LEFT, x1+px, y3+py, wind); sleep(1000); mouse(LEFT, x1+px, y4+py, wind)}
//Если переменным a1,b1,d1 присвоили одинаковые цифры, значит надо щёлкнуть по координатам ячеек d1 и c1 чтоб поменять их местами.



Вариантов таких хоть и ограниченное количество, но их много.
И возможно ли реализовать расстановку приоритетов для кристалов? Например чтоб поиск вариариантов ходов с определёнными кристалами производился раньше остальных.
2. Kibor - 17 Апреля, 2014 - 09:54:36 - перейти к сообщению
Надо использовать массивы и циклы.

Это вопрос по помощи или заказ?
3. username - 17 Апреля, 2014 - 10:43:39 - перейти к сообщению
 Цитата:
Надо использовать массивы и циклы.

Не понимаю как использовать массивы в таких условиях.

 Цитата:
вопрос по помощи или заказ?

Мне помощь нужна.

Powered by ExBB FM 1.0 Final