На прошлых уроках мы создали игру. Персонаж бегает по лабиринту в поисках своего дргуа. Чем быстрее игрок найдет потерянного друга, тем больше очков он заработает. Дадим пользователю возможность сравнивать свой результат с результатами других играков. Для этого будем хранить таблицу результатов на удаленном сервере.
Для соединения с удаленным сервером будем использоватьJava ME Web Service API(JSR 172).
ВNetBeans Mobility есть специальный мастер генерирующийJSR172 код для мобильного клиента.
На этом шаге мы создадим новую конфигурацию в нашем проекте, что позволит нам иметь две версии проекта. Первую мы будем использовать для online игры, а вторую - для offline.
На этом шаге с помощью специального мастера мы создадим клиент для Web сервиса.
//TODO: [Exercise 4][step 3] add the getMobileClient() method HighScoresService client=null; public HighScoresService getMobileClient(){ if(client==null){ client=new HighScoresService_Stub(); } return client; }
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; }
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; }
На этом создание игры закончено. Фактически мы сделали две версии игры: offline и online, которая позволяет сравивать свой результат с результатами других играков.