基于android的五子棋設計(武漢理工大學能力拓展訓練)_第1頁
基于android的五子棋設計(武漢理工大學能力拓展訓練)_第2頁
基于android的五子棋設計(武漢理工大學能力拓展訓練)_第3頁
基于android的五子棋設計(武漢理工大學能力拓展訓練)_第4頁
基于android的五子棋設計(武漢理工大學能力拓展訓練)_第5頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上學 號: 課 程 設 計題 目基于Andriod環境的五子棋游戲設計學 院計算機科學與技術學院專 業計算機科學與技術班 級姓 名指導教師2012年9月02日計算機能力擴展訓練任務書學生姓名: 專業班級: 指導教師: 工作單位: 計算機科學與技術學院 題 目: 初始條件:理論:.NET、Java、Linux、Android或Windows Phone環境, Oracle、SQLite、SQL Server、SQL Server CE或MySQL數據庫, C#、Eclipse、C+或其它合適、有效的開發工具,等等。實踐:計算機科學系實驗中心提供計算機及軟件開發環境。要求完

2、成的主要任務: (1)系統需求分析:使用軟件工程所學的知識對擬開發的系統進行數據需求和功能需求分析,確定開發環境和工具軟件。 (2)系統設計:根據系統需求分析進行概要設計和詳細設計,在確定好的開發環境中利用確定的工具軟件進行系統實現。(3)編制好程序后,設計若干測試用例,上機測試所設計的原型系統。(4)設計報告按格式要求書寫。設計報告正文的內容應包括:1)系統描述 包括問題說明、數據需求和功能需求。2)系統設計 包括總體設計、數據庫表結構、輸入/輸出設計、用戶界面設計、處理過程設計。3)系統測試 包括測試用例的描述、測試方法和測試結果。4)設計的特點、不足、收獲和體會。時間安排:1、暑期完成。

3、2、下學期開學第一周到計算機學院實驗中心(三樓)檢查程序、交課程設計報告、源程序(CD盤)。指導教師簽名: 年 月 日系主任(或責任教師)簽名: 年 月 日基于Andriod環境的五子棋游戲設計1 系統描述在手機屏幕上設計一個五子棋游戲,屏幕有棋盤,可人與人對奕五子棋游戲通過黑白雙方在固定大小的方格棋盤上進行交替落子,直到有一方在落下一棋子后在該棋子的周圍形成垂直方向、水平方向、左上到右下方向或左下到右上方向形成有大于等于5個同樣顏色棋子的一條直線,則執該顏色棋子的玩家贏得該棋局。在我所設計的游戲中,主要的功能為:人與人對弈。2 相關知識本游戲采用當前很熱的Android系統, 以Java語言

4、為基礎的2D手機游戲。用戶游戲界面通過手機終端來實現,較強的人際交互。這樣就大大簡化了用戶的操作,該游戲為免費游戲,用戶可以放心使用。此外,本系統采用了SharedPreferences作為應用程序的數據存儲,用來存儲簡單的配置信息,簡單快捷,占用系統資源少。背景音樂采用媒體播放功能實現,控制也比較方便。2.1 開發工具簡介本系統的開發環境是JDK1.6+MyEclipse8.5+Android SDK,使用的語言是Java語言。JDK(Java Development Kit)是Sun Microsystems公司為Java開發人員設計的產品。從Java誕生以來,JDK已經成為使用最廣泛Ja

5、va SDK。JDK是整個Java的核心內容,包括了Java運行環境,Java工具和Java基礎的類庫三部分。從Sun的JDK1.5開始,提供了一些非常實用的功能,其版本也不斷更新,運行效率得到了非常大的提高。MyEclipse企業級工作平臺(MyEclipse Enterprise Workbench ,簡稱MyEclipse)是對Eclipse IDE的擴展,應用程序服務器的整合方面極大的提高工作效率。它是功能豐富的Java集成開發環境,包括了完備的編碼、調試、測試和發布功能,完整支持HTML, Struts,Spring, CSS, Javascript, SQL, Hibernate。

6、Android SDK是軟件開發工具包(software development kit)。被軟件開發工程師用于為特定的軟件包、軟件框架、硬件平臺、操作系統等建立應用軟件工具的集合。因此Android SDK是Android專屬的開發工具包。其授權協議為Apache,開發語言為Java、需要Android操作系統的支持2.2 數據存儲方式SharedPreferences存儲方式,它是Android提供的用來存儲一些簡單配置信息的一種機制,例如:登錄用戶名和密碼。其采用了Map數據結構來存儲數據,以鍵值的方式存儲,可以簡單的讀取與寫入。最高紀錄則用此存儲方式進行存儲。SQlite存儲方式,它是

