基于J2ME的MOTO手機(jī)的五子棋游戲開發(fā)_第1頁
基于J2ME的MOTO手機(jī)的五子棋游戲開發(fā)_第2頁
基于J2ME的MOTO手機(jī)的五子棋游戲開發(fā)_第3頁
基于J2ME的MOTO手機(jī)的五子棋游戲開發(fā)_第4頁
基于J2ME的MOTO手機(jī)的五子棋游戲開發(fā)_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、西安文理學(xué)院計(jì)算機(jī)科學(xué)系本科畢業(yè)設(shè)計(jì) ( 論文) (2009 屆) 設(shè)計(jì)題目基于 motorola手機(jī)的五子棋游戲開發(fā) the development of five son chess based on motorola cellular phone 系別計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)軟件工程班級(jí)軟工( 2)學(xué)號(hào) 05413425 作者姓名 xxx 指導(dǎo)老師xxx完稿時(shí)間 2009-3-25成績(jī)i 摘要j2me(java 2 micro edition) 是近年來隨著各種不同設(shè)備,尤其是移動(dòng)通信設(shè)備的飛速發(fā)展而誕生的一項(xiàng)新的開發(fā)技術(shù)。它定位在消費(fèi)性電子產(chǎn)品的應(yīng)用上,對(duì)設(shè)備的智能化、多樣化,提供了革命性

2、的解決方案,并因其“write once, run anywhere”的 java特性而提高開發(fā)的效率。隨著手機(jī)的日益普及、 java功能在移動(dòng)設(shè)備上的實(shí)現(xiàn),java 應(yīng)用程序產(chǎn)生的手機(jī)增值服務(wù)逐漸體現(xiàn)出其影響力,對(duì)豐富人們的生活內(nèi)容、提供快捷的資訊起著不可忽視的作用。特別是手機(jī)性能的逐漸增強(qiáng),手機(jī)作為一個(gè)游戲平臺(tái)越來越成熟了。本論文著眼于j2me 技術(shù)的應(yīng)用,開發(fā)一款可用的手機(jī)游戲程序五子棋。本論文介紹了 j2me 的相關(guān)技術(shù)及本程序的結(jié)構(gòu)分析和具體功能的實(shí)現(xiàn)。關(guān)鍵詞: j2me;手機(jī)游戲;五子棋ii abstract j2me is a kind of fast developing te

3、chnology implemented on various devices especially mobile communication equipments. it focuses on application for consumptive electronic products, providing revolutionary solution to the intelligence and diversification of the equipment. it improves the efficiency of the development process thanks t

4、o its “write once, run anywhere” nature.when mobile phone is getting ever more popular nowadays, with the implementation of java technology on mobile equipment, increment of capital on communication service exhibits its force on people s everyday life, providing them ever fast information just in ha

5、nd. mobile phone whose capability is greater is more and more mature for game. this dissertation focuses on implementation of j2me technology and has developed a commercial game suite run on mobile phones gobang. this dissertation introduces j2me and its relative technology as well as this program s

6、 structure and analysis of implementation in details. keywords: j2me; mobile game; gobang iii 目 錄第一章背景與意義 . - 1 - 1.1 手機(jī)業(yè)的情況. - 1 - 1.2 java 手機(jī)的優(yōu)點(diǎn) . - 1 - 1.3 java 手機(jī)發(fā)展現(xiàn)狀. - 2 - 1.4 論文組織 . - 4 - 第二章 j2me綜述 . - 5 - 2.1 j2me 簡(jiǎn)介 . - 5 - 2.2 j2me 的相關(guān)特性 . - 5 - 第三章需求分析 . - 7 - 3.1 基本需求分析. - 7 - 3.2 游戲玩法及

7、規(guī)則. - 7 - 第四章游戲設(shè)計(jì)分析. - 8 - 4.1 軟件總體框架圖. - 8 - 4.2 單機(jī)挑戰(zhàn)版 . - 10 - 4.3 雙人對(duì)戰(zhàn)版 . - 20 - 4.4 藍(lán)牙終極版 . - 22 - 4.5 游戲主類介紹及實(shí)現(xiàn). - 23 - 第五章總結(jié)與展望 . - 29 - 參考資料 . - 30 - 致謝 . - 31 - - 1 - 第一章背景與意義1.1 手機(jī)業(yè)的情況2007年全球共銷售了大約11.5億部手機(jī), 手機(jī)市場(chǎng)主要靠非洲和亞洲手機(jī)銷量上升拉動(dòng),歐洲的手機(jī)銷量保持穩(wěn)定。2007 年中國(guó)的手機(jī)年銷售量達(dá)到1.9 億部,手機(jī)的普及率是39%,擁有 5.25億用戶。中國(guó)在手機(jī)

8、生產(chǎn)制造領(lǐng)域的優(yōu)勢(shì)不斷加強(qiáng),手機(jī)在中國(guó)自身的信息技術(shù)市場(chǎng)扮演的角色也越來越重要。經(jīng)過五年的規(guī)模化發(fā)展,中國(guó)手機(jī)市場(chǎng)已進(jìn)入成熟期,2007年銷量將達(dá) 1.5億部,同比增長(zhǎng) 23.1%;銷售額將達(dá) 1661 億元,受低端手機(jī)份額擴(kuò)大的影響,銷售額同比下降 0.3%。2007 年,諾基亞生產(chǎn)了4 億 3710萬手機(jī),三星生產(chǎn)了1 億6120 萬部手機(jī), 摩托羅拉生產(chǎn)了 1 億 5900萬,緊挨著的是索尼愛立信, 生產(chǎn)了 1億 340萬部手機(jī), 而且 lg 生產(chǎn)了 8050萬。其他公司生產(chǎn)了1 億 8430萬部手機(jī),所有的公司將總共出售12億 4 千萬部手機(jī)。2007 年,各大手機(jī)廠商采用不同策略推動(dòng)

