国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

用Java自制手機(jī)聯(lián)網(wǎng)游戲

2019-11-18 12:46:36
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  移動(dòng)通信的迅速發(fā)展,使手機(jī)用戶越來(lái)越多。手機(jī)制造商諾基亞曾宣稱(chēng),計(jì)劃在2003年底之前銷(xiāo)售1億臺(tái)使用java軟件的移動(dòng)電話。與此同時(shí),Internet的進(jìn)一步發(fā)展也急切需要用手機(jī)實(shí)現(xiàn)一些PC能夠完成的功能。本文介紹了一個(gè)可以在手機(jī)上運(yùn)行的聯(lián)網(wǎng)游戲程序。通過(guò)這個(gè)程序,無(wú)論在何地,只要手機(jī)能夠上網(wǎng)就可以和Internet上的朋友聯(lián)網(wǎng)游戲(圖11)。下面對(duì)程序的一些細(xì)節(jié)做一簡(jiǎn)要介紹,希望能給從事Java開(kāi)發(fā)的技術(shù)人員一些啟示。
  J2ME簡(jiǎn)介
  J2ME(Java 2 Micro Edition)是Java 2的一個(gè)組成部分,它與J2SE、J2EE并稱(chēng)。根據(jù)Sun的定義:J2ME是一種高度優(yōu)化的Java運(yùn)行環(huán)境,主要針對(duì)消費(fèi)類(lèi)電子設(shè)備的,例如蜂窩電話和可視電話、數(shù)字機(jī)頂盒、汽車(chē)導(dǎo)航系統(tǒng)等等。J2ME技術(shù)在1999年的JavaOne Developer Conference大會(huì)上正式推出,它將Java語(yǔ)言的與平臺(tái)無(wú)關(guān)的特性移植到小型電子設(shè)備上,答應(yīng)移動(dòng)無(wú)線設(shè)備之間共享應(yīng)用程序。
  J2ME的構(gòu)架
  J2ME的構(gòu)架如圖1、圖2所示。
   用Java自制手機(jī)聯(lián)網(wǎng)游戲(圖一)
  圖1 J2ME的構(gòu)架1
   用Java自制手機(jī)聯(lián)網(wǎng)游戲(圖二)
  圖2 J2ME的構(gòu)架2
  程序運(yùn)行的環(huán)境
  客戶端即為手機(jī)(需支持J2ME的手機(jī),例如motorola 388)用戶,編程環(huán)境是windows 2000 server + MotoJ2SDK+JDK1.3.1+MS SQL server2000,服務(wù)器端為Windows 2000 server+JDK1.3.1。
  J2ME編程流程
  以MotoJ2SDK的開(kāi)發(fā)過(guò)程為例,其流程如下所示:
   用Java自制手機(jī)聯(lián)網(wǎng)游戲(圖三)
  圖3 J2ME編程流程
  程序簡(jiǎn)介
  服務(wù)器端代碼的編寫(xiě)
  客戶端和服務(wù)器端采用Socket連接。服務(wù)器端需要時(shí)刻監(jiān)聽(tīng)客戶的請(qǐng)求(如圖4),一旦有客戶需求,它就需要馬上響應(yīng)(如圖5),并做出相應(yīng)的處理,然后將結(jié)果返回給客戶,客戶顯示服務(wù)器處理結(jié)果(如圖10)。
   用Java自制手機(jī)聯(lián)網(wǎng)游戲(圖四)
  圖4 服務(wù)器監(jiān)聽(tīng)8000端口
   用Java自制手機(jī)聯(lián)網(wǎng)游戲(圖五)
  圖5 服務(wù)器接受到請(qǐng)求并響應(yīng)請(qǐng)求
  服務(wù)器端程序代碼如下:
  
  try{
   gameServer gServer = new gameServer();//創(chuàng)建一個(gè)主類(lèi)實(shí)例
   gServer.newServerSocket(gServer.port);//監(jiān)聽(tīng)gServer.port端口
   while(true)//時(shí)刻等待客戶端連接。
   {
   gServer.con = gServer.server.accept();//一旦有客戶的請(qǐng)求,則接收客戶請(qǐng)求。
   multiRequest cThread=new multiRequest(gServer.gSocket);//為處理客戶端請(qǐng)求建立線程。
   cThread.start();//啟動(dòng)線程處理客戶端請(qǐng)求。
   }
  }catch(IOException e)//捕捉異常。
  {
   System.out.PRintln(“Creating socket error!!!”);
   System.exit(1);
  }
  以下為multiRequest類(lèi)的部分代碼:
  
  class multiRequest extends Thread
  {
   private Socket rSocket;
   private DataInputStream is;
   private DataOutputStream os;
   String strReceive=null;
   String strWhichService=null;
   Private intType;
   public multiRequest(Socket s)throws IOException//構(gòu)造函數(shù)
   {
   rSocket = s;
   inType = 0;
   is = new DataInputStream(rSocket.getInputStream());//建立輸入輸出流。
   os = new DataOutputStream(rSocket.getOutputStream());
   }
   public void run()
   {
   try{
  strReceive=in.readUTF();
  strWhichService=strReceive.substring(0,2);
   //分離出用戶向服務(wù)器發(fā)送子串的前兩個(gè)字符,這個(gè)字符標(biāo)志著用戶請(qǐng)求的服務(wù)種類(lèi)。
  if(strWhichService.equals(“/r”)) intType=1;//請(qǐng)求注冊(cè)服務(wù)。
  else if(strWhichService.equals(“/s”) intType=2;//請(qǐng)求查詢分?jǐn)?shù)服務(wù)。
  else if(strWhichService.equals(“/5”) intType=3;//請(qǐng)求五子棋服務(wù)。
  ……//請(qǐng)求其它服務(wù)(略)
  switch(intType)
  {
  case 1: newUser();break;
  case 2: findByGradeByUserID();break;
  case 3: playWuzi();break;
  default 0:displayError();break;
  }
   }catch(IOException e){}
   finally
   {
  try{
  rSocket.close();
  }catch(IOException e){}
   }
   }
  …………//(略)
  }
  由于手機(jī)端硬件的限制,所以,復(fù)雜的查找和處理都由配置較好服務(wù)器端處理。這樣手機(jī)端可以減輕負(fù)擔(dān),專(zhuān)職處理界面的美觀,以贏取客戶的喜愛(ài)。例如,手機(jī)用戶提出查分?jǐn)?shù)請(qǐng)求時(shí),手機(jī)向服務(wù)器發(fā)出請(qǐng)求“/s:user”。服務(wù)器接收到該子串,首先分離為“/s”和“user”,“/s”表示查詢分?jǐn)?shù),“user”表示用戶的ID。這時(shí)服務(wù)器端就調(diào)用findByGradeByUserID(),該函數(shù)利用JDBC連接數(shù)據(jù)庫(kù)查詢用戶成績(jī),并將查詢結(jié)果發(fā)送給客戶端。
  手機(jī)端編程
  手機(jī)端的編程其實(shí)是MIDlet編程。MIDlet的程序流程是這樣的:構(gòu)造函數(shù)→startApp()→監(jiān)聽(tīng)事件、接收命令→commandAction()方法→調(diào)用別的方法→假如是exit()命令調(diào)用pauseApp()→destroyApp()方法。以圖形表示MIDlet的生命周期如圖6所示。實(shí)際上,MIDlet程序的運(yùn)行流程和Applet程序的運(yùn)行流程差不多。
   用Java自制手機(jī)聯(lián)網(wǎng)游戲(圖六)
  圖6 生命周期
  
  手機(jī)端程序舉例如下:
  
  import javax.microedition.lcdui.*;//用戶界面包,主要用戶構(gòu)建用戶的程序界面。
  import javax.microedition.midlet.*;//MIDlet類(lèi)。
  import javax.microedition.io.*;//網(wǎng)絡(luò)IO包。
  ……
  public class MobileMIDlet extends MIDlet implements CommandListener
  {
   ……//一些變量的聲明(略)。
   MobileMIDlet()
   {
   myDisplay = Display.getDisplay(this) ;
   }
   protected void startApp() throws MIDletStateChangeException
   {
  
   ……//一些變量的初始化。
   myDisplay.setCurrent(funcSelected);//設(shè)置當(dāng)前顯示界面為用戶功能選擇界面(圖7)
   }
   ……
   public void commandAction(Command c,Displayable d)
   {
   if (d == funcSelected)//用戶在主界面選擇。
   {
  switch (((List)d).getSelectedIndex())
  {
   case 0://用戶選擇了游戲功能。
   myCanvas = new ClientCanvas();
   myDisplay.setCurrent(myCanvas);
   break;
   case 1://用戶選擇了查詢。
   myDisplay.setCurrent(SearchForm);
   break;
   ……//其它選擇略。
  }
  }else if(d==SearchForm)
  {
  if(c==okCommand){//假如用戶點(diǎn)擊了發(fā)送按鈕(圖9)。
  try{
  SendAndWaitAndDisplay();
  //開(kāi)始發(fā)送用戶填寫(xiě)的資料,同時(shí)顯示等待界面。
  一旦接收到服務(wù)器發(fā)送過(guò)來(lái)的查詢結(jié)果,則分析并且在手機(jī)上顯示查詢。
  }catch(IOException e)
  {
   System.out.println(“error!”);}
  }
  }
  ……//略去其它處理
   }
   }//class
   用Java自制手機(jī)聯(lián)網(wǎng)游戲(圖七)
  圖7 功能選擇界面圖8 手寫(xiě)輸入圖9 提交查詢
  從以上程序段可以看出,手機(jī)端的程序主要是控件的部署和簡(jiǎn)單按鈕動(dòng)作的處理。由于手機(jī)硬件限制,手機(jī)端不可能進(jìn)行復(fù)雜的操作,所以,對(duì)于數(shù)據(jù)庫(kù)等類(lèi)型的操作應(yīng)該盡量放在服務(wù)器端處理,以減輕用戶負(fù)擔(dān)。
  數(shù)據(jù)的發(fā)送與接收
  利用服務(wù)器端和客戶端建立的輸入、輸出流,可以輕松實(shí)現(xiàn)數(shù)據(jù)的在客戶端和服務(wù)器端的收發(fā)工作。
  用Java自制手機(jī)聯(lián)網(wǎng)游戲(圖八)
  圖10 查詢結(jié)果圖11 聯(lián)網(wǎng)游戲
  程序段舉例如下:
  is = new DataInputStream(rSocket.getInputStream());//建立輸入輸出流。
  os = new DataOutputStream(rSocket.getOutputStream());
  ……
  //數(shù)據(jù)發(fā)送
  try
  {
   os.writeUTF(sendMsg);//sendMsg為String類(lèi)。用UTF編碼發(fā)送數(shù)據(jù).
   os.Flash();
  }catch(IOException e)
  {
   System.out.println(“Send msg error! ”);};
  ……
  //數(shù)據(jù)接收
  try
  {
   recMsg=in.readUTF();//將信息讀入String recMsg中。
  }catch(IOExcetpion e)
  {
   System.out.println(“Recevie msg error!”);
  }
  移動(dòng)通信的迅速發(fā)展、手機(jī)用戶驟然增加,必然使手機(jī)軟件成為一個(gè)巨大的市場(chǎng)。與一般軟件相比,更有發(fā)展?jié)摿Φ木W(wǎng)絡(luò)游戲必然更具有開(kāi)發(fā)潛力。利用本文介紹的程序可以構(gòu)建一個(gè)手機(jī)聯(lián)網(wǎng)游戲城,就像聯(lián)眾一樣。不過(guò)連入的客戶端不再是沉重的、移動(dòng)不方便的PC,而是輕便的手機(jī)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 施秉县| 青铜峡市| 萨迦县| 塔城市| 新龙县| 宣武区| 福鼎市| 九江市| 平泉县| 特克斯县| 定结县| 宁化县| 石河子市| 乌苏市| 宝清县| 六枝特区| 泰州市| 玛曲县| 龙江县| 鄂尔多斯市| 周至县| 万荣县| 普陀区| 枞阳县| 阳西县| 杂多县| 青河县| 成都市| 彩票| 德钦县| 常宁市| 彭泽县| 葵青区| 永顺县| 汽车| 达拉特旗| 龙南县| 霍林郭勒市| 巢湖市| 永年县| 哈巴河县|