 |
 |
 |
 |
 |
|
|
 |
 |
|
На прошлых уроках мы создали игру. Персонаж бегает по лабиринту в поисках своего дргуа.
Чем быстрее игрок найдет потерянного друга, тем больше очков он заработает. Дадим пользователю возможность
сравнивать свой результат с результатами других играков. Для этого будем хранить таблицу результатов на
удаленном сервере.
Для соединения с удаленным сервером будем использовать Java ME Web Service API (JSR 172).
В NetBeans Mobility есть специальный мастер генерирующий JSR172 код для мобильного клиента.
Шаг 1. Создаем новую конфигураци
На этом шаге мы создадим новую конфигурацию в нашем проекте, что позволит нам иметь две версии проекта.
Первую мы будем использовать для online игры, а вторую - для offline.
- Щелкните правой кнопкой по MobileGameApp в дереве проекта
.
- В открывшемся диалоге выберите Add Configuration... в выпадающем меню Project configurations. Откроется Add Configuration диалог.
- Введите в качестве имени новой конфигурации OnlineGame и нажмите кнопку Finish.
- В свойствах проекта выберите Abilities и снимите галочку с Use Values from DefaultConfiguration
- Нажмите кнопку Add. В диалоге Add Ability введите имя ONLINE и значение true. Нажмите OK.
- Нажмите OK, чтобы закрыть диалог свойств проекта.
Шаг 2. Генерируем код
На этом шаге с помощью специального мастера мы создадим клиент для Web сервиса.
- Выберем File>New File... из главного меню. В появившемся диалоге выберем MIDP категорию и
Java ME Web Service Client. Убедитесь, что в дереве проектов выбран MobileGameApp. Нажмите Next.
- Теперь нужно указать URL WDSL файла веб сервиса. WDSL может нахдится на вашем локальном диске или на сервере в сети.
Для нашего веб сервиса нужно задать следующий URL:
http://193.86.76.42:8080/DukeHighScores/HighScoresService?WSDL
- Выберите Running Web Service.
- Введите 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 мастер даст Вам об этом знать.
- Измените имя созданного пакета на org.netbeans.j1.game.client.
- После нажатия кнопки Finish, в дереве проектов должна появиться новая папка.
Шаг 3. Изменяем код игры
- Добавляем в конец файла GameMIDlet.java
//TODO: [Exercise 4][step 3] add the getMobileClient() method
HighScoresService client = null;
public HighScoresService getMobileClient() {
if(client == null) {
client = new HighScoresService_Stub();
}
return client;
}
- Добавляем import
- Изменяем метод getAddHighScoreTask, который собственно отправляет данные на сервер.
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;
}
- Обновляем метод getHighScoresTask для загрузки данных с сервера.
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, которая позволяет сравивать свой результат с результатами других играков.
- Переключите конфигурацию в DefaultConfiguration
- Запустите проект. При этом запустится offline версия.
- Переключте конфигурацию на OnlineGame в выпадающем меню в середине панели инструментов.
- Запустите проект. При этом запустится online версия.
|
|
 |
Сигары. У нас хьюмидоры по доступной цене. А
|
 |
 |
 |
 |
 |
 |