9、市場(chǎng)發(fā)展,導(dǎo)致品牌競(jìng)爭(zhēng)激烈。諾基亞推動(dòng)娛樂市場(chǎng)戰(zhàn)略并涉足互聯(lián)網(wǎng)服務(wù)領(lǐng)域;索尼愛立信彌補(bǔ)智能手機(jī)軟肋;三星放下架子攻低端;摩托羅拉發(fā)展受阻,其他國(guó)外品牌如lg、飛利浦等表現(xiàn)不佳。多普達(dá)鋒芒畢露,其他國(guó)產(chǎn)品牌在生死線上掙扎。手機(jī)市場(chǎng)再現(xiàn)黑馬,蘋果高調(diào)入市,魅族、紐曼先后進(jìn)入手機(jī)市場(chǎng)。預(yù)計(jì)到 2011年,全球市場(chǎng)售出的手機(jī)中有四分之一的產(chǎn)品將是超低價(jià)手機(jī)。未來五年,印度將是超低價(jià)手機(jī)的最大市場(chǎng),其超低價(jià)手機(jī)年銷量將從2006年的900 萬部增加到 2011年的 1.16 億部。1.2 java 手機(jī)的優(yōu)點(diǎn)java 手機(jī)軟件平臺(tái)采用的基本java 平臺(tái)是cldc (connected limited

10、device configuration)和 midp (mobile information device profile) ,是 j2me (java 2 micro edition)的一部分,在中國(guó)一般稱為 “ 無線 java”技術(shù)。 此前, 有人把它叫做 “k-java”;其實(shí), k-java 的叫法只是 sun 公司在開發(fā) kvm java 虛擬機(jī)時(shí)的項(xiàng)目代號(hào),在該技術(shù)被正式命名為kvm 后,就不再用 k-java了。kjava即 j2me (java 2 micro edition) , 是 sun公司專門用于嵌入式設(shè)備的java軟件。以 kjava 編程語言為手機(jī)開發(fā)應(yīng)用程序,可

11、以為手機(jī)用戶提供游戲、個(gè)人信息處理、 電子地圖、股票等服務(wù)程序。 j2me(java 2 micro edition)是致力于消費(fèi)產(chǎn)品和嵌入式設(shè)備的最佳解決方案。j2me 在設(shè)計(jì)其規(guī)格的時(shí)候,遵循著“ 對(duì)于各種不同的裝置而造出一個(gè)單一的開發(fā)系統(tǒng)是沒有意義的事” 這個(gè)基本原則。于是j2me 先將所有的嵌入式裝置大體上區(qū)分為兩種:一種是運(yùn)算功能有限、電力供應(yīng)也有限的嵌入式裝置 (比方說 pda、手機(jī) );另外一種是運(yùn)算能力相對(duì)較佳、并且在電力供應(yīng)上相對(duì)比較充足的嵌入式裝置(比方說冷氣機(jī)、電冰箱)。因?yàn)檫@兩種區(qū)分,所以 java引入了一個(gè)叫做 configuration 的概念,然后把上述運(yùn)算功能有

12、限、電力有限的嵌入式裝置定義在connected limited device configuration(cldc)- 2 - 規(guī)格之中;而另外一種裝置則規(guī)范為connected device configuration(cdc)規(guī)格。也就是說, j2me 先把所有的嵌入式裝置利用configuration 的概念區(qū)隔成兩種抽象的型態(tài)。java技術(shù)的開放性、安全性和龐大的社會(huì)已有資源,以及其跨平臺(tái)性,即“ 編寫一次,到處運(yùn)行 ” 的特點(diǎn),使java 技術(shù)成為智能手機(jī)軟件平臺(tái)的事實(shí)標(biāo)準(zhǔn)。采用 java技術(shù)后,編寫應(yīng)用程序和提供服務(wù)的人就不必關(guān)心接受其服務(wù)的手機(jī)采用的是什么操作系統(tǒng)和芯片,只要按

13、照java的要求去寫程序就好了;同樣,生產(chǎn)手機(jī)的廠商也不必顧慮將來誰來提供增值服務(wù)??梢钥闯觯捎胘ava技術(shù),可以建立完整、高效的無線數(shù)據(jù)增值服務(wù)產(chǎn)業(yè)鏈,從而為用戶提供靈活、個(gè)性化、內(nèi)容方式多樣的服務(wù)。1.3 java手機(jī)發(fā)展現(xiàn)狀到今年 6 月,全世界已經(jīng)有大約1 億部 java手機(jī)在使用,除中國(guó)大陸外共有53 個(gè)移動(dòng)運(yùn)行商正式推出了基于java技術(shù)的無線數(shù)據(jù)增值服務(wù)。 中國(guó)移動(dòng)通信集團(tuán)已經(jīng)建立了無線java增值服務(wù)體系,并推出了 “ 百寶箱 ” 等服務(wù)品牌,包括游戲百寶箱、娛樂百寶箱、商務(wù)百寶箱、生活百寶箱等,已經(jīng)于2003 年 7 月 10 日開始正式商用。手機(jī)游戲開發(fā)一般都是開放式的開

14、發(fā)平臺(tái),例如流行的開發(fā)平臺(tái),如j2me。開發(fā)人員能夠從網(wǎng)絡(luò)方便的得到相應(yīng)的開發(fā)資料,不論你的資金實(shí)力如何,只要你有興趣,就能夠邁入這個(gè)新興的行業(yè)。而相關(guān)的廠商,例如通信設(shè)備廠家對(duì)于手機(jī)游戲開發(fā)秉承一種開發(fā)的態(tài)度,鼓勵(lì)開發(fā)者在手機(jī)設(shè)備上開發(fā)游戲,通常都在網(wǎng)絡(luò)中提供了自己手機(jī)的技術(shù)資料。下文對(duì)目前市面上流行的手機(jī)游戲平臺(tái)做一個(gè)簡(jiǎn)單的介紹。嵌入/內(nèi)置式游戲早期的手機(jī)功能簡(jiǎn)單、屏幕也僅僅是單色,手機(jī)廠商能做的,就是在手機(jī)內(nèi)置一些簡(jiǎn)單的游戲。這些游戲都是廠商以自己的專屬平臺(tái)所開發(fā)的,這些發(fā)售時(shí)就內(nèi)置的游戲在手機(jī)預(yù)存了多少就是多少,用戶無法自己新增或刪除。in-fusio exen 娛樂平臺(tái)即使是手機(jī)屏幕

