




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上學(xué) 號: 課 程 設(shè) 計題 目基于Andriod環(huán)境的五子棋游戲設(shè)計學(xué) 院計算機科學(xué)與技術(shù)學(xué)院專 業(yè)計算機科學(xué)與技術(shù)班 級姓 名指導(dǎo)教師2012年9月02日計算機能力擴展訓(xùn)練任務(wù)書學(xué)生姓名: 專業(yè)班級: 指導(dǎo)教師: 工作單位: 計算機科學(xué)與技術(shù)學(xué)院 題 目: 初始條件:理論:.NET、Java、Linux、Android或Windows Phone環(huán)境, Oracle、SQLite、SQL Server、SQL Server CE或MySQL數(shù)據(jù)庫, C#、Eclipse、C+或其它合適、有效的開發(fā)工具,等等。實踐:計算機科學(xué)系實驗中心提供計算機及軟件開發(fā)環(huán)境。要求完
2、成的主要任務(wù): (1)系統(tǒng)需求分析:使用軟件工程所學(xué)的知識對擬開發(fā)的系統(tǒng)進行數(shù)據(jù)需求和功能需求分析,確定開發(fā)環(huán)境和工具軟件。 (2)系統(tǒng)設(shè)計:根據(jù)系統(tǒng)需求分析進行概要設(shè)計和詳細設(shè)計,在確定好的開發(fā)環(huán)境中利用確定的工具軟件進行系統(tǒng)實現(xiàn)。(3)編制好程序后,設(shè)計若干測試用例,上機測試所設(shè)計的原型系統(tǒng)。(4)設(shè)計報告按格式要求書寫。設(shè)計報告正文的內(nèi)容應(yīng)包括:1)系統(tǒng)描述 包括問題說明、數(shù)據(jù)需求和功能需求。2)系統(tǒng)設(shè)計 包括總體設(shè)計、數(shù)據(jù)庫表結(jié)構(gòu)、輸入/輸出設(shè)計、用戶界面設(shè)計、處理過程設(shè)計。3)系統(tǒng)測試 包括測試用例的描述、測試方法和測試結(jié)果。4)設(shè)計的特點、不足、收獲和體會。時間安排:1、暑期完成。
3、2、下學(xué)期開學(xué)第一周到計算機學(xué)院實驗中心(三樓)檢查程序、交課程設(shè)計報告、源程序(CD盤)。指導(dǎo)教師簽名: 年 月 日系主任(或責(zé)任教師)簽名: 年 月 日基于Andriod環(huán)境的五子棋游戲設(shè)計1 系統(tǒng)描述在手機屏幕上設(shè)計一個五子棋游戲,屏幕有棋盤,可人與人對奕五子棋游戲通過黑白雙方在固定大小的方格棋盤上進行交替落子,直到有一方在落下一棋子后在該棋子的周圍形成垂直方向、水平方向、左上到右下方向或左下到右上方向形成有大于等于5個同樣顏色棋子的一條直線,則執(zhí)該顏色棋子的玩家贏得該棋局。在我所設(shè)計的游戲中,主要的功能為:人與人對弈。2 相關(guān)知識本游戲采用當前很熱的Android系統(tǒng), 以Java語言
4、為基礎(chǔ)的2D手機游戲。用戶游戲界面通過手機終端來實現(xiàn),較強的人際交互。這樣就大大簡化了用戶的操作,該游戲為免費游戲,用戶可以放心使用。此外,本系統(tǒng)采用了SharedPreferences作為應(yīng)用程序的數(shù)據(jù)存儲,用來存儲簡單的配置信息,簡單快捷,占用系統(tǒng)資源少。背景音樂采用媒體播放功能實現(xiàn),控制也比較方便。2.1 開發(fā)工具簡介本系統(tǒng)的開發(fā)環(huán)境是JDK1.6+MyEclipse8.5+Android SDK,使用的語言是Java語言。JDK(Java Development Kit)是Sun Microsystems公司為Java開發(fā)人員設(shè)計的產(chǎn)品。從Java誕生以來,JDK已經(jīng)成為使用最廣泛Ja
5、va SDK。JDK是整個Java的核心內(nèi)容,包括了Java運行環(huán)境,Java工具和Java基礎(chǔ)的類庫三部分。從Sun的JDK1.5開始,提供了一些非常實用的功能,其版本也不斷更新,運行效率得到了非常大的提高。MyEclipse企業(yè)級工作平臺(MyEclipse Enterprise Workbench ,簡稱MyEclipse)是對Eclipse IDE的擴展,應(yīng)用程序服務(wù)器的整合方面極大的提高工作效率。它是功能豐富的Java集成開發(fā)環(huán)境,包括了完備的編碼、調(diào)試、測試和發(fā)布功能,完整支持HTML, Struts,Spring, CSS, Javascript, SQL, Hibernate。
6、Android SDK是軟件開發(fā)工具包(software development kit)。被軟件開發(fā)工程師用于為特定的軟件包、軟件框架、硬件平臺、操作系統(tǒng)等建立應(yīng)用軟件工具的集合。因此Android SDK是Android專屬的開發(fā)工具包。其授權(quán)協(xié)議為Apache,開發(fā)語言為Java、需要Android操作系統(tǒng)的支持2.2 數(shù)據(jù)存儲方式SharedPreferences存儲方式,它是Android提供的用來存儲一些簡單配置信息的一種機制,例如:登錄用戶名和密碼。其采用了Map數(shù)據(jù)結(jié)構(gòu)來存儲數(shù)據(jù),以鍵值的方式存儲,可以簡單的讀取與寫入。最高紀錄則用此存儲方式進行存儲。SQlite存儲方式,它是
7、Android平臺上集成的一個嵌入式關(guān)系型數(shù)據(jù)庫。SQLite3支持 NULL、INTEGER、REAL(浮點數(shù)字)、TEXT(字符串文本)和BLOB(二進制對象)數(shù)據(jù)類型,雖然它支持的類型雖然只有五種,但實際上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等數(shù)據(jù)類型,只不過在運算或保存時會轉(zhuǎn)成對應(yīng)的五種數(shù)據(jù)類型。 SQLite最大的特點是你可以保存任何類型的數(shù)據(jù)到任何字段中,無論這列聲明的數(shù)據(jù)類型是什么。例如:可以在Integer字段中存放字符串,或者在布爾型字段中存放浮點數(shù),或者在字符型字段中存放日期型值。 但有一種情況例外:定義為INTEGER PR
8、IMARY KEY的字段只能存儲64位整數(shù), 當向這種字段中保存除整數(shù)以外的數(shù)據(jù)時,將會產(chǎn)生錯誤。另外, SQLite 在解析CREATE TABLE 語句時,會忽略 CREATE TABLE 語句中跟在字段名后面的數(shù)據(jù)類型信息。2.3 系統(tǒng)運行配置操作系統(tǒng):Android 2.1以上。開發(fā)包:JDK 1.6、Android SDK。數(shù)據(jù)存儲:SharedPreferences、SQlite。3 系統(tǒng)設(shè)計3.1程序的算法研究本游戲是以五子棋為背景的游戲,游戲的畫面按照9*9的畫面進行匯總,內(nèi)容的算法則是根據(jù)JAVA的基本循環(huán)語句進行定義,棋盤的繪制尤為重要,它是整個游戲的關(guān)鍵,因為它是整個游戲
9、的主界面,利用surface可得到9*9的游戲棋盤坐標畫面。 在游戲中,落子定義也十分重要,因為五子棋游戲中,只要黑白任意一方在任何方向以5個連續(xù)落子連成一線,便獲得了勝利。算法便是在坐標定義上進行+的方式。3.1.1棋盤布局的數(shù)據(jù)結(jié)構(gòu)首先要先獲得整個棋盤的高度,以及其他一些寬度的參數(shù),因為利用的是surface的重繪,所以對此類棋盤高度寬度進行定義,部分代碼如下:public void setGameState(int newState) mGameState = newState;switch (mGameState) case GS_GAME: mGameMap = new intCHE
10、SS_HEIGHTCHESS_WIDTH; mMapHeightLengh = mGameMap.length; mMapWidthLengh = mGameMap0.length; mCampTurn = CAMP_HERO; break; 關(guān)于盤面情況的表示,首先得到屏幕的大小,然后根據(jù)所畫棋子的大小來確定下一條棋盤的畫線。 整個棋盤是利用superface進行重繪,superface是安卓系統(tǒng)繪制列陣最普通的一種在android中,對view及其子類,都是畫在surface上的。每個window對應(yīng)一個surface,各surface對象通過surfaceflinger合成到frameb
11、uffer,每個surface都是雙緩沖,它有一個back buffer和一個front buffer。back buffer就是畫畫的地方,front buffer是用來合成。surface創(chuàng)建Canvas對象(用來管理surface繪圖操作),Canvas對應(yīng)bitmap(存儲surface內(nèi)容)。當調(diào)用unlockCanvas()后,back buffer開始變?yōu)榭捎?,就開始顯示了。有一套機制實現(xiàn)back buffer和front buffer的互換,當要更新時,back buffer與front buffer互換,back buffer變成front buffer。代碼如下:for (
12、i = 0; i < mMapHeightLengh; i+) for (j = 0; j < mMapWidthLengh; j+) int CampID = mGameMapij;float x = (j * mTitleSpace) + mTitleIndex_x;float y = (i * mTitleSpace) + mTitleHeight + mTitleIndex_y;if (CampID = CAMP_HERO) DrawImage(mBlack, x, y, ALIGN_VCENTER | ALIGN_HCENTER); else if (CampID = C
13、AMP_ENEMY) DrawImage(mWhite, x, y, ALIGN_VCENTER | ALIGN_HCENTER);setGameState(GS_GAME);根據(jù)res中棋盤圖像的坐標,進行定義。Res中存放的是調(diào)用定義的圖片,將main中繪制好的大類在res中進行整合。如圖為最后的開機之后的圖片3.1.2行棋坐標判定實際上,是根據(jù)當前最后一個落子的情況來判斷勝負的。實際上需要從四個位置判斷,以該子為出發(fā)點的水平,分別是豎直和水平以及傾斜型。在獲得橫軸和數(shù)軸坐標時,該子落下,即可獲得該子落下的坐標。因為五子棋有橫豎左右,斜邊等全方位的落子方式,所以在定義的時候就要進行多方位的
14、考慮,以保持五子棋的規(guī)則不被破壞。對于各個方向的算法都要對整個棋盤有一個清晰的定義。/ 橫向for (int i = 0; i < CALU_ALL_COUNT; i+) int index = mMapIndexX - CALU_SINGLE_COUNT + i; if (index < 0 | index >= mMapWidthLengh) if (MeetCount = CALU_SINGLE_COUNT) return true;MeetCount = 0;continue; if (mGameMapmMapIndexYindex = Camp) MeetCount
15、+;if (MeetCount = CALU_SINGLE_COUNT) return true; else MeetCount = 0; / 縱向MeetCount = 0;for (int i = 0; i < CALU_ALL_COUNT; i+) int index = mMapIndexY - CALU_SINGLE_COUNT + i; if (index < 0 | index >= mMapHeightLengh) if (MeetCount = CALU_SINGLE_COUNT) return true;MeetCount = 0;continue; if
16、 (mGameMapindexmMapIndexX = Camp) MeetCount+;if (MeetCount = CALU_SINGLE_COUNT) return true; else MeetCount = 0; 如上述語句為橫向落子的算法。橫向的落子算法,根據(jù)棋盤進行坐標的定位。游戲的策劃是游戲開發(fā)過和中的最重要的一個開發(fā)環(huán)節(jié),只有寫好了游戲策劃才能繼續(xù)游戲開發(fā),游戲策劃是游戲開發(fā)的一個流程,把策劃寫好了就可以近照策劃一步步進行開發(fā),可見策劃的重要性。3.1.3勝負判定游戲中,游戲的結(jié)束意味著勝負的出現(xiàn),在棋類對戰(zhàn)中最終的勝負就是黑方或者白方的勝利。所以對于此類定義十分重要。 五
17、子棋的規(guī)則就是任意方向上能夠連續(xù)連成5個,便獲得勝利,以此根據(jù)這個規(guī)則對勝負判定進行匯總和定義。部分代碼如下:if (x > 0 && y > mTitleHeight) mMapIndexX = (int) (x / mTitleSpace);mMapIndexY = (int) (y - mTitleHeight) / mTitleSpace);if (mMapIndexX > mMapWidthLengh) mMapIndexX = mMapWidthLengh;if (mMapIndexX < 0) mMapIndexX = 0;if (mMap
18、IndexY > mMapHeightLengh) mMapIndexY = mMapHeightLengh;if (mMapIndexY < 0) mMapIndexY = 0;if (mGameMapmMapIndexYmMapIndexX = CAMP_DEFAULT) 3.2流程設(shè)計游戲的設(shè)計是一個很簡單的2D人人對戰(zhàn)五子棋,它的游戲運行方式一目了然,由于簡單的設(shè)計和實現(xiàn),可以很清晰很直觀地看到整個運行的過程。當設(shè)計這個游戲時,首先要用一個很好的游戲界面,進入游戲界面,可直接進行人人對戰(zhàn)。如圖直接進入游戲進行人人對戰(zhàn)判定勝負進入獲勝界面并按任意鍵重新開始游戲、 3.3游戲的
19、實現(xiàn)運行程序進入開機動畫界面,也就是游戲歡迎頁面 然后就直接進入了游戲畫面,便讓人知道這是一個五子棋游戲 ,挑戰(zhàn)自己,集中你的智慧,來享受博弈的樂趣,會勾起人們想下棋的欲望,被五子棋游戲吸引,而且在火車上休閑時可以與別人進行博弈,特別能切磋兩人之間的棋藝,。可以讓人在任何時間任何地點都可以下棋放松、休閑。而且簡單的人人呢對戰(zhàn)可以讓自己在任何時候也可以自己與自己博弈,自我研究行棋套路,這也是這個游戲產(chǎn)生的初衷。整個界面的設(shè)計師根據(jù)傳統(tǒng)9*9棋盤模式進行的重繪,利用第五章中的superface重繪可得到9*9棋盤模式。具體的游戲?qū)崿F(xiàn)如圖游戲主界面 這時直接進入游戲,游戲界面 GameView該類是
20、整個程序最主要的類,是主游戲的界面該界面繼承自SurfaceView并實現(xiàn)了SurfaceHolder.Callback接口 然后就就可以開始對弈了,黑白雙方都是玩家,用鼠標點擊方式進下棋,然后考慮下一步對方如何進行走位。然后可以直接根據(jù)對手的走位選擇自己合適的走法來擊敗對手 有任意顏色的棋子勝利時即游戲結(jié)束,它會有一個操作提示:“白(黑)方勝利 點擊繼續(xù)游戲?!碑斘覀儼聪氯我怄I時就會繼續(xù)進行游戲。當游戲結(jié)束是又會一個相同的提示。然后又是一個操作提示重新進行新的游戲的開始。如圖6-3。在程序的設(shè)計用利用代碼的實現(xiàn)可以得到上述畫面,部分代碼如下:case GS_GAME: DrawRect(Co
21、lor.WHITE, 0, 0, mScreenWidth, mScreenHeight); RenderMap(); break; case GS_END: DrawRect(Color.RED, 0, 0, mScreenWidth, mScreenHeight); DrawString(Color.WHITE, sResources.getString(mCampWinner) + "勝利 點擊繼續(xù)游戲", 50, 50); break;當黑方或者白方勝利時,游戲就會自動跳至如上,這時游戲已經(jīng)結(jié)束。 3 系統(tǒng)測試在調(diào)試的程序中我遇到了各種各樣的問題,其中最典型的問題有
22、:(1) 背景圖片與SurfaceView畫圖問題。(2) 像素坐標到棋盤矩陣數(shù)組的轉(zhuǎn)換問題。(3) 線程終止與同步問題。在程序設(shè)計時,我本來的思路是為SurfaceView設(shè)置背景圖片,這樣在下棋操作中只需要對棋子進行繪制而不必重新繪制背景圖片,但是這樣做并不能達到效果,在程序運行中,背景圖片會一直顯示在屏幕上,但繪制的棋子確并不能夠顯示出來。而在其他線程又是不能更改主線程的界面的數(shù)據(jù)的,所以只能在其他線程中對背景圖片進行重繪。在繪制背景圖片的過程中,如果不對圖片進行縮放繪制,即指定圖片原始大小和繪制后的大小,那么就會導(dǎo)致背景圖片在大于圖片尺寸的屏幕上圖片不能充滿整個屏幕的問題。像素坐標到二
23、維數(shù)組的轉(zhuǎn)換是另外一個問題,在轉(zhuǎn)換的過程中很可能對坐標系的x/y與數(shù)組中的行和列相混淆。坐標系中的x對應(yīng)著二維數(shù)組的列,坐標系中的y對應(yīng)著二維數(shù)組的行。由于這個應(yīng)用程序的棋盤是一個方形的棋盤(行和列相等),因此這個錯誤并不會明顯對程序的運行造成結(jié)果,但如果該應(yīng)用程序棋盤不是方形的,那么程序運行就會出現(xiàn)錯誤。在一盤棋結(jié)束后,應(yīng)用程序會讓用戶選擇將要采取的動作,是再玩兒一次還是退出應(yīng)用程序。在退出應(yīng)用程序之前,必須要停止繪圖的線程。而通過Thread類的interupte方法是不能夠停止線程的運行的,因此在程序中,我使用了一個棋局狀態(tài)標志,繪圖線程每次重繪之前都判斷當前棋局是否結(jié)束,如果棋局已經(jīng)結(jié)
24、束,就不會進入繪圖循環(huán),從而跳出run()方法,結(jié)束線程的運行。在線程同步方面,還有一個問題,如果下棋子太快,在已經(jīng)有5個棋子連成一條線(即游戲處理結(jié)束狀態(tài))時,繼續(xù)下棋子,還會有一個棋子顯示在棋盤上,然后才會給出該棋局結(jié)束的提示。這是由于棋子落下后,判斷輸贏狀態(tài)耗費時間較長所導(dǎo)致的。對于用戶的每一次落子,都會判斷該棋子的落下對棋局的影響。如果該判斷還未結(jié)束,而用戶又下了另一個棋子,則該棋子就會改變棋盤上棋子的覆蓋狀態(tài)。而繪圖線程對棋盤的繪制是很快的,如果棋局已經(jīng)結(jié)束而消息并為及時發(fā)送到繪圖線程并且用戶的下一次點擊操作又已經(jīng)改變了棋盤的狀態(tài),那么就會出現(xiàn)多繪一個棋子,甚至幾個棋子的情況。這種情況我現(xiàn)在還未找到適合的解決方法4心得體會這次課程設(shè)計讓我學(xué)到了很多安卓的知識。本學(xué)期的知識應(yīng)用到了很多,讓我的安卓知識從理論和實際上得到了更好的結(jié)合。原來在書本上并不熟悉的知識,得到了非常好的鍛煉。我從一些簡單的方面入手,例如本次我的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 超疏水表面的耐久性研究進展及其應(yīng)用領(lǐng)域探討
- 農(nóng)業(yè)面源污染控制-第5篇-洞察及研究
- 機房參觀管理辦法細則
- 農(nóng)戶生計決策管理辦法
- 工業(yè)自動化系統(tǒng)設(shè)計優(yōu)化研究
- 華為應(yīng)用限制管理辦法
- 協(xié)會業(yè)余球員管理辦法
- 生產(chǎn)經(jīng)營單位安全主體責(zé)任規(guī)定
- 導(dǎo)電水凝膠對神經(jīng)肌肉組織修復(fù)的研究進展
- 內(nèi)部職務(wù)異動管理辦法
- 東北大學(xué)分析化學(xué)期末試卷
- 老年健康照護課件
- 2024屆河北省唐山市玉田縣物理高一第二學(xué)期期末質(zhì)量檢測試題含解析
- 第三方醫(yī)療消毒供應(yīng)中心項目可行性研究報告
- 貨架安裝施工方案
- 異口同音公開課
- 專利代理人資格考試實務(wù)試題及參考答案
- 運用信息技術(shù)助力勞動教育創(chuàng)新發(fā)展 論文
- GB/T 602-2002化學(xué)試劑雜質(zhì)測定用標準溶液的制備
- GB/T 4074.8-2009繞組線試驗方法第8部分:測定漆包繞組線溫度指數(shù)的試驗方法快速法
- 2023年涉縣水庫投資管理運營有限公司招聘筆試模擬試題及答案解析
評論
0/150
提交評論