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

正文內(nèi)容

連連看游戲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文(編輯修改稿)

2025-05-08 23:32 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 指針。但是,在 QT 中信號(hào)和槽取代了這些凌亂的函數(shù)指針,使得我們編寫(xiě)這些通信程序更為簡(jiǎn)潔明了。 信號(hào)和槽能攜帶任意數(shù)量和任意類(lèi)型的參數(shù),他們是類(lèi)型完全安全的,不會(huì)像回調(diào)函數(shù)那樣產(chǎn)生 core dumps。 所有從 QObject 或其子類(lèi) ( 例如 Qwidget) 派生的類(lèi)都能夠包含信號(hào)和槽。當(dāng)對(duì)象改變其狀態(tài)時(shí),信號(hào)就由該對(duì)象發(fā)射 (emit) 出去,這就是對(duì)象所要做的全部事情,它不知道另一端是誰(shuí)在接收這個(gè)信號(hào)。這就是真正的信息封裝,它確保對(duì)象被當(dāng)作一個(gè)真正的軟件組件來(lái)使用。槽用于接收信號(hào),但它們是普通的對(duì)象成員函數(shù)。一個(gè)槽并不知道是否有任何信號(hào)與自己相連接。而且,對(duì)象并不了解具體的通信機(jī)制。 你可以將很多信號(hào)與單個(gè)的槽進(jìn)行連接,也可以將單個(gè)的信號(hào)與很多的槽進(jìn)行連接,甚至于將一個(gè)信號(hào)與另外一個(gè)信號(hào)相 連接也是可能的,這時(shí)無(wú)論第一個(gè)信號(hào)什么時(shí)候發(fā)射系統(tǒng)都將立刻發(fā)射第二個(gè)信號(hào)??傊盘?hào)與槽構(gòu)造了一個(gè)強(qiáng)大的部件編程機(jī)制。 系統(tǒng)的重點(diǎn)難點(diǎn) 此程序的重點(diǎn)是鼠標(biāo)的交互功能。通過(guò) ClassWizard 對(duì)鼠標(biāo)左鍵被按下時(shí)觸發(fā)的命令消息進(jìn)行攔截技術(shù)來(lái)實(shí)現(xiàn)。因?yàn)橛螒虻娜窟^(guò)程需要依靠鼠標(biāo)操作,所以鼠標(biāo)交互功能的設(shè)計(jì)是否人性化就成了此連連看游戲程序的重點(diǎn)。 此程序的難點(diǎn)是連連看游戲程序的連接線(xiàn)功能。首先編寫(xiě)一個(gè)創(chuàng)建路徑的類(lèi),通過(guò)這個(gè)類(lèi)使游戲中消除小方塊時(shí)能夠找到一條可以連接的路徑進(jìn)行連線(xiàn),然后通過(guò)一個(gè)畫(huà) 線(xiàn)的類(lèi)進(jìn)行連接。 合肥學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系畢業(yè)論文 10 第四章 詳細(xì)設(shè)計(jì) 功能模塊設(shè)計(jì)與實(shí)現(xiàn) 此連連看游戲程序根據(jù)模塊的性質(zhì)分為以下幾大類(lèi): 基本功能模塊,主要通過(guò)游戲的菜單顯示出來(lái),分為游戲模塊、選項(xiàng)模塊。游戲繪圖模塊,包括小方塊圖案的載入以及游戲地圖背景的繪制。游戲交互模塊,主要是快捷鍵和鼠標(biāo)交互功能的實(shí)現(xiàn)。游戲算法模塊,包括游戲的連接判斷算法以及游戲勝利判斷的算法。 游戲模塊設(shè)計(jì)與實(shí)現(xiàn) 游戲模塊中對(duì)于地圖,初級(jí)設(shè)為 10x8 的地圖,即橫向?yàn)槭畟€(gè)小方塊,縱向?yàn)榘藗€(gè)小方塊。由于地圖的大小為十行八列 共 80 個(gè)小方塊,每個(gè)種類(lèi)的人物設(shè)定出現(xiàn) 4 次為偶數(shù),這樣就可以實(shí)現(xiàn)成對(duì)的出現(xiàn)了,在游戲中可以完成配對(duì)。這樣以來(lái),共 80 個(gè)小方塊且每個(gè)人物出現(xiàn) 4次,也就是說(shuō),共有 20 個(gè)人物 [7]。 選項(xiàng)模塊設(shè)計(jì)與實(shí)現(xiàn) 選項(xiàng)模塊中分為提示子模塊、重列子模塊、音樂(lè)子模塊、更改背景音樂(lè)子模塊以及積分榜子模塊。 對(duì)于提示子模塊和重列子模塊,作為道具可以隨時(shí)進(jìn)行調(diào)用,并且有次數(shù)記錄,當(dāng)記錄次數(shù)到達(dá)零以下,立即給出提示。對(duì)于提示模塊 ,采用遍歷的方法進(jìn)行查找,首先遍歷同一種圖塊中出現(xiàn)在不同坐標(biāo)位置的圖案小方塊,以此模擬第一次點(diǎn)擊,然后遍歷同一種圖塊的剩余的不同坐標(biāo)圖案小方塊的出現(xiàn),以此模擬第二次點(diǎn)擊,判斷前后 2 次模擬點(diǎn)擊選中的不同位置的同種圖塊能否連通,能連通則高亮顯示這 2 個(gè)圖塊,提示完成;否則,繼續(xù)檢測(cè)連通情況直至找到為止。對(duì)于重列模塊,首先通過(guò)遍歷的方法,依次讀取各個(gè)位置的圖片,增加到臨時(shí)的圖片列表中,然后再隨機(jī)的循環(huán)依次在原來(lái)有圖片的地方添加圖片,從圖片列表中刪除用過(guò)的圖片,不刪除就會(huì)有可能重復(fù)了,最后進(jìn)行刷新即可。流程圖如圖 和圖 所示。 合肥學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系畢業(yè)論文 11 圖 41重列功能判斷流程圖 開(kāi)始 讀取各個(gè)圖片坐標(biāo) 保存到臨時(shí)列表中 在臨時(shí)列表讀取一個(gè)圖片 在原有位置添加圖片 臨時(shí)地圖是否讀取 完畢 重列次數(shù)減少一點(diǎn) 結(jié)束 是 否 合肥學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系畢業(yè)論文 12 圖 42提示功能判斷流程圖 背景音樂(lè)子模塊通過(guò) 使用 Phonon 這個(gè)多媒體框架來(lái)提供一般影音多媒體檔案的播放 。再通過(guò)調(diào)用 MediaObject 類(lèi)進(jìn)行音樂(lè)的播放與暫停。 void MainWindow::on_actionBackSound_toggled(bool arg1) { 開(kāi)始 找到一個(gè)圖案方塊 模擬第一次點(diǎn)擊 遍歷這種圖片剩余方塊 模擬第二次點(diǎn)擊 圖案是否能夠消除 對(duì)方塊進(jìn)行消除 對(duì)方塊進(jìn)行消除 結(jié)束 圖案是否遍歷完成 無(wú)可提示的連接 否 是 是 否 合肥學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系畢業(yè)論文 13 if( arg1 ) mediaObjectplay()。 //音樂(lè)開(kāi)始 else mediaObjectpause()。 //音樂(lè)暫停 } 改變背景音樂(lè)子模塊通過(guò)調(diào)用 QfileDialog 類(lèi)來(lái)提供一個(gè)可以用于選擇音樂(lè)文件的對(duì)話(huà)框。 void MainWindow::on_actionChangeBackSound_triggered() { QString fileName = QFileDialog::getOpenFileName(this, tr(Open File)./,tr(Sounds (*.wav *.mp3)))。 //打開(kāi)文件夾 if( !() ) { createSound(fileName)。 } } 對(duì)于積分榜子模塊,首先在游戲結(jié)束后彈出對(duì)話(huà)框提示輸入姓名,游戲的關(guān)卡數(shù)、積分自動(dòng)進(jìn)行統(tǒng)計(jì),然后保存到文檔中。對(duì)于記錄的提示問(wèn)題,在一個(gè)游戲結(jié)束時(shí),會(huì)彈出對(duì)話(huà)框看得到的分?jǐn)?shù),這個(gè)對(duì)話(huà)框彈出來(lái)時(shí),從數(shù)據(jù)文件讀取出來(lái),然后排序,比較一下當(dāng)前的分?jǐn)?shù),找到當(dāng)前分?jǐn)?shù)在鏈表中的位 置然后進(jìn)行插入,但是在調(diào)出積分榜時(shí),首先要進(jìn)行一下排序,然后在表格中顯示出來(lái)。 游戲地圖數(shù)據(jù)的設(shè)計(jì)與實(shí)現(xiàn) 整個(gè)游戲地圖分為信息顯示區(qū)域和游戲區(qū)域。信息顯示區(qū)域部分分布在整個(gè)地圖的上方,右側(cè)為關(guān)卡、重列剩余時(shí)間、分?jǐn)?shù)和提示信息,通過(guò)使用標(biāo)簽和各種控件直接在 ui 圖形界面中畫(huà)出。 對(duì)于游戲區(qū)域,被抽象成一個(gè)有坐標(biāo)位置屬性平面,平面上零散地分布著若干小方塊,在繪制地圖的類(lèi)中添加地圖數(shù)據(jù)成員變量,用于記錄動(dòng)態(tài)分配出來(lái)的一維數(shù)組地圖空間的首地址,對(duì)于地圖中的某個(gè)小方塊的類(lèi)型,可以用一個(gè)整型的 ID 來(lái)進(jìn) 行識(shí)別。地圖的數(shù)據(jù)結(jié)構(gòu)合肥學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系畢業(yè)論文 14 設(shè)計(jì)完畢。在游戲開(kāi)始前,先要進(jìn)行初始化,為了保證小方塊能成對(duì)地出現(xiàn),不應(yīng)該僅僅對(duì)人物圖案做簡(jiǎn)單地隨機(jī)抽取,然后將隨機(jī)選取出來(lái)的小方塊放到地圖中去就了事,而是需要成對(duì)的選取人物小方塊,就是說(shuō)地圖中的小方塊必須是偶數(shù)個(gè)才行。把地圖設(shè)置成動(dòng)態(tài)分配的方式,目的是讓其空間可以根據(jù)行列數(shù)的需求動(dòng)態(tài)地獲取,而對(duì)于實(shí)際大小不同的地圖空間即可。主要代碼如下: //初始化地圖數(shù)據(jù) void llkgame::paintEvent(QPaintEvent *) { QPainter p(this)。 //畫(huà) 背景圖片 ( 0, //圖片的頂點(diǎn)橫坐標(biāo) 0, //圖片的頂點(diǎn)縱坐標(biāo) LLKGAME_PHWIDTH*10, //圖片寬度 LLKGAME_PHHEIGHT*8, //圖片的高度 QPixmap(:/image/) )。 //從資源庫(kù)調(diào)用圖片 //畫(huà)連連看小圖片 for(int i=1 。 imap_row1 。 i++) { for(int j=1 。 jmap_col1 。 j++) { if( LLKGAME_EMPTY != arr_map[i][j] ) //如果不是空方塊 { ( (j1)*(LLKGAME_PHWIDTH), (i1)*(LLKGAME_PHHEIGHT), LLKGAME_PHWIDTH, LLKGAME_PHHEIGHT, (arr_map[i][j]) )。 } 合肥學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系畢業(yè)論文 15 } } 對(duì)于圖案的布局,依舊是采用常用的機(jī)制,先用 srand0 函數(shù)對(duì)時(shí)間函數(shù)布下隨機(jī)種子,然后調(diào)用 rand()函數(shù)對(duì)具體的圖案方塊的種類(lèi)進(jìn)行隨機(jī)的獲取。 對(duì)于圖片資源的,可以先在內(nèi)存創(chuàng)建兩個(gè)內(nèi)存位圖,并對(duì)它們的圖像進(jìn)行載入。在需要使用的時(shí)候,則可以從這些內(nèi)存位圖中直接去拷貝,并繪制到游戲區(qū)域內(nèi)存位圖中去。首先,對(duì)方塊的兩種狀態(tài)所對(duì)應(yīng)的圖片分別創(chuàng)建相應(yīng)的設(shè)備環(huán)境,并且為它們分配關(guān)聯(lián)的內(nèi)存位圖變量。而對(duì)于游戲區(qū)域的繪制,則通過(guò) ui 圖形界面進(jìn)行直接繪制。關(guān)鍵代碼如下: //構(gòu)造 Pixmap 列表 for(int i=0 。 iLLKGAME_SUMPH 。 i++) { QString phname = :/image/+QString::number(i,10)+.png。 //調(diào)用圖片名稱(chēng) QPixmap pixmap(phname)。 (pixmap)。 for(int j=0 。 jLLKGAME_PERPH 。 j++) { (i)。 } } //隨機(jī)放置圖片 for(int i=1 。 imap_row1 。 i++) { for(int j=1 。 jmap_col1 。 j++) { int dex = (int(rand()))%()。 arr_map[i][j] = (dex)。 合肥學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系畢業(yè)論文 16 (dex)。 } } update()。 } 圖案方塊的判斷連接的設(shè)計(jì)與實(shí)現(xiàn) 設(shè)計(jì)思路是:假設(shè)目標(biāo)點(diǎn) pl, p2,如果有兩個(gè)折點(diǎn)分別為 z1, z2 那么,所要進(jìn)行的是: (1)如果驗(yàn)證 pl, p2 直線(xiàn)連線(xiàn),則連接成立。 (2)對(duì)于一個(gè)折點(diǎn)和兩個(gè)折點(diǎn)的情況下。搜索以 pl, p2 的 x,y 方向四條直線(xiàn)(可能某兩條直線(xiàn)會(huì)重合)上的有限點(diǎn),每次取兩點(diǎn)作為 z1, z2,驗(yàn)證 pl 到 z1/zl 到 z2/z2 到 p2 是否都能直線(xiàn)相連,是則連接成立,這是兩個(gè)折點(diǎn)的情況。對(duì)于一個(gè)折點(diǎn),即 z1z2,對(duì)判斷沒(méi)影響,每次取一點(diǎn)作為 z1 或 z2,驗(yàn)證 pl 到 zl/zl 或 z2/z2 到 p2 是否都能直線(xiàn)相連,是則連接成立。 直連 一個(gè)折點(diǎn) 兩個(gè)折點(diǎn) 合肥學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系畢業(yè)論文 17 圖 43三種連接方式 圖 44連接判斷流程圖 具體代碼如下: //直連 bool llkgame::iLink(int sx, int sy, int ex, int ey) 開(kāi)始 一個(gè)折點(diǎn)連接方式判斷成功 直連方式判斷成功 兩個(gè)折點(diǎn)判斷成功 消除所選的兩個(gè)圖案 結(jié)束 恢復(fù)所選圖案的原始狀態(tài) 是 是 是 否 否 否 合肥學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系畢業(yè)論文 18 { //兩個(gè)點(diǎn)必須不是同一個(gè) if(sx == ex amp。amp。 sy == ey) return false。 int max , min , i 。 if( sx == ex ) //同一行 { if( sy ey ) //從左向右連接 { min = sy 。 max = ey 。 } else //從右向左連接 { min = ey 。 max = sy 。 } for( i = min+1 。 i max 。 i ++ ) { if( arr_map[sx][i] != LLKGAME_EMPTY ) //如果選中的兩個(gè)圖片
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1