7、Android平臺上集成的一個嵌入式關系型數據庫。SQLite3支持 NULL、INTEGER、REAL(浮點數字)、TEXT(字符串文本)和BLOB(二進制對象)數據類型,雖然它支持的類型雖然只有五種,但實際上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等數據類型,只不過在運算或保存時會轉成對應的五種數據類型。 SQLite最大的特點是你可以保存任何類型的數據到任何字段中,無論這列聲明的數據類型是什么。例如:可以在Integer字段中存放字符串,或者在布爾型字段中存放浮點數,或者在字符型字段中存放日期型值。 但有一種情況例外:定義為INTEGER PR

8、IMARY KEY的字段只能存儲64位整數, 當向這種字段中保存除整數以外的數據時,將會產生錯誤。另外, SQLite 在解析CREATE TABLE 語句時,會忽略 CREATE TABLE 語句中跟在字段名后面的數據類型信息。2.3 系統運行配置操作系統:Android 2.1以上。開發包:JDK 1.6、Android SDK。數據存儲:SharedPreferences、SQlite。3 系統設計3.1程序的算法研究本游戲是以五子棋為背景的游戲,游戲的畫面按照9*9的畫面進行匯總,內容的算法則是根據JAVA的基本循環語句進行定義,棋盤的繪制尤為重要,它是整個游戲的關鍵,因為它是整個游戲

9、的主界面,利用surface可得到9*9的游戲棋盤坐標畫面。 在游戲中,落子定義也十分重要,因為五子棋游戲中,只要黑白任意一方在任何方向以5個連續落子連成一線,便獲得了勝利。算法便是在坐標定義上進行+的方式。3.1.1棋盤布局的數據結構首先要先獲得整個棋盤的高度,以及其他一些寬度的參數,因為利用的是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; 關于盤面情況的表示,首先得到屏幕的大小,然后根據所畫棋子的大小來確定下一條棋盤的畫線。 整個棋盤是利用superface進行重繪,superface是安卓系統繪制列陣最普通的一種在android中,對view及其子類,都是畫在surface上的。每個window對應一個surface,各surface對象通過surfaceflinger合成到frameb

11、uffer,每個surface都是雙緩沖,它有一個back buffer和一個front buffer。back buffer就是畫畫的地方,front buffer是用來合成。surface創建Canvas對象(用來管理surface繪圖操作),Canvas對應bitmap(存儲surface內容)。當調用unlockCanvas()后,back buffer開始變為可用,就開始顯示了。有一套機制實現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);根據res中棋盤圖像的坐標,進行定義。Res中存放的是調用定義的圖片,將main中繪制好的大類在res中進行整合。如圖為最后的開機之后的圖片3.1.2行棋坐標判定實際上,是根據當前最后一個落子的情況來判斷勝負的。實際上需要從四個位置判斷,以該子為出發點的水平,分別是豎直和水平以及傾斜型。在獲得橫軸和數軸坐標時,該子落下,即可獲得該子落下的坐標。因為五子棋有橫豎左右,斜邊等全方位的落子方式,所以在定義的時候就要進行多方位的

14、考慮,以保持五子棋的規則不被破壞。對于各個方向的算法都要對整個棋盤有一個清晰的定義。/ 橫向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; 如上述語句為橫向落子的算法。橫向的落子算法,根據棋盤進行坐標的定位。游戲的策劃是游戲開發過和中的最重要的一個開發環節,只有寫好了游戲策劃才能繼續游戲開發,游戲策劃是游戲開發的一個流程,把策劃寫好了就可以近照策劃一步步進行開發,可見策劃的重要性。3.1.3勝負判定游戲中,游戲的結束意味著勝負的出現,在棋類對戰中最終的勝負就是黑方或者白方的勝利。所以對于此類定義十分重要。 五

17、子棋的規則就是任意方向上能夠連續連成5個,便獲得勝利,以此根據這個規則對勝負判定進行匯總和定義。部分代碼如下: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流程設計游戲的設計是一個很簡單的2D人人對戰五子棋,它的游戲運行方式一目了然,由于簡單的設計和實現,可以很清晰很直觀地看到整個運行的過程。當設計這個游戲時,首先要用一個很好的游戲界面,進入游戲界面,可直接進行人人對戰。如圖直接進入游戲進行人人對戰判定勝負進入獲勝界面并按任意鍵重新開始游戲、 3.3游戲的

