freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)論文-基于android平臺(tái)的手機(jī)五子棋游戲的設(shè)計(jì)-資料下載頁(yè)

2025-11-05 21:40本頁(yè)面

【導(dǎo)讀】本文詳細(xì)介紹了在Android平臺(tái)上以Java為語(yǔ)言編寫(xiě)游戲的過(guò)程。不僅是一個(gè)簡(jiǎn)單游戲的編寫(xiě)過(guò)程,更重要的是在系統(tǒng)分析和設(shè)計(jì)階段所做的工作。應(yīng)共同構(gòu)成了“基于Android平臺(tái)的五子棋游戲設(shè)計(jì)與開(kāi)發(fā)”的設(shè)計(jì)。

  

【正文】 振動(dòng)設(shè)備、播放聲音等等。典型的是放在一個(gè)持久的圖標(biāo)在狀態(tài)欄,用戶可以打開(kāi)獲取信息。 內(nèi)容提供者( Content providers) 內(nèi)容提供者( content provider)使一個(gè)應(yīng)用程序的指定數(shù)據(jù)集提供給其他應(yīng)用程序。這些數(shù)據(jù)可以 22 存儲(chǔ)在文件系統(tǒng)中、在一個(gè) SQLite 數(shù)據(jù)庫(kù)、或以任何其他合理的方式。內(nèi)容提供者繼承自 ContentProvider 基類(lèi)并實(shí)現(xiàn)了一個(gè)標(biāo)準(zhǔn)的方法集,使得其他應(yīng)用程序可以檢索和存儲(chǔ)數(shù)據(jù)。然而,應(yīng)用程序并不直接調(diào)用這些方法。相反,替代的是它們使用一個(gè) ContentResolver 對(duì)象并調(diào)用它的方法。 ContentResolver 能與任何內(nèi)容提供者通信 ,它與提供者合作來(lái)管理參與進(jìn)來(lái)的進(jìn)程間的通信。 內(nèi)容提供者是 Android 應(yīng)用程序的主要組成部分之一,提供內(nèi)容給應(yīng)用程序。他們封裝數(shù)據(jù)且通過(guò)單個(gè) ContentResolver 接口提供給應(yīng)用程序。只有需要在多個(gè)應(yīng)用程序間共享數(shù)據(jù)是才需要內(nèi)容提供者。例如,通訊錄數(shù)據(jù)被多個(gè)應(yīng)用程序使用,且必須存儲(chǔ)在一個(gè)內(nèi)容提供者中。如果你不需要在多個(gè)應(yīng)用程序間共享數(shù)據(jù),你可以直接使用 SQLiteDataBase 當(dāng) ContentResolver 發(fā)出一個(gè)請(qǐng)求時(shí),系統(tǒng)檢查給定的 URI 的權(quán)限并傳遞請(qǐng)求給內(nèi)容提供者注冊(cè)。內(nèi)容提供者能理解 URI 想要的東西。 UriMatcher 類(lèi)用于幫組解析 URIs。 需要實(shí)現(xiàn)的方法主要如下: query(Uri, String[], String, String[], String) 返回?cái)?shù)據(jù)給調(diào)用者 insert(Uri, ContentValues) 插入數(shù)據(jù)到內(nèi)容提供者 update(Uri, ContentValues, String, String[]) 更新內(nèi)容提供者已存在的數(shù)據(jù) delete(Uri, String, String[]) 從內(nèi)容提供者中刪除數(shù)據(jù) getType(Uri) 返回內(nèi)容提供者中的 MIME 類(lèi)型數(shù)據(jù) 更多的關(guān)于 ContentResolver 信息,請(qǐng)查看相關(guān)文檔。 每當(dāng)有一個(gè)應(yīng)該由特定組件處理的請(qǐng)求, Android 可以確保該組件的應(yīng)用程序正在運(yùn)行,如果沒(méi)有就啟動(dòng)它,而且一個(gè)適當(dāng)?shù)慕M件實(shí)例可用,如果沒(méi)有就創(chuàng)建。 5 程序的設(shè)計(jì)與實(shí)現(xiàn) 本章節(jié)主要介紹一下此論文中用到了的 Android 的布局文件,可視化控件以及它們的具體實(shí)現(xiàn)。 程序 的算法研究: 本游戲是以五子棋為背景的游戲,游戲的畫(huà)面按照 9*9 的畫(huà)面進(jìn)行匯總,內(nèi)容的算法則是根據(jù) JAVA的 基本循環(huán)語(yǔ)句進(jìn)行定義,棋盤(pán)的繪制尤為重要,它是整個(gè)游戲的關(guān)鍵,因?yàn)樗钦麄€(gè)游戲的主界面, 23 利用 surface 可得到 9*9 的游戲棋盤(pán)坐標(biāo)畫(huà)面。 在游戲中,落子定義也十分重要,因?yàn)槲遄悠逵螒蛑?,只要黑白任意一方在任何方向?5 個(gè)連續(xù)落子連成一線,便獲得了勝利。算法便是在坐標(biāo)定義上進(jìn)行 ++的方式。 棋盤(pán) 布局 的數(shù)據(jù)結(jié)構(gòu) 首先要先獲得整個(gè)棋盤(pán)的高度,以及其他一些寬度的參數(shù),因?yàn)槔玫氖?surface 的重繪,所以對(duì)此類(lèi)棋盤(pán)高度寬度進(jìn)行定義,部分代碼如下: public void setGameState(int newState) { mGameState = newState。 switch (mGameState) { case GS_GAME: mGameMap = new int[CHESS_HEIGHT][CHESS_WIDTH]。 mMapHeightLengh = 。 mMapWidthLengh = mGameMap[0].length。 mCampTurn = CAMP_HERO。 break。 關(guān)于盤(pán)面情況的表示, 首先得到屏幕的大小,然后根據(jù)所畫(huà)棋子的大小來(lái)確定下一條棋盤(pán)的畫(huà)線。 整個(gè)棋盤(pán)是利用 superface 進(jìn)行重繪, superface是安卓系統(tǒng)繪制列陣最普通的一種 在 android 中,對(duì)view 及其子類(lèi),都是畫(huà)在 surface 上的。每個(gè) window 對(duì)應(yīng)一個(gè) surface,各 surface 對(duì)象通過(guò) surfaceflinger 合成到 framebuffer,每個(gè) surface 都是雙緩沖,它有一個(gè) back buffer 和一個(gè) front buffer。 back buffer 就是畫(huà)畫(huà)的地方, front buffer 是用來(lái)合成。 surface創(chuàng)建 Canvas 對(duì)象(用來(lái)管理 surface 繪圖操作), Canvas 對(duì)應(yīng) bitmap(存儲(chǔ) surface內(nèi)容)。當(dāng)調(diào)用 unlockCanvas()后, back buffer 開(kāi)始變?yōu)榭捎茫烷_(kāi)始顯示了。有一套機(jī)制實(shí)現(xiàn) back buffer和 front buffer 的互換,當(dāng)要更新時(shí), back buffer 與 front buffer 互換, back buffer 變成 front buffer。 代碼如下: for (i = 0。 i mMapHeightLengh。 i++) { for (j = 0。 j mMapWidthLengh。 j++) { int CampID = mGameMap[i][j]。 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)。 24 } else if (CampID == CAMP_ENEMY) { DrawImage(mWhite, x, y, ALIGN_VCENTER | ALIGN_HCENTER)。 } setGameState(GS_GAME)。根據(jù) res 中棋盤(pán)圖像的坐標(biāo),進(jìn)行定義。 Res 中存放的是調(diào)用定義的圖片,將 main中繪制好的大類(lèi)在 res 中進(jìn)行整合。 圖 52 在 res 中如圖 52,在其中進(jìn)行圖像的定義,之后根據(jù)定義對(duì)其經(jīng)行調(diào)用如上述代碼實(shí) 現(xiàn) 。 行棋 坐標(biāo)判定 實(shí)際上,是根據(jù)當(dāng)前最后一個(gè)落子的情況來(lái)判斷勝負(fù)的。實(shí)際上需要從四個(gè)位置判斷,以該子為出發(fā)點(diǎn)的水平, 分別是豎直和水平以及傾斜型。 在獲得橫軸和數(shù)軸坐標(biāo)時(shí),該子落下,即可獲得該子落下的坐標(biāo)。 因?yàn)槲遄悠逵袡M豎左右,斜邊等全方位的落子方式,所以在定義的時(shí)候就要進(jìn)行多方位的考慮,以保持五子棋的規(guī)則不被破壞。 對(duì)于各個(gè)方向的算法都要對(duì)整個(gè)棋盤(pán)有一個(gè)清晰的定義。 部分 如下代碼: // 橫向 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 (mGameMap[mMapIndexY][index] == Camp) { MeetCount++。 if (MeetCount == CALU_SINGLE_COUNT) { return true。 } } else { MeetCount = 0。 } 25 } // 縱向 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 (mGameMap[index][mMapIndexX] == Camp) { MeetCount++。 if (MeetCount == CALU_SINGLE_COUNT) { return true。 } } else { MeetCount = 0。 如上述語(yǔ)句為橫向落子的算法。 橫向的落子算法,根據(jù)棋盤(pán)進(jìn)行坐標(biāo)的定位。 游戲的策劃是游戲開(kāi)發(fā)過(guò)和中的最重要的一個(gè)開(kāi)發(fā)環(huán)節(jié),只有寫(xiě)好了游戲策劃才能繼續(xù)游戲開(kāi)發(fā),游戲策劃是游戲開(kāi)發(fā)的一個(gè)流程,把策劃寫(xiě)好了就可以近照策劃一步步進(jìn)行開(kāi)發(fā),可見(jiàn)策劃的重要性。 勝負(fù)的判定 游戲中, 游戲的結(jié)束意味著勝負(fù)的出現(xiàn),在棋類(lèi)對(duì)戰(zhàn)中最終的勝負(fù)就是黑方或者白方的勝利。所以對(duì)于此類(lèi)定義十分重要 。 五子棋的規(guī)則就是任意方向上能夠連續(xù)連成 5個(gè),便獲得勝利,以此 根據(jù)這個(gè)規(guī)則對(duì)勝負(fù)判定進(jìn)行匯總和定義。 部分代碼如下: if (x 0 amp。amp。 y mTitleHeight) { mMapIndexX = (int) (x / mTitleSpace)。 mMapIndexY = (int) ((y mTitleHeight) / mTitleSpace)。 if (mMapIndexX mMapWidthLengh) { mMapIndexX = mMapWidthLengh。 } if (mMapIndexX 0) { mMapIndexX = 0。 } if (mMapIndexY mMapHeightLengh) { 26 mMapIndexY = mMapHeightLengh。 } if (mMapIndexY 0) { mMapIndexY = 0。 } if (mGameMap[mMapIndexY][mMapIndexX] == CAMP_DEFAULT) { 流程 設(shè)計(jì) 游戲的設(shè)計(jì)是一個(gè)很簡(jiǎn)單的 2D人人對(duì)戰(zhàn)五子棋, 它的游戲運(yùn)行方式一目了然,由于簡(jiǎn)單的設(shè)計(jì)和實(shí)現(xiàn),可以很清晰很直觀地看到整個(gè)運(yùn)行的過(guò)程。 當(dāng)設(shè)計(jì)這個(gè)游戲時(shí),首先要用一個(gè)很 好的游戲界面, 進(jìn)入游戲界面, 可直接進(jìn)行人人對(duì)戰(zhàn)。 如圖 61: 圖 61 功能模塊 游戲的實(shí)現(xiàn) : 如圖 58 運(yùn)行程序進(jìn)入開(kāi)機(jī)動(dòng)畫(huà)界面,也就是游戲歡迎頁(yè)面 然后就直接進(jìn)入了游戲畫(huà)面 ,便讓人知道這是一個(gè) 五子棋 游戲 ,挑戰(zhàn)自己,集中你的智慧,來(lái)享受博弈的樂(lè)趣,會(huì)勾起人們想下棋的欲望,被 五子棋 游戲吸引, 而且 在火車(chē)上休閑時(shí) 可以與別人進(jìn)行博 弈 ,特別 能切磋兩人之間的棋藝 。可以讓人在任何時(shí)間任何地點(diǎn)都可以下棋放松、休閑。 而且簡(jiǎn)單的人人呢對(duì)戰(zhàn)可以讓自己在任何時(shí)候也可以自己與自己博弈,自我研究行棋套路,這也是這個(gè)游戲產(chǎn)生的初衷。 直接進(jìn)入游戲 進(jìn)行人人對(duì)戰(zhàn) 判定勝負(fù) 進(jìn)入獲勝界面并按任意鍵重新開(kāi)始游戲 27 整個(gè)界面的設(shè)計(jì)師根據(jù)傳統(tǒng) 9*9 棋盤(pán)模式進(jìn)行的重繪,利用第五章中的 superface 重繪可得到 9*9棋盤(pán)模式。 具體的游戲?qū)崿F(xiàn)如圖 62 游戲主界面 這時(shí)直接進(jìn)入游戲, 游戲界面 GameView 該類(lèi)是整個(gè)程序最主要的類(lèi),是主游戲的界面該界面繼承自 SurfaceView 并實(shí)現(xiàn)了 接口 。 圖 62 游戲主界面 如圖 510是開(kāi)始游戲界面,就可以開(kāi)始對(duì)弈了,黑白雙方都是玩家,用鼠標(biāo)點(diǎn)擊方式進(jìn)下棋,然后考慮下一步對(duì)方如何進(jìn)行走位。 然后可以直接根據(jù)對(duì)手的走位選擇自己合適的走法來(lái)?yè)魯?duì)手。 28
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1