?

Log in

No account? Create an account
 
lazzzycat
Чтобы не зависеть от интернета, для приложения необходимо научиться работать с offline сартой.
Засад тут несколько.
1) OSMDroid по простецки позволяет работать с .png файлами - размеры большие.
2) Нужно создать карту в формате .zip с нужными тайлами
тут свои засады. Масштаб может меняться для MAPQUESTOSM варианта от 0 до 18. В zip файле имеем ограничение на количество файлов в 64К - нужно учитывать как-то это ограничение.
3) Каким то образом положить файл с картой в папку sdcard/osmdroid, причем я не нашел как OSMDroid указать другую папку или имя файла без мануального вмешательства в исходный код библиотеки.
4) непонятно как подсовывать разные офлайн карты программе

В общем - для создания карты в zip файле пользуемся программой Mobile Atlas Creator http://mobac.sourceforge.net/. Написана на Java. Позволяет использовать несколько онлайн источников карт, выделять фрагмент карты, сохранять его в разной детализации и в разных форматах.

Для нашего случая выбираем в меню New Atlas
Выбираем в качестве формата атласа OSMDroid ZIP
В качестве источника данных OpenStreetMap MapQuest
Нужные нам уровни масштабирования (на 18 для моего города например было несколько десятков ошибок скачивания)
Нажимаем кнопку Add Selection
И в меню жмем Create atlas.

В итоге в папке программы в подпапке atlases получаем готовый архив. Распакуем его, папку “MapQuest” переименовываем в “MapquestOSM” и снова архивируем. Имя файла не важно, но без ведущих цифр и русских букв - по некоторым данным бывают проблемы с таким именем.

Как теперь прикрутить к нашей программе этот файл? Ниже даю пример
public View onCreateView(LayoutInflater inflater,ViewGroup parent,Bundle savedInstanceState){
        View v = inflater.inflate(R.layout.fragment_main,parent,false);
        myOpenMapView = (MapView)v.findViewById(R.id.openmapview);
        myOpenMapView.setUseDataConnection(false); //work from directory osmdroid
       
        myOpenMapView.setTileSource(TileSourceFactory.MAPQUESTOSM);
        myOpenMapView.setBuiltInZoomControls(true);
        myOpenMapView.setMultiTouchControls(true);

        myOpenMapView.setMaxZoomLevel(15);
        myOpenMapView.setMinZoomLevel(12);
        BoundingBoxE6 bbox = new BoundingBoxE6(46.520131,30.774078,46.451105,30.686188);
        myOpenMapView.setScrollableAreaLimit(bbox);
        myMapController = (MapController) myOpenMapView.getController();
        myMapController.setZoom(12);
       
        myMapController.setCenter(new GeoPoint(46.46766, 30.726013));
       
        return v;
    }


функция по инициализации фрагмента
запрещаем работать с онлайн картой
myOpenMapView.setUseDataConnection(false);

источник тайлов
myOpenMapView.setTileSource(TileSourceFactory.MAPQUESTOSM);

максимальное и минимальное значение масштаба
myOpenMapView.setMaxZoomLevel(15);
myOpenMapView.setMinZoomLevel(12);

задаем ограничение по скроллируемой области
BoundingBoxE6 bbox = new BoundingBoxE6(46.520131,30.774078,46.451105,30.686188);
myOpenMapView.setScrollableAreaLimit(bbox);


текущий масштаб карты
myMapController.setZoom(12);

центр карты
myMapController.setCenter(new GeoPoint(46.46766, 30.726013));

для начала хватит
 
 
 
lazzzycat
И наконец самое главное – логика игры.

Все в логике вертится вокруг ячейки — класса Cell.
Экземпляр класса Cell имеет два параметра CellState — открыта, закрыта или помечена ячейка
MineState — есть/нет мины, количество мин в соседях.

При создании ячейки — ставим состояние — мин нет, ячейка закрыта
Есть функции установки и получения состояния ячейки.

Объявляем массив ячеек, соответствующий игровому полю
Cell [] [] CellField;

А теперь собственно класс логики игры MinesLohic
Read more...Collapse )