19、實現運行程序進入開機動畫界面,也就是游戲歡迎頁面 然后就直接進入了游戲畫面,便讓人知道這是一個五子棋游戲 ,挑戰自己,集中你的智慧,來享受博弈的樂趣,會勾起人們想下棋的欲望,被五子棋游戲吸引,而且在火車上休閑時可以與別人進行博弈,特別能切磋兩人之間的棋藝,。可以讓人在任何時間任何地點都可以下棋放松、休閑。而且簡單的人人呢對戰可以讓自己在任何時候也可以自己與自己博弈,自我研究行棋套路,這也是這個游戲產生的初衷。整個界面的設計師根據傳統9*9棋盤模式進行的重繪,利用第五章中的superface重繪可得到9*9棋盤模式。具體的游戲實現如圖游戲主界面 這時直接進入游戲,游戲界面 GameView該類是

20、整個程序最主要的類,是主游戲的界面該界面繼承自SurfaceView并實現了SurfaceHolder.Callback接口 然后就就可以開始對弈了,黑白雙方都是玩家,用鼠標點擊方式進下棋,然后考慮下一步對方如何進行走位。然后可以直接根據對手的走位選擇自己合適的走法來擊敗對手 有任意顏色的棋子勝利時即游戲結束,它會有一個操作提示:“白(黑)方勝利 點擊繼續游戲。”當我們按下任意鍵時就會繼續進行游戲。當游戲結束是又會一個相同的提示。然后又是一個操作提示重新進行新的游戲的開始。如圖6-3。在程序的設計用利用代碼的實現可以得到上述畫面,部分代碼如下: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) + "勝利 點擊繼續游戲", 50, 50); break;當黑方或者白方勝利時,游戲就會自動跳至如上,這時游戲已經結束。 3 系統測試在調試的程序中我遇到了各種各樣的問題,其中最典型的問題有

22、:(1) 背景圖片與SurfaceView畫圖問題。(2) 像素坐標到棋盤矩陣數組的轉換問題。(3) 線程終止與同步問題。在程序設計時,我本來的思路是為SurfaceView設置背景圖片,這樣在下棋操作中只需要對棋子進行繪制而不必重新繪制背景圖片,但是這樣做并不能達到效果,在程序運行中,背景圖片會一直顯示在屏幕上,但繪制的棋子確并不能夠顯示出來。而在其他線程又是不能更改主線程的界面的數據的,所以只能在其他線程中對背景圖片進行重繪。在繪制背景圖片的過程中,如果不對圖片進行縮放繪制,即指定圖片原始大小和繪制后的大小,那么就會導致背景圖片在大于圖片尺寸的屏幕上圖片不能充滿整個屏幕的問題。像素坐標到二

23、維數組的轉換是另外一個問題,在轉換的過程中很可能對坐標系的x/y與數組中的行和列相混淆。坐標系中的x對應著二維數組的列,坐標系中的y對應著二維數組的行。由于這個應用程序的棋盤是一個方形的棋盤(行和列相等),因此這個錯誤并不會明顯對程序的運行造成結果,但如果該應用程序棋盤不是方形的,那么程序運行就會出現錯誤。在一盤棋結束后,應用程序會讓用戶選擇將要采取的動作,是再玩兒一次還是退出應用程序。在退出應用程序之前,必須要停止繪圖的線程。而通過Thread類的interupte方法是不能夠停止線程的運行的,因此在程序中,我使用了一個棋局狀態標志,繪圖線程每次重繪之前都判斷當前棋局是否結束,如果棋局已經結

24、束,就不會進入繪圖循環,從而跳出run()方法,結束線程的運行。在線程同步方面,還有一個問題,如果下棋子太快,在已經有5個棋子連成一條線(即游戲處理結束狀態)時,繼續下棋子,還會有一個棋子顯示在棋盤上,然后才會給出該棋局結束的提示。這是由于棋子落下后,判斷輸贏狀態耗費時間較長所導致的。對于用戶的每一次落子,都會判斷該棋子的落下對棋局的影響。如果該判斷還未結束,而用戶又下了另一個棋子,則該棋子就會改變棋盤上棋子的覆蓋狀態。而繪圖線程對棋盤的繪制是很快的,如果棋局已經結束而消息并為及時發送到繪圖線程并且用戶的下一次點擊操作又已經改變了棋盤的狀態,那么就會出現多繪一個棋子,甚至幾個棋子的情況。這種情況我現在還未找到適合的解決方法4心得體會這次課程設計讓我學到了很多安卓的知識。本學期的知識應用到了很多,讓我的安卓知識從理論和實際上得到了更好的結合。原來在書本上并不熟悉的知識,得到了非常好的鍛煉。我從一些簡單的方面入手,例如本次我的

溫馨提示

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

評論

0/150

提交評論