15、變成了彩色,內(nèi)置游戲如何好玩,但總而也有玩膩的時(shí)候。因此用戶們也希望能夠玩新的游戲或者象下載圖片、鈴聲那樣通過無線網(wǎng)絡(luò)下載新的游戲。法國(guó) in-fusio 公司看中了這個(gè)市場(chǎng), 在 2001 年推出了 exen (execution engine)游戲平臺(tái)。通過把專屬的exen 芯片加入手機(jī)內(nèi),賦予手機(jī)彩色畫面與流暢的執(zhí)行速度,讓手機(jī)也有掌上游戲機(jī)那樣的效果。j2me 平臺(tái)j2me(java 2 micro edition )平臺(tái)是目前最火暴的手機(jī)游戲平臺(tái),盡管它還可以下載和安裝一些小的應(yīng)用程序。j2me 簡(jiǎn)單的可以理解為java的移動(dòng)版本,其 midp(mobile information

16、device profile ,移動(dòng)信息裝置簡(jiǎn)表)架構(gòu)就是專門- 3 - 為手機(jī)與 pda 而設(shè)計(jì)。目前 midp 有 1.0 和 2.0 之分, 后者在兼容性以及游戲的多媒體表現(xiàn)力如音效和振動(dòng)方面有更好的效果,此外通過測(cè)試軟件顯示,支持midp2.0 的 java 游戲在圖形運(yùn)行能力對(duì)比1.0 版本也有更優(yōu)秀的表現(xiàn)。由于 j2me 的技術(shù)先進(jìn),而且又能跨平臺(tái)運(yùn)行, 因此受到了眾多手機(jī)廠家的支持,甚至成為現(xiàn)在用戶購買手機(jī)的一項(xiàng)比較重要的技術(shù)指標(biāo)。所以到目前為止,手機(jī)的游戲應(yīng)用平臺(tái)中,以支持j2me 的最多,而且 j2me 軟件開發(fā)商也有越來越多的趨勢(shì), j2me 已成為 2002 年下半年之后

17、的行動(dòng)游戲平臺(tái)主流。synergenix mophun平臺(tái)mophun 是瑞典 synergenix公司于 2002 年開發(fā)出的全新移動(dòng)游戲娛樂平臺(tái)。mophun 的發(fā)音類似 more fun,主要就是針對(duì)游戲平臺(tái)而設(shè)計(jì)的游戲語言,采用c 程序代碼來開發(fā)游戲,運(yùn)行起來最穩(wěn)定,速度上也比java vm 快許多倍(廠商宣稱快 100倍) ,可發(fā)揮出手機(jī)硬件的極限。同時(shí),mophun 游戲平臺(tái)能在極其有限的硬件資源上運(yùn)作,其最低硬件需求是以12mhz 運(yùn)行的 8 位處理器,因而適用于現(xiàn)有的 2g 手機(jī)。由于 mophun 的 api 功能齊全,加上是采用本地代碼,運(yùn)行速度快的優(yōu)勢(shì)顯而易見,這點(diǎn)對(duì)于支

18、持mophun 和 java雙游戲平臺(tái)的索愛手機(jī)尤其明顯。通常情況下排除其他因素, 索愛手機(jī)在運(yùn)行 mophun 游戲時(shí)速度遠(yuǎn)遠(yuǎn)超過手機(jī)的java游戲運(yùn)行時(shí)的速度。另外, mophun 游戲在一次下載后就不須再付費(fèi)(這點(diǎn)跟exen的理念一樣),同時(shí) mophun 還具備安全機(jī)制(防盜版) ,主游戲程序無法從手機(jī)中拷出,只提供游戲存盤轉(zhuǎn)存到電腦中。mophun 游戲平臺(tái)因?yàn)榫邆湓跇O其有限的硬件資源上運(yùn)行高效性能,可說是目前手機(jī)最佳的游戲平臺(tái)之一。brew 游戲平臺(tái)brew 是無線二進(jìn)制運(yùn)行環(huán)境 (binary runtime environment for wireless) 的縮寫。是高通公司

19、2001 年推出的基于 cdma 網(wǎng)絡(luò)的一個(gè)增值業(yè)務(wù)開發(fā)運(yùn)行的基本平臺(tái)。相對(duì) java,brew 是一個(gè)更底層的技術(shù)。嚴(yán)格的說游戲僅僅是brew 的一部分內(nèi)容而已。brew 提供的功能環(huán)境就好像pc 機(jī)上的操作系統(tǒng)一樣,可以通過服務(wù)提供商下載指定類型的應(yīng)用程序或游戲來使用。對(duì)于支持 brew 的手機(jī)終端, 在手機(jī)出廠時(shí)已經(jīng)預(yù)安裝了兩個(gè)應(yīng)用。分別為應(yīng)用管理器 (application manager)和移動(dòng)商店( mobileshop) 。未來手機(jī)游戲趨勢(shì)未來的手機(jī)游戲平臺(tái)因?yàn)閍ti 和 nvidia 兩大 pc 顯示芯片廠商專業(yè)級(jí)水準(zhǔn)的加入而更為熱鬧。在ati 推出手機(jī)和 pda 手機(jī) 3d

20、多媒體芯片 (包含專用的媒體處理器 media processor及 3d 加速器 3d accelerator)后,老對(duì)頭 nvida 也毫不示弱,公布了他們的 3d 多媒體芯片, 并且應(yīng)用于三菱和神達(dá)mitac 的智能手機(jī)上。這些芯片在植入手機(jī)后能夠有效的提升圖形顯示性能,使手機(jī)在進(jìn)行多媒體演示和游戲時(shí)更夠有出色顯示效果。不過這些廠家提供的都是硬件芯片,要完全發(fā)揮其在3d 圖形的表現(xiàn)能力還- 4 - 需要相應(yīng)支持的api 才能相輔相成,而目前主要的api 包括 2003 年 7 月發(fā)表的opengl es (opengl for embedded systems ) ,就是 opengl

