Перейти к содержимому

Фотография

Парсинг конкретных элементов на игровом поле с последующим действием н


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 Bess

Bess

    Активный участник

  • Members
  • PipPip
  • 91 сообщений

Отправлено 08 января 2017 - 18:59

Такая ситуация.

Поиск элемента по имени,айди, описанию и т.д. здесь не подходит. Так как у данных элементов нет этих характеристик.

Использую Java+Apppium.

Более детально:

Игровое поле, 5х5.

3 вида шариков: красные, синие, желтые заполняют поле.

Надо чтобы код искал места, где можно собрать комбинацию из 3х одинаковых цветов в ряд...

 

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

import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidKeyCode;
import org.openqa.selenium.remote.DesiredCapabilities;

import java.net.MalformedURLException;
import java.net.URL;


public class GameTest {
    public static void main(String[] args) throws MalformedURLException, InterruptedException {

        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("deviceName","G9AXGY03Z63456E");
        caps.setCapability("platformName","Android");
        caps.setCapability("app","C:\\Appium\\node_modules\\appium\\build\\unlock_apk\\unlock_apk-debug.apk");

        AndroidDriver driver = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), caps);

        driver.pressKeyCode(AndroidKeyCode.HOME);
        Thread.sleep(2000);

        driver.findElementByAndroidUIAutomator("new UiSelector().description(\"Apps\")").click();
        driver.findElementByAndroidUIAutomator("new UiSelector().text(\"Mermaid\")").click();
        Thread.sleep(5000);

        TouchAction touchAction = new TouchAction(driver);
        touchAction.tap(405,1171).perform();
        Thread.sleep(10000);
        driver.swipe(358,527,365,635,1000);
        Thread.sleep(2000);

  • 0

#2 baxatob

baxatob

    Опытный участник

  • Members
  • PipPipPipPip
  • 258 сообщений
  • ФИО:Юрий
  • Город:Riga

Отправлено 09 января 2017 - 10:42

Картинку бы приложили, как выглядит поле в исходном состоянии и что конкретно нужно на нем сделать.

Пока только видно, что вы зархадкодили действия по координатам. Не понятно, заполняется ли все поле 5х5 шариками или остаются пустые места? Какие свойства элементов доступны? И т.п.


  • 0

#3 Bess

Bess

    Активный участник

  • Members
  • PipPip
  • 91 сообщений

Отправлено 09 января 2017 - 11:39

шарики целиком заполняют поле

вперемешку

обычная игра "собери три в ряд"

свапаешь шарики по горизонтали и вертикали, собираешь 3 ряд они исчезают. Сверху досыпаются недостающие шарики, чтобы поле снова заполнилось. И т.д. пока не уничтожешь заданное число шариков.
это приложение из стора, так что я не могу попросить скажем разрабов добавить айдишник для каждого цвет или еще чтото

но возможно есть метод решения


  • 0

#4 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 09 января 2017 - 11:54

Если координаты постоянные и спрайты шариков всегда одинаковые (нет анимации, например), то брать скриншот и потом средствами джавы смотреть цвет пикселей по координатам.

Если есть анимация, и могут быть одинаковые цвета пикселей у шариков с разным цветом (например, белые блики), брать несколько пикселей с области отображения шарика, усреднять RGB значения и определять, к какому цвету ближе полученный оттенок.

В результате, у нас будет матрица 5х5 со значениями цветов.

Ну, а как собрать комбинацию - это отдельный алгоритм.


  • 1

#5 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 09 января 2017 - 11:59

можно sikuli попробовать подключить к реализации.


  • 0

#6 baxatob

baxatob

    Опытный участник

  • Members
  • PipPipPipPip
  • 258 сообщений
  • ФИО:Юрий
  • Город:Riga

Отправлено 09 января 2017 - 12:23

Еще хорошо бы понимать, до какого элемента распознается приложение:

 

Девайс -> Основное Окно -> Игровое Поле -> Клетка -> Шарик или как-то по-другому?


  • 1

#7 Bess

Bess

    Активный участник

  • Members
  • PipPip
  • 91 сообщений

Отправлено 16 января 2017 - 15:40

можно sikuli попробовать подключить к реализации.

sikuli точно не хочу

 

со спрайтами надо попробовать видимо..хотя понятие еще не имею как))почитаю про это


  • 0

#8 Bess

Bess

    Активный участник

  • Members
  • PipPip
  • 91 сообщений

Отправлено 16 января 2017 - 15:45

Еще хорошо бы понимать, до какого элемента распознается приложение:

 

Девайс -> Основное Окно -> Игровое Поле -> Клетка -> Шарик или как-то по-другому?

 

как только захожу в игру, пробовал на нескольких играх
всё то, что принадлежит андроиду - распознается по элементам.

а игры нет

повторюсь использую Uiautomatorviewer, это встроенный тулз android SDK насколько понимаю
скрин даже кину, что он мне показывает ( это не то приложение которое я описывал, это другое, просто скрин для примера)
http://prntscr.com/dwd0cc
пробовал на нескольких разных приложениях игровых в гугл сторе..везде одно


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных