九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOCX文檔下載  

二維數(shù)組在俄羅斯方塊游戲編程中的應(yīng)用

  • 資源ID:22512409       資源大小:13.57KB        全文頁數(shù):3頁
  • 資源格式: DOCX        下載積分:25積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要25積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請(qǐng)知曉。

二維數(shù)組在俄羅斯方塊游戲編程中的應(yīng)用

二維數(shù)組在俄羅斯方塊游戲編程中的應(yīng)用摘要:在俄羅斯方塊游戲編程過程中,二維數(shù)組起到了至關(guān)重要的作用,我們通過控制二維數(shù)組元素的值來達(dá)到控制方塊的目的,在游戲中的障礙判斷、行滿判斷及其各種形狀方塊的左右移動(dòng),實(shí)際上都需要借助于它。本文借俄羅斯方塊游戲編程來指導(dǎo)大家對(duì)二維數(shù)組的學(xué)習(xí)和應(yīng)用。關(guān)鍵詞:二維數(shù)組;坐標(biāo);位圖(DIB)資源俄羅斯方塊是大家都很熟悉的游戲,在其Windows應(yīng)用程序的開發(fā)過程中,總的來說需要解決幾個(gè)關(guān)鍵性的問題:其一是如何實(shí)現(xiàn)各個(gè)方塊圖案形狀之間的轉(zhuǎn)換;其二是在方塊圖案下落時(shí)如何判斷下方有無障礙;其三就是如何判斷一行是否填滿及其消除的辦法。這些功能都需要采用一定的算法來實(shí)現(xiàn)。 在程序的開發(fā)過程中,我們采用了二維數(shù)組的辦法來控制整個(gè)方框的狀態(tài),從而比較容易理解的解決了上述的三個(gè)主要問題。此應(yīng)用程序是采用Microsoft Visual C+程序語言在Windows 98及Windows XP上運(yùn)行成功,下面就詳細(xì)介紹二維數(shù)組在程序中的應(yīng)用方法。 首先,我們需要分析方塊圖案的種類及其狀態(tài)的問題。典型的也是最常見的俄羅斯方塊游戲中共有7類圖案,每一類圖案又有若干變形的狀態(tài)。為了讓大家直觀了解,所有圖案和變形狀態(tài)如圖一所示。 圖一 在某一類圖案下落的過程中,我們可以通過鍵盤控制此類圖案各狀態(tài)間的轉(zhuǎn)換。由于方塊是在Windows的“可視”窗口中顯示出來的,因此我們還需要調(diào)用位圖(DIB)資源。實(shí)際上在Windows操作系統(tǒng)中每一個(gè)位圖資源都是以矩形的形式定義的(即定義位圖資源的寬和高)。如果對(duì)每一類圖案的每一個(gè)變形狀態(tài)都用不同的位圖來表示,則由圖一可知總共要定義19幅位圖,這樣不但增加了繪制位圖的工作量,而且在變形狀態(tài)間轉(zhuǎn)換時(shí)容易引起閃爍和位置抖動(dòng)。而更為麻煩的是它非常不利于下落時(shí)障礙判斷和行是否填滿狀態(tài)的判斷??紤]到每一種圖案實(shí)際上是由四個(gè)大小完全相同的小方塊所組成。四個(gè)這樣的小方塊通過不同的位置組合就可以形成上述的七大類19種狀態(tài)的圖案。因此實(shí)際上我們只需要繪制一幅小方塊的DIB位圖。由于連續(xù)調(diào)用四次位圖的時(shí)間很短,不會(huì)超過人眼睛的視覺停留時(shí)間,因此我們看上去是一幅完整的位圖。 我們把各個(gè)小方塊的左上角坐標(biāo)分別用(cx1,cy1),(cx2,cy2),(cx3,cy3),(cx4,cy4)來代表,程序中控制這些坐標(biāo)之間的關(guān)系就相當(dāng)于控制了小方塊組合的形狀,圖二就表明了第三類圖案的變形狀態(tài)轉(zhuǎn)換情況。 圖二 下面來定義游戲窗口,我們假定游戲的左上角坐標(biāo)點(diǎn)為(ulPosx,ulPosy),邊框?qū)挾榷x為frmwidth,邊框內(nèi)的寬和高分別是16mWidth和20mHeight。其中mWidth和mHeight分別是小方塊的寬和高,我們通常設(shè)定兩者相等。我們可以理解,在功能實(shí)現(xiàn)上,可以看做是先擦除圖案,往下移動(dòng)一個(gè)mHeight距離后再將圖案顯示出來的過程。若移動(dòng)一個(gè)mHeight距離后,任一個(gè)小方塊的左上角縱坐標(biāo)都沒有超出方框底線,并且任一小方塊當(dāng)前所處位置所對(duì)應(yīng)的數(shù)組元素都不等于1,就說明當(dāng)前圖案沒有到底,也沒有遇到障礙物,這是我們可以直接將其顯示出來;否則,在顯示之前應(yīng)當(dāng)向上移動(dòng)一個(gè)mHeight距離,即取消剛才所做的距離移動(dòng)。在這里擦除圖案和顯示圖案分別用函數(shù)EraseDesign()和PaintDesign()來實(shí)現(xiàn);函數(shù)CalcStatus()的作用是計(jì)算public變量i1-i4、j1-j4的值,這里擦除圖案和顯示圖案分別用函數(shù)EraseDesign()和PaintDesign()來實(shí)現(xiàn)。函數(shù)Calcstatus()的作用是計(jì)算public變量i1到i4、j1到j(luò)4的值,程序代碼如下: Void CBlocks View:OnTimer(UINT nIDEvent) EraseDesign(); cy1+=mHeight; cy2+=mHeight; cy3+=mHeight; cy4+=mHeight; CalcStatus(); if (cy1>(ulPosy+frmwidth+19*mHeight)cy2>(ulPosy+frmwidth+19*mHeight) cy3>(ulPosy+frmwidth+19*mHeight)cy4>(ulPosy+frmwidth+19*mHeight) (array=1)(array=1) (array=1) (array=1) cy1-=mHeight; cy2-=mHeight; cy3-=mHeight; cy4-=mHeight; PaintDesign(); array=1; array=1; array=1; array=1; else PaintDesign(); void CBlocksView: EraseDesign()/擦除方塊 CClientDC dc(this); CBrush whiteBrush(RGB(255,255,255), CRect rect1(cx1,cy1,cx1+mWidth,cy1+mHeight); CRect rect2(cx2,cy2,cx2+mWidth,cy2+mHeight); CRect rect3(cx3,cy3,cx3+mWidth,cy3+mHeight); CRect rect4(cx4,cy4,cx4+mWidth,cy4+mHeight); dc.FillRect(&rect1,&whiteBrush); dc.FillRect(&rect2,&whiteBrush); dc.FillRect(&rect3,&whiteBrush); dc.FillRect(&rect4,&whiteBrush); void CBlocksView: PaintDesign()/繪制方塊 CClientDC dc(this);CDC ppDC;CBitmap Bmp;Bmp.LoadBitmap(ID-101);ppDC,CreateCompatibleDC(&dc); CBitmap*m-OldBmp=ppDC.SelectObject(&Bmp);dc.BitBlt(cx1,cy1,mWidth,mHeight,&ppDC,0,0,SRCCOPY); dc.BitBlt(cx2,cy2,mWidth,mHeight,&ppDC,0,0,SRCCOPY); dc.BitBlt(cx3,cy3,mWidth,mHeight,&ppDC,0,0,SRCCOPY); dc.BitBlt(cx4,cy4,mWidth,mHeight,&ppDC,0,0,SRCCOPY); ppDC.SelectObject(m-OldBap); void CBlocksView:CalcStatus()/方塊坐標(biāo)->行列數(shù) i1=(cy1-ulPosy-frmwidth)/mHeight;j1=( cx1-ulPosx-frmwidth)/mWidth;同樣可得i2-i4,j2-j4。 有了二維數(shù)組的概念以后,我們很容易進(jìn)行一行填滿與否的判斷,只要掃描二維數(shù)組的各元素,如果一行的所有元素都等于1,則此行填滿,予以消除,然后將此行以上各行狀態(tài)依次下移,注意:如果相鄰兩行都填滿時(shí),要多處理一次(程序中的i+很重要)代碼如下: void CBlocksView:DetectFill()/判斷此行是否填滿 CClientDC dc(this); CBrush whiteBrush(RGB(255,255,255), ;CDC ppDC; CBitmap Bmp; Bmp.LoadBitmap (ID-101);ppDC,CreateCompatibleDC(&dc); CBitmap*m-OldBmp=ppDC.SelectObject(&Bmp); for(int i=19;i>=0;i-)BOOL IsFilled=TURE;for(int j=0;j=1;k-)for(int l=0;l<=15;l+) array=array; for(int n=1;n<=i;n+)for(int m=0;m<=15;m+)if (array=1) dc.BitBlt(m*mWidth+ulPosx+frmwidth,n*mHeight+ulPosy+frmwidth,mWidth,mHeight,&ppDC,0,0,SRCCOPY); elseCRect rect(m*mWidth+ulPosx+frmwidth+mWidth, n*mHeight+ulPosy+frmwidth+mHeight), dc.FillRect(&rect,&whiteBrush); i+;ppDC,SelectObject(m-OldBmp); 可以看出,在程序的開發(fā)處理中,二維數(shù)組起到至關(guān)重要的作用,我們通過控制二維數(shù)組元素的值來達(dá)到控制方塊的目的,無論是障礙判斷、行滿判斷還是左右移動(dòng)都可以借助于它。當(dāng)然,二維數(shù)組并不是唯一可行的算法,而且顯得計(jì)算有些繁瑣,本文僅是借這個(gè)家喻戶曉的游戲的編程來加深讀者對(duì)二維數(shù)組的理解,而并不希望在程序的編寫上局限于它。 參考文獻(xiàn): 【1】 程序設(shè)計(jì)基礎(chǔ)教程-C語言版,馮山 主編,馬廷淮副主編,科學(xué)出版社 【2】 C+中二維數(shù)組與指針關(guān)系的剖析,丁衛(wèi)平等,南通工學(xué)院學(xué)報(bào) 【3】 C語言教程,譚浩強(qiáng) 主編,清華大學(xué)出版社

注意事項(xiàng)

本文(二維數(shù)組在俄羅斯方塊游戲編程中的應(yīng)用)為本站會(huì)員(冷***)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!