21、的嵌入式版本,是為嵌入系統(tǒng)而開發(fā)的小型標(biāo)準(zhǔn)三維(3d)圖形應(yīng)用編程接口 (api),并受到那些意圖將3d 游戲引入移動(dòng)設(shè)備的游戲開發(fā)商、手機(jī)廠商、游戲引擎供應(yīng)商和3d 圖形芯片公司的熱烈追捧。目前已知nvidia ar10 與 ati imageon 23xx 3d 芯片,已符合opengl es 1.0 的標(biāo)準(zhǔn)。而最新 symbian os 8.0版本也將支援 opengl es api。相信不久后,手機(jī)上也能玩像是cs、doom、quake的 fps游戲了。1.4 論文組織本論文的組織如下:第一章 介紹了課題的開發(fā)背景和意義,以及國(guó)內(nèi)外狀況。第二章 j2me綜述。第三章 需求分析。第四章

22、游戲設(shè)計(jì)分析。第五章 總結(jié)與展望。- 5 - 第二章 j2me綜述2.1 j2me 簡(jiǎn)介j2me 即 java 2 micro edition ,它是 java 2的組成部分, 與 j2se、j2ee并稱。j2me 是一種高度優(yōu)化的 java運(yùn)行環(huán)境,應(yīng)用于大量的消費(fèi)類電子設(shè)備, 如 cellular phones( 蜂窩電話 )、screen phones( 可視電話 )、digital set-top boxes(數(shù)字機(jī)頂盒 )、car navigation systems( 汽車導(dǎo)向系統(tǒng) )等,同時(shí)也廣泛被移動(dòng)通信設(shè)備所采用,如移動(dòng)電話、雙向?qū)ず魴C(jī)、智能卡、個(gè)人電腦記事本(persona

23、l organizer) 和掌上電腦(palmtop)等。j2me 技術(shù)將 java語言的與平臺(tái)無關(guān)的特性移植到小型電子設(shè)備上,允許移動(dòng)無線設(shè)備之間共享應(yīng)用程序。j2me 使用配置和簡(jiǎn)表定制java 運(yùn)行時(shí)環(huán)境 (jre)。作為一個(gè)完整的jre,j2me 由配置和簡(jiǎn)表組成, 配置決定了使用的 jvm,而簡(jiǎn)表通過添加特定于域的類來定義應(yīng)用程序。與以前 sun 公司推出的 j2ee (java 2 enterprise edition , java 2企業(yè)版 )、j2se (java 2 standard edition ,java 2標(biāo)準(zhǔn)版 )規(guī)范相比, j2me 不是一個(gè)單獨(dú)的技術(shù)規(guī)范,而是一

24、系列技術(shù)規(guī)范總稱。這些規(guī)范定義了java 技術(shù)在資源限制的設(shè)備中的表現(xiàn)形式。 j2me 主要適用于小型嵌入式設(shè)備,這些設(shè)備與pc 或是服務(wù)器設(shè)備相比沒有統(tǒng)一的硬件標(biāo)準(zhǔn)、 外觀與操作方式, 其功用也是千差萬別。 但是 j2me 在適用于這些設(shè)備的同時(shí)也保留了java 的傳統(tǒng)特性,即任何時(shí)間和任何地點(diǎn)的代碼具有可移植性、部署靈活性、安全的網(wǎng)絡(luò)傳輸性,以及代碼穩(wěn)定性。正是因?yàn)槿绱耍_發(fā)人員才可以借助j2me 力量讓編寫的程序能夠運(yùn)行在其他型號(hào)或廠商的設(shè)備上。2.2 j2me 的相關(guān)特性2.2.1 configuration簡(jiǎn)介j2me 在設(shè)計(jì)其規(guī)格的時(shí)候, 遵循著對(duì)于各種不同的裝置而造出一個(gè)單一的開

25、發(fā)系統(tǒng)是沒有意義的事 這個(gè)基本原則。 于是 j2me 先將所有的嵌入式裝置大體上區(qū)分為兩種:一種是運(yùn)算功能有限、電力供應(yīng)也有限的嵌入式裝置(比方說pda 、手機(jī) );另外一種則是運(yùn)算能力相對(duì)較佳、并請(qǐng)?jiān)陔娏?yīng)上相對(duì)比較充足的嵌入式裝置(比方說冷氣機(jī)、電冰箱、電視機(jī)上盒(set-top box)。因?yàn)檫@兩種型態(tài)的嵌入式裝置,所以java 引入了一個(gè)叫做configuration 的概念,然后把上述運(yùn)算功能有限、電力有限的嵌入式裝置定義在connected limited device configuration(cldc) 規(guī)格之中;而另外一種裝置則規(guī)范為connected device co

26、nfiguration(cdc) 規(guī) 格。 也 就 是說 ,j2me 先 把所 有 的 嵌 入 式 裝 置 利 用configuration 的概念區(qū)隔成兩種抽象的型態(tài)。其實(shí)在這里大家可以把configuration 當(dāng)作是 j2me 對(duì)於兩種類型嵌入式裝置的規(guī)格,而這些規(guī)格之中定義了這些裝置至少要符合的運(yùn)算能力、供電能力、記憶體大小等規(guī)范,同時(shí)也定了一組在這些裝置上執(zhí)行的java 程序所能使用的- 6 - 類別函式庫、這些規(guī)范之中所定義的類別函式庫為java 標(biāo)準(zhǔn)核心類別函式庫的子集合以及與該型態(tài)裝置特性相符的擴(kuò)充類別函式庫。比方就cldc 的規(guī)范來說,可以支援的核心類別函式庫為java.l

27、ang.* 、java.io.*、java.util.* ,而支援的擴(kuò)充類別函式庫為java.microedition.io.* 。區(qū)分出兩種主要的configuration 之後,j2me 接著在定義出 profile 的概念。profile 是架構(gòu)在 configuration 之上的規(guī)格。之所以有 profile 的概念,是為了要更明確地區(qū)分出各種嵌入式裝置上java 程序該如何開發(fā)以及它們應(yīng)該具有哪些功能。因此 profile 之中定義了與特定嵌入式裝置非常相關(guān)的擴(kuò)充類別函式庫,而java 程序在各種嵌入式裝置上的使用者介面該如何呈現(xiàn)就是定義在profile 里頭。 profile 之

