版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 目錄</b></p><p><b> 1 緒論2</b></p><p><b> 1.1 背景2</b></p><p> 1.2 Android的崛起2</p><p> 1.3 國內外研究現狀3</p><
2、;p> 1.4 項目研究的主要內容4</p><p> 1.5 本章小結4</p><p> 2 Android的開發(fā)環(huán)境4</p><p> 2.1 Android操作系統(tǒng)4</p><p> 2.2 Android開發(fā)環(huán)境4</p><p> 2.3 Android開發(fā)環(huán)境變量的配置5
3、</p><p> 2.3.1 JDK的配置5</p><p> 2.3.2 SDK的配置6</p><p> 2.4 Eclipse的配置6</p><p> 2.5 本章小結7</p><p> 3 Android應用程序核心7</p><p> 3.1 應用程序基礎
4、7</p><p> 3.2 應用程序組件8</p><p> 3.2.1 Acitivity8</p><p> 3.2.2 Service9</p><p> 3.2.3 BroadcastReciver10</p><p> 3.2.4 ContentProvider12</p>
5、<p> 3.3 本章小結12</p><p> 4 項目相設計13</p><p> 4.1 研究目的13</p><p> 4.2 需求分析13</p><p> 4.3 游戲界面設置13</p><p> 4.3.1 等登陸界面13</p><p>
6、4.3.2 游戲主界面14</p><p> 4.3.3 玩家升級Pk與做任務的界面14</p><p> 4.3.4 購買物品與地產的界面14</p><p> 4.3.5 玩家之間的聊天界面與發(fā)送系統(tǒng)消息與世界消息的界面15</p><p> 4.4 游戲體系設計15</p><p> 5 計代
7、碼的實現16</p><p> 5.1客戶端與服務器的交互16</p><p> 5.2用戶與用戶之間聊天的實現17</p><p> 5.3 挑戰(zhàn)列表的實現22</p><p><b> 6 結論30</b></p><p><b> 致 謝31</b&g
8、t;</p><p><b> 緒論</b></p><p><b> 背景</b></p><p> 3G(第三代數字通訊技術)正離我們的生活越來越近,它的到來必將掀起一陣無線通訊的新浪潮,3G是向未來個人通信演進的一個重要發(fā)展階段,具有里程碑和劃時代的意義。</p><p> 說到3G不
9、能不談到Android,[1]Android是Google于2007年11月5日宣布的基于Linux平臺的開源手機操作系統(tǒng)。它包括一個操作系統(tǒng),中間件和一些重要的應用程序。它采用軟件堆層(Software Stack,又名軟件疊層)的架構,主要分為三部分。底層以Linux內核工作為基礎,由C語言開發(fā),只提供基本功能;中間層包括函數庫Library和Dalvik虛擬機,由C++開發(fā)。最上層是各種應用軟件,包括通話程序,短信程序等,應用軟件
10、則由各公司自行開發(fā),以Java作為編寫程序的一部分。不存在任何以往阻礙移動產業(yè)創(chuàng)新的專有權障礙,號稱是首個為移動終端打造的真正開放和完整的移動軟件。這里,可以把android看作是一個類似于windows的操作系統(tǒng)。學習android平臺下的軟件開發(fā)正如以前學習windows平臺下的軟件開發(fā)一樣。[1]</p><p> 在國內,android的前景十分廣闊,國內很多的廠商和運營商也紛紛加入了android陣營
11、,包括中國移動,中國聯通,華為通訊,聯想等大企業(yè)。同時android應用的范圍不僅僅在手機,國內一些廠家也陸續(xù)推出了采用android系統(tǒng)的MID產品,比較著名的包括由Rockchip和藍魔推出的同時具備高清播放和智能系統(tǒng)的音悅匯W7,我們可以預見android也將會被廣泛應用在國產智能上網設備上,將進一步擴大Andorid系統(tǒng)的應用范圍。</p><p> Android的崛起</p><
12、p> 【2】Android操作系統(tǒng)是Google最具殺傷力的武器之一。蘋果以其天才的創(chuàng)新,使得iphone在全球迅速擁有了數百萬忠實粉絲,而Android作為第一個完整的,開放,免費的手機平臺,使開發(fā)者在為其開發(fā)程序時擁有更大的自由。與Windows,Symbian等廠商不同的是,Android操作系統(tǒng)免費向開發(fā)人員提供,這樣可節(jié)省近三成的成本,得到了眾多廠商和開發(fā)者的擁護?!?】最早進入Android市場的宏達已經陸續(xù)在一年內
13、推出了G1,Magic,Hero,Tatto等4款手機,三星也在2010年推出了Galaxyi7500,連摩托羅拉也推出了新款Android手機Cliq,中國移動也以Android為基礎開發(fā)了Ophone平臺。這些發(fā)展證明Android已成為只能手機市場的重要發(fā)展趨勢。</p><p> [3]2010年是android平臺飛速發(fā)展的一年。據報道顯示,2011年8月Android已占據了全球智能手機市場的半壁江
14、山;而作為世界上零售領域最龐大的智能手機賣家蘋果公司,也以其iOS操作系統(tǒng)控制了五分之一的市場。換言之,Android和iOS加起來在全球智能手機市場上占據了三分之二的絕大多數市場份額。Android已經在智能手機操作系統(tǒng)上占據著主導地位。這不難解釋,畢竟這樣一個完全免費并開放源代碼的平臺對于許多制造商來說都極具吸引力。包括HTC、Samsung、Acer、Sony Ericsson、LG、Motorola等等一系列廠商都對其投入了極大
15、地關注和合作。[3]</p><p> 因此,2011年6月Google宣稱其每天激活50萬Android設備,我們對這一消息并不會感到十分吃驚。這一數據雖然也包括平板電腦在內,但即便是這樣,它也仍然非??捎^。它不僅僅顯示了Android在制造商和消費者間的普及度,同時還標志著智能手機正在成為如今社會不可缺少的一部分。Andy是一個有遠見的人,早在2003年他就看到了Android2005年的起步和被Googl
16、e的收購,也看到了系統(tǒng)的進步和新的機型的快速的發(fā)布。所有的這一切都讓我們相信,Android走向世界第一移動操作系統(tǒng)的寶座的步伐是勢不可擋的,Android可能真的會繼續(xù)帶著我們走向移動設備夢想的彼岸。</p><p><b> 國內外研究現狀</b></p><p> Android 包括操作系統(tǒng)、用戶界面和應用程序 —— 移動電話工作所需的全部軟件,而且不存在
17、任何以往阻礙移動產業(yè)創(chuàng)新的專有權障礙。Google與開放手機聯盟合作開發(fā)了 Android,這個聯盟由包括中國移動、摩托羅拉、高通、宏達電和 T-Mobile 在內的 30 多家技術和無線應用的領軍企業(yè)組成。Google通過與運營商、設備制造商、開發(fā)商和其他有關各方結成深層次的合作伙伴關系,希望借助建立標準化、開放式的移動電話軟件平臺,在移動產業(yè)內形成一個開放式的生態(tài)系統(tǒng)。</p><p> 【4】Androi
18、d 作為谷歌企業(yè)戰(zhàn)略的重要組成部分,將進一步推進"隨時隨地為每個人提供信息"這一企業(yè)目標的實現。我們發(fā)現,全球為數眾多的移動電話用戶從未使用過任何基于 Android 的電話。谷歌的目標是讓(移動通訊)不依賴于設備甚至平臺。出于這個目的,Android 將補充,而不會替代谷歌長期以來奉行的移動發(fā)展戰(zhàn)略:通過與全球各地的手機制造商和移動運營商結成合作伙伴,開發(fā)既有用又有吸引力的移動服務,并推廣這些產品?!?】</
19、p><p> 開放手機聯盟的成立和 Android 的推出是對現狀的重大改變,在帶來初步效益之前,還需要不小的耐心和高昂的投入。但是,谷歌也在不斷努力,讓這些服務變得更好,同時也將添加更有吸引力的特性、應用和服務。</p><p><b> 項目研究的主要內容</b></p><p> 此游戲主要用到了Android用來畫圖的API,主類繼承
20、view類,重寫其onDraw()方法并另起一個線程對主UI線程更新,實現整個游戲的動態(tài)效果。其中自己寫了很多算法來實現一些炫酷的效果。</p><p> 游戲主體框架的構思,分為8大部分: com.hkdg.animation用來存放游戲中所用到的對ani動畫的初始化及播放的類。 com.hkdg.game主要用來存放從服務器解析過來的數據,也包括讀取的本地數據。 com.hkdg.game.Music用來存
21、放游戲中音樂,音效的初始化及播放的類。 com.hkdg.game.Object游戲中所用到的所有實體類存放在此。 com.hkdg.game.View游戲UI由若干自定義View組成,所有的View類存放于此。 com.hkdg.GameEngine此包中主要存放的是一個繼承了View的類,它另起了一個線程用來繪制界面,并同時更新主UI線程。 com.hkdg.Main這是一個存放著幾個Activity的包,游戲中為數不多的幾個act
22、ivity都存放于此。 com.hkdg.tools這是一個存放著工具類的工具包。</p><p><b> 本章小結</b></p><p> 本章主要對Android的發(fā)展歷程以及對本游戲內容進行了簡單的闡述,為Android開發(fā)者提供一個參考。</p><p> Android的開發(fā)環(huán)境</p><p>
23、Android操作系統(tǒng)</p><p> 目前只支持XP(32-bit)、Vista(32/64-bit)、Mac OS X 10.4.8或更新版本(x86),Linux(只在Linux Ubuntu Dapper Drake上面做過測試)。 系統(tǒng)XP sp2/sp3 32bit 來做講解,其他系統(tǒng)的可以google一下差異,反正都大同小異的。</p><p> Android開發(fā)環(huán)境
24、</p><p> 建議使用eclipse進行開發(fā),當然,eclipse版本要在3.3以上,這是官方說法,3.3以下我也沒測過,3.3 (Europa)、3.4 (Ganymede) 都可以java版本或者EE版本也都沒問題的,可以到eclipse官方下載最新版本。因為開發(fā)是基于java的,所以jdk是少不了的,jdk要求是5.0或者6.0,我還是用5.0比較多,可以到sun官方下載。</p>&
25、lt;p> Android開發(fā)環(huán)境變量的配置</p><p><b> JDK的配置</b></p><p> 首先要到sun官方下載jdk,注意的是下載jdk而不是下載jre,因為jre是提供java的運行環(huán)境而不是開發(fā)環(huán)境。sun官方網站是:http://java.sun.com 下載后安裝是下的解壓包那就解壓到某目錄,例如解壓到是C:\Program
26、 Files\Java\jdk1.5.0_14 右鍵點擊我的電腦 -> 屬性 -> 高級,點擊下面的環(huán)境變量,在下面的“系統(tǒng)變量”處選擇新建在變量名處輸入 JAVA_HOME變量值中輸入剛才的目錄,比如C:\Program Files\Java\jdk1.5.0_14 。效果如圖2-1所示:</p><p> 圖2-3-1-1 進入環(huán)境變量</p><p> 確定后再新建一
27、個變量名為classpath,變量值為 %JAVA_HOME%/lib/rt.jar;%JAVA_HOME%/lib/tools.jar , 確定后找到PATH的變量,雙擊或點擊編輯,在變量值最前面加上%JAVA_HOME%/bin; 注意里面的是,確定、確定、確定后即可。具體如下圖2-2所示</p><p> 圖2-3-1-2 環(huán)境變量的配置</p><p> 然后開始 - 運行 c
28、md,輸入java或者javac看看有沒有效果,如果出來一大堆其它的東西,那就好了,如果出現類似xxx不是內部或者是外部命令之類的,那就說明你的設置有問題,看看那里出問題然后加以改正。</p><p><b> SDK的配置</b></p><p> 因為我們要開發(fā)的android應用程序,所以下的sdk是Google那里下載,地址在http://develope
29、r.android.com/sdk/1.5_r3/index.html 以后更新后估計地址會變,所以大家可以從http://developer.android.com/index.html進入android主頁,然后點擊sdk就到了這個下載頁面,我是XP,當然下載了第一個Windows的版本。下載后解壓到一個目錄,如D:\SDK\android-sdk-windows-1.5_r3\android-sdk-windows-1.5_r3
30、然后同樣要設置環(huán)境變量,同jdk設置,新建一個SDK_HOME,值為D:\SDK\android-sdk-windows-1.5_r3\android-sdk-windows-1.5_r3 ,然后找到path,在前面加上%SDK_HOME%\tools; 就OK了。和jdk一樣,我們也可以測試一下環(huán)境變量是否設置成功,cmd窗口中輸入android,出現一堆東西,就完成了。</p><p> Eclipse的配
31、置</p><p> 當然,以上都搞定后,還不能馬上用eclipse開發(fā)android應用程序,還必須添加eclipse插件才行,幸好這步驟非常輕松,打開eclipse后,點擊菜單欄的help -> install new software... 然后點擊Add會出來一個Add Site的窗口,這里Name輸入android(自己取個就是了),location中輸入插件的網絡地址: https://dl-
32、ssl.google.com/android/eclipse/然后就等待連接了,然后install,把"Android DDMS" 和 "Android Development Tools"都選中,finish就可以了,可能有段時間會去計算插件占用資源情況,慢慢等會。完成后會提示重啟eclipse來加載插件,ok重啟,就可以用了。</p><p><b> 本章
33、小結</b></p><p> 本章將主要介紹如何構建Android開發(fā)環(huán)境,包括獲取Android SDK、Eclipse以及進行Android Eclipse插件設置等。</p><p> Android應用程序核心</p><p><b> 應用程序基礎</b></p><p> Android
34、的應用程序全部都是用Java編程語言所寫的。編譯后的Java代碼——包括應用程序要求的任何數據和資源文件,是通過aapt工具捆綁成一個Android包,歸檔文件是以.apk為后綴。這個文件是分發(fā)應用程序和安裝到移動設備的中介或者是工具,用戶下載這個文件到他們自己的設備上。一個.apk文件中的所有代碼就會被認為是一個應用程序。 </p><p> aapt是Android Asset Packaging Tool
35、的首寫字母的縮寫,這個工具包是含在SDK</p><p> 的tools/目錄下的。查看、創(chuàng)建、更新與zip兼容的歸檔文件(zip、jar、apk)。它也能將資源文件編譯成二進制包。 </p><p> 雖然你可能不會經常直接使用appt,但構建腳本(build scripts)和IDE插件會使用這個工具打包成apk文件,構成一個Android的應用程序。 </p>&l
36、t;p> 下面是更詳細的使用細節(jié),[5]首先打開一個終端,進入tools/目錄下,運行命令: Linux或Mac操作系統(tǒng):./aapt ,如果是Windows:aapt.exe 。在這里注意的是:tools/目錄指的是android SDK目錄下的/platforms/android-X/tools/。在很多的方面,每個Android的應用程序是生活在它自己的世界。默認的情況下,任何一個應用程序是運行在它自己的Linux進程中。
37、而當應用程序中的任何代碼需要被執(zhí)行時候,Android將啟動進程;當它不再需要和系統(tǒng)資源不會被其他應用程序所請求時,Android就會關閉這個進程。每一個應用程序都有自己的Java虛擬機(VM),所以應用程序的代碼是獨立于其他所有的應用程序代碼的運行。在默認情況下,每一個應用程序分配一個唯一的Linux用戶ID。權限被設置為每一個應用程序的文件僅對用戶和應用程序自己本身可見。雖然有一些方法也可以暴露他們給其他應用程序。也有可能的是設置兩
38、個應用程序共享一個用戶ID,這種情況下,他們能夠看到對方的文件。為了節(jié)省系統(tǒng)資源的占用,具有相同ID的應用程序最好可以安排在同一個Linu</p><p><b> 應用程序組件</b></p><p><b> Acitivity</b></p><p> Activity是Android組件中最基本也是最為常見的
39、組件,在一個Android應用中,一個Activity通常就是一個單獨的屏幕。當Activity從一種狀態(tài)轉變到另一種狀態(tài)時,會調用以下保護方法來通知這種變化:</p><p> void onCreate(Bundle savedInstanceState)</p><p> void onStart()</p><p> void onRestart()v
40、oid onResume()</p><p> void onPause()void onStop()</p><p> void onDestroy()</p><p> 【6】下圖為Activity的生命周期圖示:</p><p> 圖3-2-1 Activity的生命周期圖示[6]</p><p> 在
41、實現 Activity 類的時候,通過覆蓋( override )這些方法即可在你需要處理的時候來調用。</p><p> onCreate :當活動第一次啟動的時候,觸發(fā)該方法,可以在此時完成活動的初始化工作。onCreate 方法有一個參數,該參數可以為空( null ),也可以是之前調用onSaveInstanceState ()方法保存的狀態(tài)信息。</p><p> onSta
42、rt :該方法的觸發(fā)表示所屬活動將被展現給用戶。</p><p> onResume :當一個活動和用戶發(fā)生交互的時候,觸發(fā)該方法。</p><p> onPause :當一個正在前臺運行的活動因為其他的活動需要前臺運行而轉入后臺運行的時候,觸發(fā)該方法。這時候需要將活動的狀態(tài)持久化,比如正在編輯的數據庫記錄等。</p><p> onStop :當一個活動不再
43、需要展示給用戶的時候,觸發(fā)該方法。如果內存緊張,系統(tǒng)會直接結束這個活動,而不會觸發(fā) onStop 方法。 所以保存狀態(tài)信息是應該在onPause時做,而不是onStop時做?;顒尤绻麤]有在前臺運行,都將被停止或者Linux管理進程為了給新的活動預留足夠的存儲空間而隨時結束這些活動。因此對于開發(fā)者來說,在設計應用程序的時候,必須時刻牢記這一原則。在一些情況下,onPause方法或許是活動觸發(fā)的最后的方法,因此開發(fā)者需要在這個時候保存需要保
44、存的信息。</p><p> onRestart :當處于停止狀態(tài)的活動需要再次展現給用戶的時候,觸發(fā)該方法。</p><p> onDestroy :當活動銷毀的時候,觸發(fā)該方法。和onStop 方法一樣,如果內存緊張,系統(tǒng)會直接結束這個活動而不會觸發(fā)該方法。</p><p> onSaveInstanceState :系統(tǒng)調用該方法,允許活動保存之前的狀態(tài)
45、,比如說在一串字符串中的光標所處的位置等。</p><p> 通常情況下,開發(fā)者不需要重寫覆蓋該方法,在默認的實現中,已經提供了自動保存活動所涉及到的用戶界面組件的所有狀態(tài)信息。</p><p><b> Service</b></p><p> Service是一種長生命周期,沒有用戶界面的程序。</p><p>
46、; Service是android 系統(tǒng)中的一種組件,它跟Activity的級別差不多,但是他不能自己運行,只能后臺運行,并且可以和其他組件進行交互。Service的啟動有兩種方式:context.startService()和context.bindService()。</p><p> 【7】使用context.startService() 啟動Service是會經歷:context.startServi
47、ce() ->onCreate()- >onStart()->Service running context.stopService() | ->onDestroy() ->Service stop如果Service還沒有運行,則android先調用onCreate()然后調用onStart();如果Service已經運行,則只調用onStart(),所以一個Service的onStart方法可能會重復調用
48、多次。stopService的時候直接onDestroy,如果是調用者自己直接退出而沒有調用stopService的話,Service會一直在后臺運行。該Service的調用者再啟動起來后可以通過stopService關閉Service。 所以調用startService的生命周期為:onCreate --> onStart(可多次調用) --> onDestroy 使用使用context.bindService()
49、啟動Service會經歷: context</p><p> BroadcastReciver</p><p> BrodcastReciver是為了實現系統(tǒng)廣播而提供的組件。</p><p> 在android下,要想接受廣播信息,那么這個廣播接收器就得我們自己來實現了,我們可以繼承BroadcastReceiver,就可以有一個廣播接受器了。有個接受器還不
50、夠,我們還得重寫B(tài)roadcastReceiver里面的onReceiver方法,當來廣播的時候我們要干什么,這就要我們自己來實現。具體的代碼:</p><p> public class SmsBroadCastReceiver extends BroadcastReceiver </p><p><b> { </b></p>
51、<p> @Override </p><p> public void onReceive(Context context, Intent intent) </p><p><b> { </b></p><p> Bundle bundle = intent.getExtras();
52、 </p><p> //這里寫你要做的事情 </p><p> } </p><p><b> } </b></p><p> 我們可以把廣播接收器注冊到系統(tǒng)里面,可以讓系統(tǒng)知道我們有個廣播接收器。這里有兩種,一種是代碼動態(tài)注冊:</p><p>
53、; //生成廣播處理 </p><p> smsBroadCastReceiver = new SmsBroadCastReceiver(); </p><p> //實例化過濾器并設置要過濾的廣播 </p><p> IntentFilter intentFilter = new IntentFilter("android.provid
54、er.Telephony.SMS_RECEIVED"); </p><p><b> //注冊廣播 </b></p><p> BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter); </p><p>
55、 //onDestroy要注銷廣播 </p><p> 調用unregisterReceiver(..)函數; </p><p> 一種是在AndroidManifest.xml中配置廣播 </p><p> <?xml version="1.0" encoding="utf-8"?> <
56、/p><p> <manifest xmlns:android="http://schemas.android.com/apk/res/android" </p><p> package="spl.broadCastReceiver" </p><p> android:versionCode="1&q
57、uot; </p><p> android:versionName="1.0"> </p><p> <application android:icon="@drawable/icon" android:label="@string/app_name"> </p><p>
58、 <activity android:name=".BroadCastReceiverActivity" </p><p> android:label="@string/app_name"> </p><p> <intent-filter> </p><p> <action
59、 android:name="android.intent.action.MAIN" /> </p><p> <category android:name="android.intent.category.LAUNCHER" /> </p><p> </intent-filter> </p>
60、;<p> </activity> </p><p> <!--廣播注冊--> </p><p> <receiver android:name=".SmsBroadCastReceiver"> </p><p> <intent-filter android:prior
61、ity="20"> </p><p> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </p><p> </intent-filter> </p><p> </receiver>
62、 </p><p> </application> </p><p> <uses-sdk android:minSdkVersion="7" /> </p><p> <!-- 權限申請 --> </p><p> <uses-permission a
63、ndroid:name="android.permission.RECEIVE_SMS"></uses-permission> </p><p> </manifest> </p><p> 兩種注冊類型的區(qū)別是:</p><p> 1)第一種不是常駐型廣播,也就是說廣播跟隨程序的生命周期。</
64、p><p> 2)第二種是常駐型,也就是說當應用程序關閉后,如果有信息廣播來,程序也會被系統(tǒng)調用自動運行。</p><p> ContentProvider</p><p> ContentProvider可以實現不同組件之間的數據共享。</p><p> ContentProvider:為存儲和獲取數據提供統(tǒng)一的接口??梢栽诓煌膽贸?/p>
65、序之間共享數據。Android已經為常見的一些數據提供了默認的ContentProvider1、ContentProvider使用表的形式來組織數據 無論數據的來源是什么,ContentProvider都會認為是一種表,然后把數據組織成表格2、ContentProvider提供的方法 query:查詢 insert:插入 update:更新 delete:刪除 getType:得到數據類型 onCreate:創(chuàng)建數據時
66、調用的回調函數3、每個ContentProvider都有一個公共的URI,這個URI用于表示這個ContentProvider所提供的數據。Android所提供的ContentProvider都存放在android.provider包當中二、ContentProvider的內部原理自定義一個ContentProvider,來實現內部原理步驟:1、定義一個CONTENT_URI常量(里面的字符串必須是唯一)</p>
67、<p> Public static final Uri CONTENT_URI = Uri.parse("content://com.WangWeiDa.MyContentprovider");</p><p> 如果有子表,URI為:</p><p> Public static final Uri CONTENT_URI = Uri.parse(
68、"content://com.WangWeiDa.MyContentProvider/users");</p><p> 2、定義一個類,繼承ContentProviderPublic class MyContentProvider extends ContentProvider</p><p><b> 本章小結</b></p>
69、;<p> 本章將會詳細敘述Android的應用程序所包括的基本組件,還有這些組件之間的溝通方式—Intent(除了Contentprovider),同時講解一下Android應用程序的生命周期(Activity)—這是其他智能收與Android手機平臺最顯著不同的地方。最后將介紹在Android的應用程序中如何利用下載外部資源。</p><p><b> 項目相設計</b>
70、;</p><p><b> 研究目的</b></p><p> 了解Android網絡游戲的設計,開發(fā)過程和后期的項目維護;</p><p> 了解smartFoxServer的使用和其API的使用;</p><p> 能夠更加熟練的使用開發(fā)軟件與真機調試</p><p><b&g
71、t; 需求分析</b></p><p> 通過與多位玩家進行全面深入地探討和分析,并完成《江湖行-風云再現》市場的前期調查后,提出了游戲需求分析說明書。</p><p> 此需求分析說明書對《江湖行-風云再現》游戲做了全面細致的用戶需求分析,明確所要開發(fā)的游戲軟件應具有的功能、性能與界面,使系統(tǒng)分析人員及軟件開發(fā)人員能清楚地了解玩家的需求,并在此基礎上進一步提出概要設計說
72、明書和完成后續(xù)設計與開發(fā)工作。</p><p> 本說明書的預期讀者為客戶、業(yè)務或需求分析人員、測試人員、用戶文檔編寫者、項目管理人員。</p><p><b> 游戲界面設置</b></p><p> 《江湖行-風云再現》這款Android系統(tǒng)下的手機網絡游戲,簡單易于操作,交互性好,界面美觀布局清晰,大致分為5個部分:</p&g
73、t;<p> 4.3.1 等登陸界面</p><p> 登陸界面主要是實現玩家的登陸,注冊,及修改資料功能</p><p> 4.3.2 游戲主界面</p><p> 游戲主界面主要是對游戲的整體畫面與游戲功能繪制</p><p> 4.3.3 玩家升級Pk與做任務的界面</p><p> 玩
74、家主要是通過與別的玩家pK和做任務來升級</p><p> 4.3.4 購買物品與地產的界面</p><p> 玩家可以通過在武器店購買裝備來提升自己的戰(zhàn)斗力,也可以在黑點里花錢買元寶和恢復血,能力和氣,玩家可以在生意那里購買地產來賺得額外的銀兩</p><p> 4.3.5 玩家之間的聊天界面與發(fā)送系統(tǒng)消息與世界消息的界面</p><p&
75、gt; 主要是實現玩家之間的聊天與在系統(tǒng)頻道和世界頻道發(fā)送要顯示的消息 </p><p><b> 游戲體系設計</b></p><p> 此軟件主要針對客戶端設計的,由于玩家的登陸,將玩家信息存進服務器,通過smartFoxServer來進行客戶端與服務器的交互,具體實現是客戶端發(fā)出請求指令并傳送相關信息
76、,服務器發(fā)出回復指令并返回對應信息給用戶。將玩家的消息,在游戲界面上顯示給玩家看,玩家可以選擇不同的操作,來向服務器發(fā)出不同的指令,服務器根據玩家發(fā)來的不同指令對應著不同的接口,然后相應的的給予回復。</p><p><b> 計代碼的實現</b></p><p> 5.1客戶端與服務器的交互</p><p> 通過smartFoxSer
77、ver來進行交互的,用戶發(fā)出請求指令和信息,服務器響應發(fā)出回復指令和信息</p><p> public SmartFox sfsClient;</p><p> public void initSmartFox() {//服務器的初始化和銷毀</p><p> sfsClient = new SmartFox(true);</p><p&
78、gt; sfsClient.setDebug(false);</p><p> sfsClient.addEventListener(SFSEvent.CONNECTION,this);</p><p> sfsClient.addEventListener(SFSEvent.CONNECTION_LOST, this);</p><p> sfsClien
79、t.addEventListener(SFSEvent.LOGIN, this);</p><p> sfsClient.addEventListener(SFSEvent.ROOM_JOIN, this);</p><p> sfsClient.addEventListener(SFSEvent.EXTENSION_RESPONSE, this);</p><p&
80、gt;<b> }</b></p><p> public void destroy() {</p><p> if (sfsClient != null) {</p><p> sfsClient.removeEventListener(SFSEvent.CONNECTION, this);sfsClient.removeEven
81、tListener(SFSEvent.CONNECTION_LOST, this);</p><p> sfsClient.removeEventListener(SFSEvent.LOGIN, this);</p><p> sfsClient.removeEventListener(SFSEvent.ROOM_JOIN, this);</p><p> s
82、fsClient.removeEventListener(SFSEvent.HANDSHAKE, this);</p><p> sfsClient.disconnect();</p><p><b> }</b></p><p><b> }</b></p><p> 客戶端向服務器發(fā)送請
83、求指令實現的方法(買物品的請求)</p><p> Public void requestBuyProduct(int productID,int productType){</p><p> ISFSObject params = new SFSObject();</p><p> params.putLong(Keys.PLAYER.PLAYERID, G
84、ameData.roleData.id);</p><p> params.putInt(Keys.PRODUCTID, productID);</p><p> params.putInt(Keys.TYPE, productType);</p><p> sfsClient.send(new ExtensionRequest(SRequest.NdBuyP
85、roduct,</p><p><b> params));</b></p><p> game.gameView.sleep(200);</p><p><b> }</b></p><p> 服務器響應客戶端發(fā)出指令實現的方法</p><p> public v
86、oid responsePickUpEveryDay(){//獲取游戲幣</p><p> ISFSObject io = NdObj.getSFSObject(SResponse.UPDATE_PLAYER);</p><p> String tip = io.getUtfString(Keys.HINT);</p><p> GameData.roleDa
87、ta.login++;</p><p> if(tip.length() > 0){</p><p> game.gameView.loadProgress.sendMessage(LoadProgress.ShowText, tip);</p><p><b> }</b></p><p> Game
88、Data.roleData.totalGold = io.getLong(Keys.PLAYER.GOLD);</p><p> SFSConnect.isGetLogin = false;</p><p><b> }</b></p><p> 5.2用戶與用戶之間聊天的實現</p><p> 本段代碼主要是實
89、現用戶與用戶之間的聊天功能以及聊天內容的繪制,用戶發(fā)送信息給其他用戶時,系統(tǒng)先調用發(fā)送信息指令向服務器發(fā)送請求,并將用戶的信息以及用戶的個人信息保存在本地,服務器接受到指令后,根據用戶信息的內容(主要是對方ID)將發(fā)出響應指令給對方,本地保存的信息也一并發(fā)給對方。</p><p> public class PersonChatView {</p><p> private Vecto
90、r<PriLetter> letters=new Vector<PriLetter>();</p><p> private int screenH;</p><p> private int onTouchY;</p><p> private Bitmap inputWindow;</p><p> pri
91、vate Bitmap sendIcon;</p><p> private GamePlay game;</p><p> private CRect inputRect = new CRect();</p><p> private CRect sendRect = new CRect();</p><p> private CR
92、ect contentRect = new CRect();</p><p> private long id;</p><p> public PersonChatView(GamePlay game){</p><p> this.game = game;</p><p><b> }</b></p&g
93、t;<p> public void init(long id){</p><p> this.id = id;</p><p> letters.removeAllElements();//從letter中找到交流的內容</p><p> for(int i = 0;i< JHXFactory.letters.size();i++){
94、</p><p> PriLetter letter= JHXFactory.letters.elementAt(i);</p><p> if(letter.reciverID == id || letter.senderID == id || letter.uin.equalsIgnoreCase(game.player.uin)){</p><p> l
95、etters.add(letter);</p><p><b> }</b></p><p><b> }</b></p><p> contentRect.set(0,180,480,618);</p><p> inputWindow=game.imaManager.createAsse
96、tsBitmap("talkbg");</p><p> sendIcon=game.imaManager.createAssetsBitmap("sendtalk");}</p><p> public void destroy(){</p><p> if(inputWindow != null &&
97、 !inputWindow.isRecycled()){</p><p> inputWindow.recycle();</p><p><b> }</b></p><p> inputWindow = null;</p><p> if(sendIcon != null && !sendIco
98、n.isRecycled()){</p><p> sendIcon.recycle();</p><p><b> }</b></p><p> sendIcon = null;</p><p><b> }</b></p><p> String str;<
99、;/p><p> String[] strArr;</p><p> public void paint(Canvas canvas ,Paint paint){</p><p> canvas.drawBitmap(game.state.menuBg, 0,145, paint</p><p> int y = 200-screenH
100、;</p><p> canvas.save();</p><p> canvas.clipRect(contentRect.toRect());</p><p> for(int i = 0;i< letters.size();i++){</p><p> PriLetter letter = letters.elementA
101、t(i);</p><p> if(letter.senderID == GameData.roleData.id){//靠右邊繪制</p><p> str = letter.senderName + " "+letter.sendDate;</p><p> Constant.textPaint.setColor(Color.CYAN)
102、;</p><p> Constant.textPaint.setTextAlign(Align.RIGHT);</p><p> Constant.textPaint.setTextSize(Constant.S_Font);</p><p> canvas.drawText(str, Constant.CANVAS_WIDTH - 20, y, Const
103、ant.textPaint);</p><p><b> y+= 20;</b></p><p><b> //繪制內容</b></p><p> Constant.textPaint.setTextSize(Constant.M_Font);</p><p> Constant.textP
104、aint.setColor(0xff632b09);</p><p> int end,start = 0;</p><p> int length = letter.content.length();</p><p> while(true){</p><p> end = start + 16;</p><p&
105、gt; if(end >= length){</p><p> str = letter.content.substring(start);</p><p> canvas.drawText(str, Constant.CANVAS_WIDTH - 35, y, Constant.textPaint);</p><p><b> y+= 20
106、;</b></p><p><b> break;</b></p><p><b> }else{</b></p><p> str = letter.content.substring(start,end);</p><p> canvas.drawText(str, Cons
107、tant.CANVAS_WIDTH - 35, y, Constant.textPaint);</p><p><b> y+= 20;</b></p><p><b> }</b></p><p> start = end;</p><p><b> }</b><
108、;/p><p> Constant.textPaint.setTextAlign(Align.CENTER);</p><p> canvas.drawText("--------------------------------------------------------------------------", Constant.CANVAS_WIDTH >&
109、gt; 1, y, Constant.textPaint);</p><p><b> y+=20;</b></p><p> }else {//靠左邊繪制</p><p> str = letter.senderName + " "+letter.sendDate;</p><p> Con
110、stant.textPaint.setTextAlign(Align.LEFT);</p><p> Constant.textPaint.setTextSize(Constant.S_Font);</p><p> Constant.textPaint.setColor(0xff03038d);</p><p> canvas.drawText(str, 2
111、0, y, Constant.textPaint);</p><p><b> y+= 20;</b></p><p><b> //繪制內容</b></p><p> Constant.textPaint.setTextSize(Constant.M_Font);</p><p> int
112、 end,start = 0;</p><p> int length = letter.content.length();</p><p> Constant.textPaint.setColor(0xff632b09);</p><p> while(true){</p><p> end = start + 16;</p&
113、gt;<p> if(end >= length){</p><p> end = length;</p><p> str = letter.content.substring(start);</p><p> canvas.drawText(str, 35, y, Constant.textPaint);</p><
114、;p><b> y+= 20;</b></p><p><b> break;</b></p><p><b> }else{</b></p><p> str=letter.content.substring(start,end);</p><p> canv
115、as.drawText(str, 35, y, Constant.textPaint);</p><p><b> y+= 20;</b></p><p><b> }</b></p><p> start = end;</p><p><b> }</b></p
116、><p><b> //繪制虛線</b></p><p> Constant.textPaint.setTextAlign(Align.CENTER);</p><p> canvas.drawText("----------------------------------------------------------------
117、----------", Constant.CANVAS_WIDTH >> 1, y, Constant.textPaint);</p><p><b> y+=20;</b></p><p><b> }</b></p><p><b> }</b></p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文--基于android操作系統(tǒng)的飛機大戰(zhàn)手機游戲
- 基于android操作系統(tǒng)的足球小將手機游戲畢業(yè)論文
- 基于android操作系統(tǒng)的飛機大戰(zhàn)手機游戲畢業(yè)論文(設計)
- 畢業(yè)論文-基于android操作系統(tǒng)的中國象棋手機游戲
- android操作系統(tǒng)簡介
- 畢業(yè)論文----淺談linux操作系統(tǒng)的安全
- 淺談linux操作系統(tǒng)的安全畢業(yè)論文
- android 操作系統(tǒng)的介紹
- 畢業(yè)論文-實時操作系統(tǒng)設計【精校排版】
- 畢業(yè)論文---用flash制作《網絡操作系統(tǒng)》課件
- 智能手機的操作系統(tǒng)畢業(yè)論文
- 礦主井裝載操作系統(tǒng)的設計畢業(yè)論文
- 智能手機的操作系統(tǒng)畢業(yè)論文
- 操作系統(tǒng)文件管理算法研究畢業(yè)論文
- 操作系統(tǒng)文件管理算法研究畢業(yè)論文
- 淺談操作系統(tǒng)(操作系統(tǒng)論文)
- 畢業(yè)論文---一個簡易操作系統(tǒng)的實現
- 操作系統(tǒng)遠程考試系統(tǒng)的設計與實現畢業(yè)論文
- 畢業(yè)論文---一個簡易操作系統(tǒng)的實現
- 一個簡易操作系統(tǒng)的實現畢業(yè)論文
評論
0/150
提交評論