Программирование Android и iPhone
Вконтакте Twitter Google+ Facebook RSS
Главная J2ME
Создаем игру с помощью визуальных средств NetBeans. Урок 4 – Соединение с удаленным сервером


На прошлых уроках мы создали игру. Персонаж бегает по лабиринту в поисках своего дргуа. Чем быстрее игрок найдет потерянного друга, тем больше очков он заработает. Дадим пользователю возможность сравнивать свой результат с результатами других играков. Для этого будем хранить таблицу результатов на удаленном сервере.

Для соединения с удаленным сервером будем использовать Java ME Web Service API (JSR 172).

В NetBeans Mobility есть специальный мастер генерирующий JSR172 код для мобильного клиента.

Шаг 1. Создаем новую конфигураци

На этом шаге мы создадим новую конфигурацию в нашем проекте, что позволит нам иметь две версии проекта. Первую мы будем использовать для online игры, а вторую - для offline.

  1. Щелкните правой кнопкой по MobileGameApp в дереве проекта
  2. .
  3. В открывшемся диалоге выберите Add Configuration... в выпадающем меню Project configurations. Откроется Add Configuration диалог.
  4. Введите в качестве имени новой конфигурации OnlineGame и нажмите кнопку Finish.
  5. NetBeans JSR 172
  6. В свойствах проекта выберите Abilities и снимите галочку с Use Values from DefaultConfiguration
  7. Нажмите кнопку Add. В диалоге Add Ability введите имя ONLINE и значение true. Нажмите OK.
  8. NetBeans JSR172 альтернативная конфигурация проекта.
  9. Нажмите OK, чтобы закрыть диалог свойств проекта.

Шаг 2. Генерируем код

На этом шаге с помощью специального мастера мы создадим клиент для Web сервиса.

  1. Выберем File>New File... из главного меню. В появившемся диалоге выберем MIDP категорию и Java ME Web Service Client. Убедитесь, что в дереве проектов выбран MobileGameApp. Нажмите Next.
  2. Теперь нужно указать URL WDSL файла веб сервиса. WDSL может нахдится на вашем локальном диске или на сервере в сети. Для нашего веб сервиса нужно задать следующий URL:
    http://193.86.76.42:8080/DukeHighScores/HighScoresService?WSDL
  3. Выберите Running Web Service.
  4. Введите URL сайта в поле WSDL URL. Нажмите кнопку Retrieve WSDL. В случае, если все проделано правильно, WDSL файл должен автоматически появиться в поле Local Filename.
    Внутренняя проверка WDSL включает несколько этапов. Java ME Web Service Client можно генерировать только для сервисов определенных в JSR 172. Сервис должен быть совместим с WS-I Basic Profile, который не поддерживает асинхронный режим работы, SOAP сообзения с вложениями, и т.д... В случае если сервис не совместим с WS-I Basic Profile, NetBeans мастер даст Вам об этом знать.
  5. Измените имя созданного пакета на org.netbeans.j1.game.client.
  6. Java ME Web Service Client
  7. После нажатия кнопки Finish, в дереве проектов должна появиться новая папка.
  8. NetBeans Project

Шаг 3. Изменяем код игры

  1. Добавляем в конец файла GameMIDlet.java
  2. //TODO: [Exercise 4][step 3] add the getMobileClient() method
      HighScoresService client = null;
      public HighScoresService getMobileClient() {
         if(client == null) {
          client = new HighScoresService_Stub();
         }
        return client;
       }
  3. Добавляем import
  4. Изменяем метод getAddHighScoreTask, который собственно отправляет данные на сервер.
  5.    public SimpleCancellableTask getAddHighScoreTask() {
            if (addHighScoreTask == null) {//GEN-END:|34-getter|0|34-preInit
                // write pre-init user code here
                addHighScoreTask = new SimpleCancellableTask();//GEN-BEGIN:|34-getter|1|34-execute
                addHighScoreTask.setExecutable(new org.netbeans.microedition.util.Executable() {
                    public void execute() throws Exception {//GEN-END:|34-getter|1|34-execute
    //#if ONLINE == "true"
    //# //TODO: [Exercise 4][step 3] set High score
    //# //upload the score to WS
    //# getMobileClient().setHighScore(getNameTextField().getString(), lastHighScore);
    //upload the name and high score to server
    //# //get the high scores from WS again to synchronize with server side
    //# updateHighScoresTable(getMobileClient().getHighScores());
    //download the high scores from server
    //#else
                        //just add the score to the scores table
                        addScoreToScoreTable(lastHighScore, getNameTextField().getString());
    //#endif
                        //anyway update the High scores table
                        updateSvgWithHighScores();
                    }//GEN-BEGIN:|34-getter|2|34-postInit
                });//GEN-END:|34-getter|2|34-postInit
            // write post-init user code here
            }//GEN-BEGIN:|34-getter|3|
            return addHighScoreTask;
        }
  6. Обновляем метод getHighScoresTask для загрузки данных с сервера.
  7.   public SimpleCancellableTask getHighScoresTask() {
            if (highScoresTask == null) {//GEN-END:|79-getter|0|79-preInit
                // write pre-init user code here
                highScoresTask = new SimpleCancellableTask();//GEN-BEGIN:|79-getter|1|79-execute
                highScoresTask.setExecutable(new org.netbeans.microedition.util.Executable() {
                    public void execute() throws Exception {//GEN-END:|79-getter|1|79-execute
                        // write task-execution user code here
    //#if (ONLINE == "true")
    //# //TODO: [Exercise 4][step 3] get High Scores
    //# //connect to WS and get the latest scores
    //# updateHighScoresTable(getMobileClient().getHighScores());//download the high scores
    //# //update the high score table
    //# updateSvgWithHighScores();//update the svg image with the latest high scores
    //#else
                        //this code is used when the ONLINE ability value isn't true
                        //nothing to do. The high scores are in the highScoresValues array already
                        Thread.sleep(10);
    //#endif
     
                    }//GEN-BEGIN:|79-getter|2|79-postInit
                });//GEN-END:|79-getter|2|79-postInit
            // write post-init user code here
            }//GEN-BEGIN:|79-getter|3|
            return highScoresTask;
        }
     

Шаг 4. Запуск игры

На этом создание игры закончено. Фактически мы сделали две версии игры: offline и online, которая позволяет сравивать свой результат с результатами других играков.

  1. Переключите конфигурацию в DefaultConfiguration
  2. Запустите проект. При этом запустится offline версия.
  3. Переключте конфигурацию на OnlineGame в выпадающем меню в середине панели инструментов.
  4. Запустите проект. При этом запустится online версия.

 


Баннер

ИНТЕРЕСНОЕ



Сигары. У нас хьюмидоры по доступной цене. А
Новости [1] [2] [3]... / Программинг ( Android/ iOS/ J2ME[1] [2] [3]) / Безопасность / Статьи / Софт ( Android / iOS) / Форум / Архив ( Symbian/ Статьи)
Рейтинг@Mail.ru

MobiLab.ru © 2005-2012
При использовании материалов сайта ссылка на www.mobilab.ru обязательна