28、中所定義的擴(kuò)充類別函式庫是根據(jù)底層 configuration 內(nèi)所定義的核心類別函式庫所建立。2.2.2 profile簡(jiǎn)介profile 是建立在某個(gè) configuration 之上的特定 api 集合。一個(gè) configuration只定義虛擬機(jī)和基本的api 集合,不定義建立應(yīng)用程序的細(xì)節(jié)。因此profiles 往往包括應(yīng)用程序生命周期的api,用戶界面 api 以及存儲(chǔ) api。一個(gè) profile 既可直接建立在 configuration 上,也可建立在另一個(gè)profile 之上。為了在不改動(dòng) profile 的前提下增加設(shè)備的功能, 在 profile 之外又提出了可選包,可

29、將它們看成profile 的擴(kuò)展,每個(gè)可選包對(duì)某個(gè)或某些profiles 增加特定的功能。當(dāng)對(duì)某個(gè) profile 需要增加一個(gè)新的 api 時(shí)首先將它定義為可選包。 如果隨著時(shí)間的推移該可選包被廣泛采用,它則可能成為某個(gè)或某些profiles 的一部分。某些廠家特定的api 與可選包起相似功能。j2me 的這種結(jié)構(gòu)很好的適應(yīng)了嵌入設(shè)備的巨大多樣性。從低到高,您可根據(jù)設(shè)備的情況可采用不同的configuration,在同一 configuration中您又可根據(jù)設(shè)備的用途選用不同的profile ,在您的設(shè)備中您還可采用多個(gè)profile ,如果您還嫌功能不夠,尚有可選包可用。 j2me 中第

30、一個(gè)正式發(fā)布的profile 是 midp, 而且隨后比較長(zhǎng)的時(shí)間內(nèi)未有其它 profile 發(fā)布, 以至有人把 midp 等同于 j2me 了, 有人把 wtk 等同于 j2me sdk(由于 j2me 包含的范圍很廣,所以不太可能有廠商推出能支持各種profile 的開發(fā)工具) 。midp 只是 j2me 中的一員,我們來看看到寫本文為止有哪些profile。由于每個(gè) profile 是建立在特定的configuration 之上的,所以我們?cè)趐rofile 后注明其基于的 configuration。目前已有的基于 cldc 的 profile 有 midp,基于 cdc的 profil

31、e 有 fp、pbp。- 7 - 第三章需求分析3.1 基本需求分析手機(jī)屏幕尺寸分為物理尺寸和顯示分辨率兩個(gè)概念。物理尺寸是指屏幕的實(shí)際大小。大的屏幕同時(shí),要配備高分辨率,也就是在這個(gè)尺寸下可以顯示多少個(gè)像素,顯示的像素越多,可以表現(xiàn)的余地自然越大?,F(xiàn)在手機(jī)行業(yè)發(fā)展迅速,不同大小屏幕的手機(jī)迅速發(fā)展,鑒于不同手機(jī)屏幕尺寸不同,我們?cè)谠O(shè)計(jì)游戲的時(shí)候有一下一些要求:一 軟件的界面簡(jiǎn)潔明了,操作簡(jiǎn)單容易。受手機(jī)屏幕大小和顯示的影響,我們?cè)O(shè)計(jì)的軟件界面必須是簡(jiǎn)潔的;手機(jī)鍵盤的不方便,游戲需要設(shè)計(jì)得易操作。二 軟件具有人工智能算法原理要簡(jiǎn)單,并且運(yùn)行快速。游戲是需要快速反應(yīng)的。手機(jī)處理器的頻率直接要求我們

32、需要使用簡(jiǎn)單實(shí)用的智能算法。三 游戲要設(shè)置幾個(gè)難度, 便于不同玩家選擇 . 玩家的游戲水平不一樣, 我們?cè)O(shè)置不同難度供各個(gè)水平的玩家選擇。四 游戲棋盤的大小要靈活,根據(jù)不同手機(jī)屏幕可以調(diào)節(jié)。3.2 游戲玩法及規(guī)則現(xiàn)代五子棋專用棋盤為十五路(15x15) ,共 225 個(gè)交叉點(diǎn)。棋盤正中一點(diǎn)為天元。對(duì)局開始時(shí),先由執(zhí)黑棋一方將一枚棋子落在天元點(diǎn)上,然后由執(zhí)白棋一方在黑棋周圍的交叉點(diǎn)上落子。但是,為了尊重對(duì)方和禮貌起見,持白棋的一方通常將盤面的第二著棋布在自己河界的一側(cè),即直止或斜止。此后黑白雙方輪流落子,直到某一方首先在棋盤的橫線、縱線或斜線上形成連續(xù)五子或五子以上僅對(duì)白棋而言,則該方就算獲勝。

33、連珠五子棋的一個(gè)特點(diǎn)是先行的一方優(yōu)勢(shì)很大,因此在職業(yè)比賽中對(duì)黑方做了種種限制,以利公平競(jìng)爭(zhēng)。 五子棋的比賽規(guī)則如下:1 黑先、白后,從天元開始相互順序落子;2 最先在棋盤橫向、縱向或斜向形成連續(xù)的同色五個(gè)棋子的一方為勝;3 黑棋禁手判負(fù)、白棋無禁手。黑棋禁手有“ 三、三 ” 、“ 四、四 ” 和“ 長(zhǎng)連” ,包括“ 四、三、三 ” 和“ 四、四、三 ” 。黑棋只能以 “ 四、三 ” 取勝;4 如分不出勝負(fù),則到為平局;5 五連與禁手同時(shí)形成,判勝;6 黑方禁手形成時(shí),白方應(yīng)立即指出。若白方未發(fā)現(xiàn)或發(fā)現(xiàn)后不立即指出,反而繼續(xù)落子,則禁手失效,不再判黑方負(fù)。在本游戲中,沒有采用職業(yè)比賽的規(guī)則,直接

