




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、韶關(guān)學(xué)院計算機(jī)科學(xué)學(xué)院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計題 目:四子棋學(xué)生姓名:劉曉鋒學(xué) 號:11115011038專業(yè):計算機(jī)科學(xué)與技術(shù)班 級:11級(1)班指導(dǎo)教師姓名及職稱:陳正銘 講師起止時間:2013年月一一 2013年_5-月1需求分析1.1課題背景及意義全球在使用的移動電話已經(jīng)超過10億部,而且這個數(shù)字每天都在不斷增加。 手機(jī)在作為一種便攜通信工具的同時, 它的功能也在不斷的豐富,進(jìn)而推進(jìn)手機(jī) 游戲的發(fā)展。根據(jù)2012手機(jī)游戲用戶行為分析報告,隨著智能手機(jī)的普及和 手機(jī)性能的提高,手機(jī)上的終端應(yīng)用越來越豐富,作為手機(jī)上的重要的娛樂應(yīng)用, 手機(jī)游戲市場也在快速成長,越來越多的用戶通過手機(jī)游戲來打發(fā)無
2、聊的時間, 其中76%勺用戶單次玩手機(jī)游戲都在 30分鐘左右。結(jié)合個人水平和興趣愛好,本人將借本次課程設(shè)計機(jī)會設(shè)計一款休閑娛樂型 的四子棋游戲,在娛樂自我,鍛煉編程設(shè)計能力的同時,希望也借此給身邊的朋 友們帶來快樂。1.2課題要求A. 支持an droid手機(jī)的四子棋游戲B. 設(shè)計一個7*6棋盤大小的四子棋雙人對戰(zhàn)游戲程序,先四子連線(橫、縱、斜)者勝。C. 選做內(nèi)容:支持棋局錄制與重放-悔棋和新開功能,圖形化操作界面1.3軟件格式規(guī)定A. 程序所能達(dá)到的功能:正確判斷輸贏并有相應(yīng)的語音和文字提示B. 測試的數(shù)據(jù):1)、正確的輸入:提示:藍(lán)棋贏,并將藍(lán)棋變?yōu)榱硗庖环N顏色-天藍(lán)和響起贏局的音樂2
3、)、用戶誤輸入:提示:親,我的悔棋能力有限??!1.4設(shè)計目標(biāo)A. 軟件名稱:Four In A Line (四子棋)B. 軟件組成:Fourl nAL in e.apk ( an droid系統(tǒng)應(yīng)用程序)C. 制作平臺及相關(guān)調(diào)試工具:Eclipse ; AndroidSDKD. 運(yùn)行環(huán)境:an droid手機(jī)/wi nxp/wi n7(PC 平臺必須具有 An droidSDK)E. 性能特點(diǎn):(1) 軟件由兩個可執(zhí)行文件組成,各具特點(diǎn):FourI nALi ne. apk為an droid系統(tǒng)應(yīng)用程序,體積小,界面友好,使用方便。(2)方便重新開始游戲和悔棋。(3)判贏用時少。(4)個別其他
4、功能可進(jìn)行再擴(kuò)展。2概要設(shè)計2.1問題解決的思路概述首先是確定結(jié)構(gòu)化程序設(shè)計的流程圖,利用已存在的數(shù)據(jù)結(jié)構(gòu)來構(gòu)造一個存 儲棋盤的結(jié)構(gòu),接著把游戲?qū)崿F(xiàn)分成六個主要的模塊:實(shí)現(xiàn)悔棋的模塊、實(shí)現(xiàn)新 開的模塊、實(shí)現(xiàn)音樂的模塊、實(shí)現(xiàn)繪圖的模塊,實(shí)現(xiàn)控制線程的模塊,實(shí)現(xiàn)判贏 的模塊,然后各個模塊里面還要分成若干種情況來考慮并通過函數(shù)的嵌套調(diào)用來 實(shí)現(xiàn)其功能。最后,編寫 main主函數(shù)以實(shí)現(xiàn)游戲的可玩性和正確性,調(diào)試程序并將不足的地方加以修改。 總而言之, 就是先用自頂向下、 逐步細(xì)化的設(shè)計方法 來分析并畫出程序設(shè)計流程圖; 然后用自下而上、 逐步積累的設(shè)計方法來寫出程 序。2.2 相關(guān)函數(shù)介紹說明1在 a
5、ndroid 版本程序定義一個用于存儲棋盤的二維數(shù)組變量:private static int ChessBoardState;1) android 版本程序下定義的主要函數(shù)public boolean isWin(int x, int y)/判斷贏家,采用遍歷最后下的棋子在8 個方向上的棋子public voidback(Context context) /悔棋函數(shù)public voidplay() / 游戲主線程public voidsetXY(MyBackChessState myBackChessState) / 處理棧頂元素public RectgetRect(int xy)/標(biāo)記二
6、維數(shù)組對應(yīng)的矩形區(qū)域,也即是棋子該下的位置public Rect getRect(int x, int y)/標(biāo)記二維數(shù)組對應(yīng)的矩形區(qū)域,也即是棋子該下的位置private int getIndexofXY()/獲得當(dāng)前坐標(biāo)在二維數(shù)組中對應(yīng)的索引。XYO是橫坐標(biāo),也即是棋盤的第某列數(shù);XY1是縱坐標(biāo),也 即是棋盤的第某橫。private int searchEmptyTopTile(int x, int chessboardstate) / 返回 當(dāng)列最上方無棋子的坐標(biāo) , 也即是棋盤的第某橫 .public void setChessBoardState(int ChessBoardStat
7、e) / 保存棋盤狀態(tài) public DrawGraph getChessBoardView() / 獲得繪圖實(shí)例 public void setWinner(int player) / 設(shè)置贏局提示 ( 提示對應(yīng)玩家贏 ) public void nextplayer(int player) / 設(shè)置下一玩家 public void newGame(Context context) / 觸發(fā)開始新游戲public boolean onTouch(View v, MotionEvent event) / 綁定棋盤的觸摸事件 public static void play(Context con
8、text, int resource) / 播放音樂 private void updateView(Canvas canvas) / 更新游戲界面public voidshowChess(Ca nvas canv as, int player, Rect rect)/ 設(shè)置當(dāng)前玩家的棋子public voidshowLastChess(Canvas chess, int player, Rect rect) / 顯示最后下的棋子public voidclearView(Ca nvas can vas)/清空整個棋盤視圖private void init() / 初始化視圖public sta
9、tic Bitmap getBitmapFromResld(C on text con text, i nt resId)/獲得棋盤圖片資源public static Bitmap zoomBitmap(Bitmap bitmap, float width, float height)/縮放棋子圖片資源2.3主程序的流程基函數(shù)調(diào)用說明(1)主程序的簡要流程圖/main()r y選擇操作(開始游戲、游戲介紹、退出游戲)LJf、調(diào)用相應(yīng)的模塊運(yùn)行游戲%.J顯示相應(yīng)界面與信息輸岀結(jié)果結(jié)束KJ圖1主程序流程圖(2)各程序模塊之間的層次(調(diào)用)關(guān)系CD調(diào)用“ findViews() ”和“ initVi
10、ews() ”方法綁定各個控件,以便調(diào)用相 應(yīng)的活動界面,然后調(diào)用各模塊進(jìn)行游戲。在每一個功能模塊中都幾乎涉及到棋盤數(shù)組的存取,所以都要調(diào)用getChessBoardState() ”對數(shù)組變量初始化。實(shí)現(xiàn)音樂的模塊“ Music”類,首先要創(chuàng)建一個音頻播放實(shí)例,然后啟動它。在游戲運(yùn)行中根據(jù)其他模塊是否調(diào)用其stop()方法或重新調(diào)用其play()方法。音樂模塊流程圖如下:、ffplay(創(chuàng)建一個音頻播放實(shí)例stop(停止音樂ff圖2音樂模塊流程圖實(shí)現(xiàn)控制線程的模塊“ Co ntrol ”類,首先要調(diào)用get In dexofXY()方法計算用戶點(diǎn)擊的視圖坐標(biāo)對應(yīng)的棋盤二維數(shù)組坐標(biāo)。若此次點(diǎn)擊
11、有效,調(diào)用悔棋模 塊存儲此次操作和調(diào)用判贏模塊的isWin()方法判斷勝負(fù),若贏局出現(xiàn)就再調(diào)用 音樂模塊。最后調(diào)用繪圖更新整個游戲視圖。若此次點(diǎn)擊無效,直接返回??刂?線程模塊流程圖如下: I則0由功主抻制錘再T1 dFaI sc| true |illJQ nc)iiplisyer() 設(shè)直F玩峯圖3控制線程模塊流程圖實(shí)現(xiàn)判贏的模塊“ Winner”類,首先調(diào)用“ isWin() ”方法判斷是否有贏局出現(xiàn),然后在游戲運(yùn)行中根據(jù)其他模塊是否調(diào)用其getSameChess()方法來設(shè)置相同棋子或調(diào)用updateSameChess()方法來重置Winner類中的靜態(tài)變量??刂凭€程模塊流程圖如下:提供
12、 petSumuChess 0 方法盤供 updtiUSanieCtiess0 方法圖4判贏模塊流程圖實(shí)現(xiàn)繪圖的模塊“ DrawGraph類,首先調(diào)用“ onDraw() ”以實(shí)現(xiàn)視圖初始化和棋盤繪制。然后再調(diào)用控制線程模塊的getRect()方法獲取棋子應(yīng)下的位 置,接著調(diào)用getXY()方法和showLastChess()方法設(shè)置最后下的棋子。若有贏 局出現(xiàn),則調(diào)用判贏模塊的 getSameChess()方法來設(shè)置相同棋子??刂凭€程模 塊流程圖如下:四用控制址裡橫塊的 setRectO 方社計調(diào)用 onDrnwOitiOteft 觀圖和健制杭盤M用 &c-t 方沐、-更新游戲現(xiàn)閤闍用控制踐
13、程模塊的 nexlplayer0設(shè)置下玩家調(diào)用揑制線裡攪塊的seiXYO 設(shè)盤上一棋了忖置圖6悔棋模塊流程圖實(shí)現(xiàn)新開的模塊“ NeW類,首先調(diào)用“ newGame(”新建棋盤數(shù)組,然后調(diào)用控制線程模塊的 setChessBoardState()方法對棋盤數(shù)組進(jìn)行重新初始化,然后調(diào)用控制線程模塊的getChessBoardView()方法獲得DrawGraph的實(shí)例,更 新棋盤。接著調(diào)用悔棋模塊的clearStack()方法清空原先棧中元素。最后調(diào)用判贏模塊的updateSameChess()重置靜態(tài)變量和音樂模塊的play()方法重啟背景音樂。新開模塊流程圖如下:調(diào)閉控制規(guī)程模塊的 sciCh
14、essBoardSLate () 方 撻亜咒棋盤數(shù)絹閱用繪制模壊的newGuniQ 0貳新開怕諭戲調(diào)用悔核摸塊的史新游戲視圖HeafSlEitkO方祛清空檢z 關(guān)用判贏 IS 塊的 updfl l eSemeChfiss () 方泣覽置靜蠱變世側(cè)用音樂摸塊的血町() 方法券烷背栄音樂圖7悔棋模塊流程圖3詳細(xì)設(shè)計3.1棋盤存儲的實(shí)現(xiàn)棋盤的大小一般都是固定的常量,所以可以用二維數(shù)組來存儲棋盤的狀態(tài), 其結(jié)構(gòu)簡單且容易,是一種合理的數(shù)據(jù)結(jié)構(gòu)。二維數(shù)組定義如下:private static in tChessBoardState = new in tROWCOLUMN;3.2各模塊主要算法在四子棋游戲
15、的程序設(shè)計中,每一部分都會調(diào)用一些其他其它函數(shù)來輔助完 成運(yùn)算(例如:對棋盤數(shù)組、當(dāng)前玩家和棋盤視圖的初始化,獲取棋子應(yīng)下的位 置等),在這里主要說明四子棋游戲的程序設(shè)計,其它函數(shù)的程序設(shè)計和具體調(diào) 用關(guān)系請查看程序清單。3.2.1判贏算法的實(shí)現(xiàn)判贏算法是基于玩家棋子最后下的位置來進(jìn)行運(yùn)算,此算法在計算時分8個方向分別進(jìn)行局部遍歷。為此,我設(shè)計了 8個for循環(huán),一開始默認(rèn)相同棋子 數(shù)為1,然后從緊鄰當(dāng)前棋子的棋子開始遍歷,若遍歷經(jīng)過的棋子是當(dāng)前玩家的 棋子,則相同棋子數(shù)+1,否則結(jié)束此方向的遍歷。每遍歷完同一直線上的兩個方 向則進(jìn)行一次判斷,判斷相同棋子數(shù)是否 =4。是則返回true,否則進(jìn)
16、入其他方 向的遍歷。若所有方向均遍歷完后,相同棋子數(shù)未能=4就返回false。圖8判贏算法原理圖在算法設(shè)計時應(yīng)注意: 每個方向起始遍歷的下標(biāo); 每個方向遍歷的邊界; 每遍歷完一條直線方向得重置相同棋子數(shù)為 1。322悔棋算法的實(shí)現(xiàn)悔棋借用了棧結(jié)構(gòu),在棧中保存棋子在棋盤二維數(shù)組中的坐標(biāo)。 在設(shè)計此算 法時,我定義了一個保存坐標(biāo)數(shù)組的棧,將 x和y坐標(biāo)打包成數(shù)組來存入棧。由于使用棧會出現(xiàn)??盏默F(xiàn)象,所以在程序設(shè)計時應(yīng)注意: 在出棧前確保棧未空; 在結(jié)合顯示最后棋子功能時,當(dāng)棧為空時,要特別處理顯示上一棋子的 位置。3.3函數(shù)調(diào)用關(guān)系圖此函數(shù)調(diào)用關(guān)系圖以an droid版本應(yīng)用程序來進(jìn)行說明。此函數(shù)
17、調(diào)用關(guān)系 圖主要描述了四子棋游戲的實(shí)現(xiàn)及實(shí)現(xiàn)各運(yùn)算所要調(diào)用的函數(shù),詳情還請看程序清單。Malnf)制麻的模塊卜控制線程的模塊*Wxft上界而悔棋的模塊退出帕音樂的模塊d新斤的模塊繪閹的模塊姑束圖9函數(shù)調(diào)用關(guān)系圖4調(diào)試分析表1調(diào)試過程情況表骨口, 序號時間出現(xiàn)問題解決方法12013-3-20想new 個更新棋盤的 類,在傳參時無法駕馭con text 參數(shù)將一個系統(tǒng)獲得的更新棋盤的實(shí)例 傳給主控制線程,在主控制線程中調(diào) 用更新 View 的方法 post In validate。22013-3-26調(diào)用 get In dexofXY() 后,提示超出數(shù)組索引對getI ndexofXY()處理后
18、的數(shù)據(jù)進(jìn) 仃判斷,不對無用數(shù)據(jù)進(jìn)仃操作32013-3-26在設(shè)置最后下的棋子時, 棧提示空值異常當(dāng)棧為空時,將上一棋子的坐標(biāo)設(shè)為 空,在取坐標(biāo)時,不對空值數(shù)據(jù)進(jìn)行 操作42013-3-29計算棋子應(yīng)下位置時,棋 子位置未能與棋盤相匹 配重新計算棋子位置的公式,添加棋盤 邊沿的偏移量52013-4-4計算下一玩家時,公式出 錯重新計算卜一玩家的公式,關(guān)鍵是初 值的設(shè)置62013-4-8判贏算法在重新開始游 戲時出錯,即相同棋子數(shù) 未能=4均提示玩家贏重置相同棋子數(shù)的值為1,或限制此變量的作用域72013-4-8贏局出現(xiàn)后依舊可以下 棋設(shè)置贏局開關(guān),贏了為true ,否則為false82013-4-16重新開始游戲時,玩家順 丿予紊亂重置當(dāng)前玩家的值為092013-4-27重新開始游戲時,棧中元 素異常,一直有悔棋成功當(dāng)重新開始游戲時,清空棧中元素的提示102013-5-4更新視圖時進(jìn)入死循環(huán)在繪圖模塊中移除post In validate。方法5用戶使用說明5.1 an droid 版本應(yīng)用程序操作說明(1)運(yùn)行FourlnALine.apk應(yīng)用程序后會出現(xiàn)主界面:FauriFiALintFourlnALIneFourlnALlne(n A Line0 00s000000000000 ccoOQe 06-000 065050 OOIOQO
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療器械國際銷售合同范例
- 化工用工合同范例
- 2025年終總結(jié)及明年計劃
- 企業(yè)廚房用工合同范本
- 老人預(yù)防電信詐騙
- 四川農(nóng)村建房承包合同范本
- 醫(yī)院食堂職工合同范本
- 原價轉(zhuǎn)讓香煙合同范例
- 環(huán)境檢測年終總結(jié)2025年
- 企業(yè)文化內(nèi)訓(xùn)
- 2024年環(huán)北部灣廣西水資源配置有限公司招聘考試真題
- 2023-2024年演出經(jīng)紀(jì)人之演出經(jīng)紀(jì)實(shí)務(wù)考前沖刺模擬試卷附答案(研優(yōu)卷)
- 2025年黑龍江建筑職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫完美版
- 第16課《有為有不為 》課件-2024-2025學(xué)年統(tǒng)編版語文七年級下冊
- 上海市建設(shè)工程施工圖設(shè)計文件勘察設(shè)計質(zhì)量疑難問題匯編(2024 版)
- 第一單元時、分、秒(說課稿)-2024-2025學(xué)年三年級上冊數(shù)學(xué)人教版
- 地理-浙江省杭州八縣市2024學(xué)年高二第一學(xué)期期末學(xué)業(yè)水平測試試題和答案
- 《康復(fù)工程學(xué)》課件-第一講 康復(fù)工程概論
- 2024年3、6、9月青少年軟件編程Python等級考試一級真題(全3套 含答案)
- SF-36生活質(zhì)量調(diào)查表(SF-36-含評分細(xì)則)
- 2023年河北省安全生產(chǎn)舉報和獎勵答試題及答案
評論
0/150
提交評論