34、采用明間規(guī)則,一人一手棋,先成 5 為勝。另外,我們把游戲棋盤設(shè)置為可以調(diào)節(jié)大小,設(shè)置游戲難度以便適用不同手機(jī)。- 8 - 第四章游戲設(shè)計(jì)分析4.1 軟件總體框架圖4.1.1 驅(qū)動(dòng)循環(huán)及類圖圖 1 驅(qū)動(dòng)循環(huán)圖棋類游戲通常具備兩個(gè)重要特性,首先是對(duì)戰(zhàn)雙方輪流落子,其次是落子間隔通常是不確定的,尤其是對(duì)戰(zhàn)后期,可能每一步都需要經(jīng)過深思熟慮,無論是人方還是計(jì)算機(jī)方,都無法對(duì)間隔時(shí)間有事先的預(yù)期。開始玩家落子判 斷 落 子合法性判 斷 游 戲是否結(jié)束計(jì)算機(jī)落子判 斷 游 戲是否結(jié)束等待用戶輸入結(jié)束- 9 - 基于以上兩個(gè)特性,本游戲摒棄了大多游戲采用的線程或者定時(shí)器驅(qū)動(dòng)游戲的方法,而采用了事件驅(qū)動(dòng)方法

35、, 即玩家的鍵盤或觸摸筆出發(fā)游戲的下一步動(dòng)作。事件驅(qū)動(dòng)大大減少了不必要的工作量。軟件的類結(jié)構(gòu):圖 2 軟件類結(jié)構(gòu)整個(gè)游戲由 11 個(gè)類組成。這個(gè)游戲共有三個(gè)版本: 單機(jī)挑戰(zhàn)版, 雙人對(duì)戰(zhàn)版,藍(lán)牙終極版。 單機(jī)挑戰(zhàn)版由 gobang1canvas類和 chesses類組成,gobang1canvas類負(fù)責(zé)游戲界面的繪制,游戲落棋的控制,游戲規(guī)則的控制,游戲算法的控制,游戲勝負(fù)的控制。 chesses類是棋子類,提供棋子,每當(dāng)下一個(gè)棋子的話,就生成一個(gè)棋子對(duì)象。雙人對(duì)戰(zhàn)版由 gobangcanvas類和 chesses類組成。 gobangcanvas類負(fù)責(zé)游戲界面的繪制,游戲落棋的控制,游戲規(guī)則

36、的控制,游戲算法的控制,游戲勝負(fù)的控制。chesses類是棋子類,提供棋子,每當(dāng)下一個(gè)棋子的話,就生成一個(gè)棋子對(duì)象。藍(lán)牙終極版是由 chess類、client 類、connection類、control 類、gameworld類和 server 類組成, chess類提供藍(lán)牙版的棋子,每當(dāng)下一個(gè)棋子的時(shí)候,生成一個(gè)棋子對(duì)象。 client 類和 server 類是建立藍(lán)牙協(xié)議的客戶端和服務(wù)端,當(dāng)服務(wù)canvas midlet gobang1canvas gobangcanvas mycanvas gobang chesses connection control gameworld serve

37、r chess client - 10 - 端啟動(dòng)后,不斷地監(jiān)聽來自客戶端的請(qǐng)求,如果監(jiān)聽到,則連接協(xié)議,準(zhǔn)備進(jìn)行通信,客戶端則在啟動(dòng)后向服務(wù)器端發(fā)送連接請(qǐng)求,如果被服務(wù)端監(jiān)聽到,則配合服務(wù)器端連接。 connection類是負(fù)責(zé)連接客戶端和服務(wù)器端的。control 類負(fù)責(zé)判斷是啟動(dòng)服務(wù)器端還是客戶端,對(duì)應(yīng)游戲中的正方和反方。gameworld類是負(fù)責(zé)繪制棋盤,游戲規(guī)則的控制,以及游戲勝負(fù)的控制,游戲進(jìn)行的控制。4.2 單機(jī)挑戰(zhàn)版4.2.1 單機(jī)挑戰(zhàn)版的程序分析與具體實(shí)現(xiàn)進(jìn)入游戲前的選擇畫面。游戲前我們要選擇游戲的版本,這里有三個(gè)版本,單機(jī)挑戰(zhàn)版,雙人對(duì)戰(zhàn)版,藍(lán)牙終極版,可以操作手機(jī)的上下左

38、右鍵進(jìn)行選擇。圖 3 開機(jī)選擇版本單機(jī)挑戰(zhàn)版有三個(gè)等級(jí)的游戲,分別是初級(jí)、中級(jí)、高級(jí)。由于時(shí)間的原因,目前只完成了初級(jí)的開發(fā),中級(jí)和高級(jí)留作日后進(jìn)一步開發(fā)。圖 4 進(jìn)行等級(jí)的選擇進(jìn)入游戲,開始單機(jī)挑戰(zhàn)版的游戲。- 11 - 圖 5 開始游戲4.2.2 單機(jī)挑戰(zhàn)版的核心類及邏輯實(shí)現(xiàn)gobang1canvas類是主要的實(shí)現(xiàn)類。以下是在游戲中需要用到的變量設(shè)置:int empty;/游戲界面到屏幕邊緣的留空int canvasw,canvash;/畫布的長(zhǎng)和寬int chesslength;/棋子的直徑int chessmaplength,chessmapgrid,chessgridlength;

39、/棋盤的邊長(zhǎng),棋盤一邊格子數(shù),每格寬度int chessmapx,chessmapy;/棋盤左上角 x,y 坐標(biāo)int selectedx,selectedy;/選擇框在棋盤格局上的 x,y 位置boolean isplayer1;/是否是玩家 1 chesses chesses;/棋子數(shù)組boolean newgame;/是否是新的游戲boolean iswin=false;/是否已經(jīng)勝利?int chessespoint;/存放要走的棋子的位置- 12 - staticintchessesnum = 3;/判斷有幾個(gè)棋子就開始堵了下面這個(gè)構(gòu)造函數(shù)對(duì)游戲進(jìn)行初始化,包括棋盤的大小, 界面的繪

40、制, 游戲的加載:主要程序如下:public gobang1canvas(gobang gobang) this.gobang=gobang; newgame=true; empty=10; canvasw=getwidth()-empty;canvash=getheight()-empty; chessmapgrid=15; chesses=new chesseschessmapgrid+1chessmapgrid+1; if(canvaswcanvash) chessmaplength=canvash-canvash%chessmapgrid; chessmapx=(canvasw-che

41、ssmaplength)/2+empty/2; chessmapy=(canvash%chessmapgrid)/2+empty/2; else chessmaplength=canvasw-canvasw%chessmapgrid; chessmapx=(canvasw%chessmapgrid)/2+empty/2; chessmapy=(canvash-chessmaplength)/2+empty/2; chessgridlength=chessmaplength/chessmapgrid; chesslength=chessgridlength-1; selectedx=select

42、edy=chessmapgrid/2; isplayer1=true; restartcmd = new command(重新開始 , command.screen , 0); exitcmd = new command(退出, command.exit , 0); addcommand(restartcmd); addcommand(exitcmd); setcommandlistener(this); 對(duì)游戲的勝負(fù)進(jìn)行判斷, 每當(dāng)下一個(gè)棋子的時(shí)候, 會(huì)激活這個(gè)方法, 進(jìn)行判斷,在橫、縱、正對(duì)角線、反對(duì)角線上,如果有連續(xù)的同色的五棋子,則判斷出該色的玩家獲勝。privateboolean c

43、heckwin(int x,int y,int chessesvalue) int value = chessesvalue; int xx = x;/循環(huán)變量的值int yy = y;/循環(huán)變量的值- 13 - int tempx=x,tempy=y;/存儲(chǔ)當(dāng)前傳入的值,便于以后從這個(gè)點(diǎn)開始進(jìn)行判斷/* * 縱向判斷 */ xx=tempx; yy=tempy;/讓目前的值與傳入的值保持一致int count = 0;/用來計(jì)算當(dāng)前某一方的棋子是否夠五個(gè)while(yy=0 & chessesyyxx!=null & chessesyyxx.getchessesvalue()

44、=value) count+; yy-; if (yy0)break ; yy=tempy+1; while(yychessmapgrid)break ; if (count = 5) returntrue; /* * 橫向判斷 */ xx=tempx; yy=tempy;/讓目前的值與傳入的值保持一致count = 0;/用來計(jì)算當(dāng)前某一方的棋子是否夠五個(gè)while(xx=0 & chessesyyxx!=null & chessesyyxx.getchessesvalue()=value) - 14 - count+; xx-; if (xx0)break ; xx=tem

45、px+1; while(xxchessmapgrid)break ; if (count = 5) returntrue; /* * 反向?qū)蔷€ */ xx=tempx; yy=tempy;/讓目前的值與傳入的值保持一致count = 0;/用來計(jì)算當(dāng)前某一方的棋子是否夠五個(gè)while(xx=0 & yychessmapgrid & chessesyyxx!=null & chessesyyxx.getchessesvalue()=value) count+; xx-; yy+; if (xxchessmapgrid)break ; xx=tempx+1; yy=tem

46、py-1; while(yy=0 & xxchessmapgrid & chessesyyxx!=null & chessesyyxx.getchessesvalue()=value) count+; xx+; yy-; if (yychessmapgrid)break ; - 15 - if (count = 5) returntrue; /* * 正向?qū)蔷€ */ xx=tempx; yy=tempy;/讓目前的值與傳入的值保持一致count = 0;/用來計(jì)算當(dāng)前某一方的棋子是否夠五個(gè)while(xxchessmapgrid & yychessmapgri

47、d|yychessmapgrid)break ; xx=tempx-1; yy=tempy-1; while(yy=0 & xx=0 & chessesyyxx!=null & chessesyyxx.getchessesvalue()=value) count+; xx-; yy-; if (xx0|yy=0 & chessesyyxx!=null & chessesyyxx.getchessesvalue()=value) count+; yy-; if (yy0)break ; pointy1=yy; yy=tempy+1; while(yyche

48、ssmapgrid)break ; pointy2=yy; if (count = chessesnum& chessespointy1xx=null& - 17 - pointy1=0) temp0=xx; temp1=pointy1; return temp; elseif (count = chessesnum & chessespointy2xx=null & pointy2=0 & chessesyyxx!=null & chessesyyxx.getchessesvalue()=value) count+; xx-; if (xx0)

49、break ; pointx1=xx; xx=tempx+1; while(xxchessmapgrid)break ; pointx2=xx; if (count = chessesnum& chessesyypointx1=null& pointx1=0) temp0=pointx1; - 18 - temp1=yy; return temp; elseif (count = chessesnum & chessesyypointx2=null & pointx2=0 & yychessmapgrid & chessesyyxx!=null

50、& chessesyyxx.getchessesvalue()=value) count+; xx-; yy+; if (xxchessmapgrid)break ; pointx1 = xx; pointy1 = yy; xx=tempx+1; yy=tempy-1; while(yy=0 & xxchessmapgrid & chessesyyxx!=null & chessesyyxx.getchessesvalue()=value) count+; xx+; yy-; if (yychessmapgrid)break ; pointx2 = xx; po

51、inty2 = yy; if (count = chessesnum & chessespointy1pointx1=null & pointx1=0 & pointy1= chessesnum & chessespointy2pointx2=null& pointx2=0) temp0=pointx2; temp1=pointy2; return temp; /* * 正向?qū)蔷€ */ xx=tempx; yy=tempy;/讓目前的值與傳入的值保持一致count = 0;/用來計(jì)算當(dāng)前某一方的棋子是否夠五個(gè)while(xxchessmapgrid &

52、amp; yychessmapgrid|yychessmapgrid)break ; pointx1 = xx; pointy1 = yy; xx=tempx-1; yy=tempy-1; while(yy=0 & xx=0 & chessesyyxx!=null & chessesyyxx.getchessesvalue()=value) count+; xx-; yy-; if (xx0|yy= chessesnum & chessespointy1pointx1=null& pointx1=chessmapgrid & pointy1= c

53、hessesnum & chessespointy2pointx2=null& pointx2=0 & pointy2=0) temp0=pointx2; temp1=pointy2; return temp; temp0=88;/目前沒有威脅, 返回一個(gè)特殊的值, 讓別的方法隨機(jī)生成一個(gè)位置temp1=99; return temp; 另外,還有繪制游戲的主繪制方法paint()方法,繪制棋盤的paintmap() 方法,繪制棋子的paintchesses() 方法,繪制哪方可以下棋的paintselected()方法,繪制玩家的paintplayer()方法,觸發(fā)鍵

54、盤的keypressed() 方法,隨機(jī)產(chǎn)生棋子的 randomchesses()方法。由于篇幅的原因,此處不再累述,詳見源碼。4.3 雙人對(duì)戰(zhàn)版4.3.1 雙人對(duì)戰(zhàn)版的程序分析與具體實(shí)現(xiàn)和上一個(gè)版本一樣,進(jìn)入選擇菜單里,選擇雙人挑戰(zhàn)版,圖 6 雙人挑戰(zhàn)版- 21 - 同樣,雙人挑戰(zhàn)版也有三個(gè)級(jí)別,初級(jí)、中級(jí)、高級(jí)三個(gè)級(jí)別,由于時(shí)間的問題,只實(shí)現(xiàn)了初級(jí)版的,中級(jí)版和高級(jí)版留作以后擴(kuò)展開發(fā)。具體操作和單機(jī)挑戰(zhàn)版的操作類似,此處不再累述。進(jìn)入游戲開始對(duì)戰(zhàn)。此游戲是兩個(gè)人用一部手機(jī)進(jìn)行游戲,電腦不再下棋子,而是控制由哪一方來下棋。比如紅方在下的時(shí)候,白方就不能動(dòng)鍵盤。4.3.2 雙人對(duì)戰(zhàn)版的核心類及

55、邏輯實(shí)現(xiàn)雙人對(duì)戰(zhàn)版的核心類及邏輯實(shí)現(xiàn)基本上和單機(jī)挑戰(zhàn)版的實(shí)現(xiàn)差不多,我把有差異的地方羅列出來。 雙人對(duì)戰(zhàn)版的核心類是gobangcanvas 類,此版本游戲不再由電腦來控制一方玩家了,而是完全由人來玩,所以手機(jī)只要控制好玩家的游戲順序以及游戲的規(guī)則即可。紅方先下一個(gè)棋子的話,進(jìn)行判斷,在橫、縱、正對(duì)角線、反對(duì)角線上是否構(gòu)成了連續(xù)的五個(gè)紅棋子,如果構(gòu)成,則結(jié)束游戲,得出紅方勝利,否則繼續(xù)游戲,紅方下了后,游戲的權(quán)限交給白方。白方下一個(gè)棋子后,判斷如果在橫、縱、正對(duì)角線、反對(duì)角線上有連續(xù)的五個(gè)白色的棋子的話,同樣結(jié)束游戲,得出白方勝利。主要的程序如下:protectedsynchronizedvo

56、id keypressed(int keycode) if(!iswin) int action = getgameaction(keycode); if (action = canvas.left ) selectedx=(-selectedx+chessmapgrid+1)%(chessmapgrid+1); elseif (action = canvas.right) selectedx=(+selectedx)%(chessmapgrid+1); elseif (action = canvas.up) selectedy=(-selectedy+chessmapgrid+1)%(che

57、ssmapgrid+1); elseif (action = canvas.down ) selectedy=(+selectedy)%(chessmapgrid+1); elseif (action = canvas.fire ) if(chessesselectedyselectedx=null) chessesselectedyselectedx=newchesses(this.isplayer1); if (chessesselectedyselectedx.isplayer1) chessesselectedyselectedx.setchessesvalue(11); - 22 -

58、 elseif(!(chessesselectedyselectedx.isplayer1) chessesselectedyselectedx.setchessesvalue(10); iswin = checkwin(selectedx,selectedy,chessesselectedyselectedx.getchessesvalue(); this.isplayer1=!this.isplayer1;/切換下棋方 repaint(); 4.4 藍(lán)牙終極版4.4.1 雙人對(duì)戰(zhàn)版的程序分析與具體實(shí)現(xiàn)進(jìn)入游戲菜單,選擇藍(lán)牙終極版,然后出現(xiàn)如下界面,選擇正方,還是反方。因?yàn)樗{(lán)牙終極版是基于藍(lán)

59、牙協(xié)議,用兩部手機(jī),兩個(gè)人進(jìn)行游戲的版本。為了讓兩個(gè)玩家不沖突,所以必須要選擇一個(gè)正方和一個(gè)反方,也就是白方和紅方。圖 7 藍(lán)牙終極版選擇了正、反方后,游戲?qū)⑻崾灸闶欠翊蜷_藍(lán)牙,你選擇是即可。打開了藍(lán)牙后,就可以進(jìn)行游戲了。因?yàn)槟壳八{(lán)牙還不是官方的標(biāo)準(zhǔn),是不同廠商所提供的,所以又差異。雖說目前正規(guī)的手機(jī)廠商基本上統(tǒng)一了藍(lán)牙協(xié)議,本游戲是基于 uuid 開發(fā)的,但是不同廠商又在此協(xié)議上進(jìn)行自己的定義,所以使得這個(gè)版本的游戲不能像上面兩個(gè)版本一樣,只要能支持java 游戲的手機(jī)都可以玩。- 23 - 4.4.2 雙人對(duì)戰(zhàn)版的核心類及邏輯實(shí)現(xiàn)首先介紹 server類和 client 類,其實(shí)藍(lán)牙編程

60、類似于scoket編程,先是服務(wù)器端啟動(dòng),監(jiān)聽來自客戶端的信息,如果監(jiān)聽到客戶端的連接請(qǐng)求的話,則進(jìn)行連接,客戶端啟動(dòng)后,向服務(wù)端發(fā)送連接請(qǐng)求,如果被服務(wù)器端監(jiān)聽到了后,配合服務(wù)器連接。主要代碼如下:string connectionurl = btspp:/localhost:f0e0d0c0b0a000908070605040302010; + authenticate=false;encrypt=false;name=rfcomm server; local = localdevice.getlocaldevice(); local.setdiscoverable(discoveryagent.giac); notifier = (streamconnectionnotifier)connector.open (connectionurl); 這是服務(wù)器端的關(guān)鍵程序,啟動(dòng)服務(wù)器后服務(wù)器端的標(biāo)示地址。privatestaticfinal uuid echo_server_uuid = new uuid( f0e0d0c0b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論