c++俄羅斯方塊程序?qū)嵙?xí)報(bào)告_第1頁(yè)
c++俄羅斯方塊程序?qū)嵙?xí)報(bào)告_第2頁(yè)
c++俄羅斯方塊程序?qū)嵙?xí)報(bào)告_第3頁(yè)
c++俄羅斯方塊程序?qū)嵙?xí)報(bào)告_第4頁(yè)
c++俄羅斯方塊程序?qū)嵙?xí)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

程序?qū)嵙?xí)報(bào)告學(xué)號(hào):姓名:專(zhuān)業(yè):班級(jí):指導(dǎo)教師:通信與電子工程學(xué)院7月5日

項(xiàng)目實(shí)習(xí)過(guò)程程序?qū)嵙?xí)報(bào)告總分指導(dǎo)教師簽字分?jǐn)?shù)實(shí)習(xí)報(bào)告一窗口程序基本練習(xí)實(shí)習(xí)時(shí)間:6月25日地點(diǎn):207機(jī)房實(shí)習(xí)過(guò)程:理解Windows窗口程序的基本狀況。我們這里的Windows窗口的建立需要在VC++的環(huán)境里實(shí)現(xiàn),因此就需要VisualC++Windows程序的兩種方式去得到我們需要的新建的windows窗口。:2.窗口程序運(yùn)行的過(guò)程以下:得到應(yīng)用程序的句柄注冊(cè)窗口類(lèi)(RegisterClassEx)建立窗口(CreateWindowEx)顯示窗口(ShowWindows)刷新窗口客戶(hù)區(qū)(UpdateWindow)進(jìn)入無(wú)限的消息獲取和解決的循環(huán)(GetMessageDispatchMessage)。3調(diào)試運(yùn)行。調(diào)試的成果是出現(xiàn)一種windows的窗口。實(shí)習(xí)成果:通過(guò)學(xué)習(xí)老師給的這個(gè)程序代碼,懂得了在建立一種窗口的時(shí)候所必需的某些程序代碼。剛開(kāi)始的時(shí)候得到的運(yùn)行成果是一種和其它同窗同樣的窗口,在分析了這些代碼的意義之后,通過(guò)自己的改編,能夠得到一種自己需要的長(zhǎng)度高度的窗口。這為接下來(lái)的實(shí)驗(yàn)打下了基礎(chǔ)。實(shí)習(xí)報(bào)告二消息驅(qū)動(dòng)程序練習(xí)實(shí)習(xí)時(shí)間:6月26日。地點(diǎn):207機(jī)房。實(shí)習(xí)過(guò)程:在實(shí)習(xí)一的基礎(chǔ)上,學(xué)習(xí)繪制某些簡(jiǎn)樸的圖形。調(diào)試?yán)蠋熃o的程序代碼,并學(xué)習(xí)代碼。在理解的基礎(chǔ)上,變化所給的方塊的大小形狀顏色位置等。由于最后的任務(wù)是編寫(xiě)俄羅斯方塊的程序,因此就在老師所給的這些方塊的基礎(chǔ)上通過(guò)自己的研究,繪制了俄羅斯方塊游戲中的七種不同的形狀。將下列的程序進(jìn)行改編voidRect(COLORREFcrColor){ inti,j; for(i=0;i<20;i++) for(j=0;j<20;j++) SetPixel(hdc,X*20+j,Y*20+i,crColor);改編的程序以下voidRect(COLORREFcrColor){ inti,j; for(i=0;i<20;i++) for(j=0;j<20;j++) SetPixel(hdc,X*20+j,Y*20+i,crColor); for(i=21;i<41;i++) for(j=0;j<20;j++) SetPixel(hdc,X*20+j,Y*20+i,crColor);for(i=42;i<62;i++) for(j=0;j<20;j++)SetPixel(hdc,X*20+j,Y*20+i,crColor); for(i=63;i<83;i++) for(j=0;j<20;j++)SetPixel(hdc,X*20+j,Y*20+i,crColor);}得到的是俄羅斯方塊中的四個(gè)一排的圖形。以這類(lèi)推,能夠得到其它的圖形。實(shí)習(xí)成果:對(duì)實(shí)習(xí)一的窗口程序更加純熟的掌握。同時(shí)掌握了消息驅(qū)動(dòng)程序的基本構(gòu)造。并且等夠運(yùn)用SetPixel(hdc,x,y,crColor)TextOut(hdc,x,y,Str,StrLen)ReleaseDC(hwnd,hdc)等函數(shù)。變化方塊的顏色大小位置。方塊的下移是是用背景顏色白色覆蓋了原來(lái)的,通過(guò)控制鍵盤(pán),方快達(dá)成的新的位置顯示的還是原來(lái)的顏色。在用變化顏色的函數(shù)RGB(x,y,z)時(shí),我發(fā)現(xiàn)能夠打開(kāi)畫(huà)圖程序,通過(guò)選用自己喜歡的顏色對(duì)應(yīng)的三個(gè)數(shù)字來(lái)變化我們所繪制的圖形顏色。在這個(gè)過(guò)程中我明白了某些函數(shù)的用處,最重要的是我明白了不停探求新事物的重要性以及它帶來(lái)的愉快。實(shí)習(xí)報(bào)告三俄羅斯方塊實(shí)習(xí)時(shí)間:6月26日—7月5日地點(diǎn):207機(jī)房實(shí)習(xí)過(guò)程:試圖運(yùn)用在之前兩個(gè)實(shí)習(xí)中學(xué)會(huì)的窗口建立和圖形繪制來(lái)編寫(xiě)俄羅斯方塊的程序。并且在2實(shí)驗(yàn)的中繪制了俄羅斯方塊的七種圖形。在編寫(xiě)的過(guò)程中發(fā)現(xiàn)碰到困難,從網(wǎng)上查詢(xún)了某些優(yōu)秀的作品,起初在編譯的過(guò)程中,發(fā)現(xiàn)有34個(gè)錯(cuò)誤。運(yùn)用自己所學(xué)習(xí)的c語(yǔ)言的知識(shí),修改了這個(gè)程序代碼,使得程序能夠運(yùn)行。這個(gè)程序原來(lái)的背景色是黑色,又有格子線,我發(fā)現(xiàn)方塊在下落的時(shí)候會(huì)有移動(dòng)過(guò)的軌跡。猜想是兩種顏色疊加出現(xiàn)了新的顏色,因此我就將背景顏色變化為白色,這樣網(wǎng)格線也不能顯示,看上去整潔某些,并且也沒(méi)有下落的痕跡,這樣方塊就像是真的是在“下落”。這個(gè)程序中的方塊下落的速度非???,影響游戲的進(jìn)行。在查閱了資料以及跟同窗談?wù)撝笳业搅丝刂品綁K下落速度的函數(shù)SetTimer(hwnd,4,300,NULL);通過(guò)變化第三個(gè)數(shù)的大小來(lái)變化方塊自動(dòng)下落的速度。這個(gè)程序存原來(lái)在游戲的進(jìn)行中,沒(méi)有分?jǐn)?shù)等級(jí)的變化。在通過(guò)查閱資料和老師的解說(shuō)后,我明白了TextOut()函數(shù)中若是輸出字符或者是數(shù)字的話,只能輸出一種不變化的字符。在老師的指導(dǎo)下,在程序中加入了一種函數(shù)itoa(),并設(shè)立了全局變量分?jǐn)?shù)和等級(jí),并將它們放入數(shù)組之中,以下:staticintscore=0; charp[10]; staticintlevel=0; chars[10]并且在判斷函數(shù)與否下移的時(shí)候在循環(huán)中加上分?jǐn)?shù)和等級(jí),使得分?jǐn)?shù)和等級(jí)能夠變化,具體的程序以下:if(!lines) {for(j=1;j<W-7;j++) for(k=i;k>=top;k--) cells[j][k]=cells[j][k-1]; top++; score+=100;level=score/1000;}最后再使用TextOut()函數(shù)時(shí),就能夠得到了變化的分?jǐn)?shù)和等級(jí)。數(shù)據(jù)構(gòu)造、流程圖和必要的算法描述:該程序的數(shù)據(jù)的構(gòu)造:程序需要的基本數(shù)據(jù)。如建立窗口時(shí)的窗口位置,窗口寬度以及高度。繪制的游戲區(qū)于非游戲區(qū)的方格數(shù)等。程序過(guò)程中的數(shù)據(jù)存儲(chǔ)和調(diào)用。如分?jǐn)?shù),等級(jí),寄存圖形的三個(gè)數(shù)組等。運(yùn)用函數(shù)過(guò)程中的數(shù)據(jù),及多個(gè)函數(shù)的使用。數(shù)據(jù)的邏輯構(gòu)造(通過(guò)數(shù)據(jù)邏輯構(gòu)造的描述,顯示函數(shù)與函數(shù)之間調(diào)用關(guān)系、功效實(shí)現(xiàn)與函數(shù)使用的關(guān)系、消息發(fā)送與功效實(shí)現(xiàn)的關(guān)系、各功效實(shí)現(xiàn)之間先后實(shí)現(xiàn)、可能平行實(shí)現(xiàn)、必須平行實(shí)現(xiàn)的關(guān)系。)創(chuàng)立繪制窗口顯示方格方格移動(dòng)判斷某行與否被占滿(mǎn),行的消除下落,障礙判斷分?jǐn)?shù)等級(jí)的累積和變化這些模塊的功效實(shí)現(xiàn)都是由函數(shù)去執(zhí)行的。因此模塊之間是先后次序,而實(shí)現(xiàn)模塊則需要對(duì)應(yīng)函數(shù)與之平行實(shí)現(xiàn)。與此同時(shí),消息應(yīng)在程序的開(kāi)頭或模塊的開(kāi)頭發(fā)送。游戲開(kāi)始初始化游戲開(kāi)始初始化注冊(cè)窗口繪制游戲區(qū)非游戲區(qū)與否可下列落與否消行與否按下控制鍵產(chǎn)生隨機(jī)方塊左右下上與否能移位左右移位加速下落能否變形消行記分游戲結(jié)束變化形狀與否充滿(mǎn)游戲區(qū)否是是是否否是是 否否 是是重要的算法描述游戲界面羅斯方塊的游戲界面涉及游戲區(qū)域邊框、下落方塊繪制、右部計(jì)分和預(yù)覽圖顯示等。游戲區(qū)域邊框的繪制比較簡(jiǎn)樸,循環(huán)中擬定光標(biāo)的位置輸出特定字符,即可完畢邊框繪制。游戲區(qū)方塊的繪制,循環(huán)從數(shù)據(jù)數(shù)組中依次讀出數(shù)據(jù),根據(jù)讀到的數(shù)據(jù)顯示“□”,最后構(gòu)成方塊的形狀,完畢方塊的繪制。計(jì)分和預(yù)覽圖部分先畫(huà)出一種矩形區(qū)域,然后控制光標(biāo)在其中顯示分?jǐn)?shù)、等級(jí)、預(yù)覽圖和提示信息。方塊顯示運(yùn)用函數(shù)DrawRact()畫(huà)正方形。通過(guò)環(huán)境句柄和正方形的四角坐標(biāo)來(lái)擬定正方形的形狀。運(yùn)用函數(shù)DrawCell()來(lái)畫(huà)方格。通過(guò)設(shè)備環(huán)境句柄和方格的四角坐標(biāo)來(lái)擬定方格。最后用reateSolidBrush()函數(shù)來(lái)擬定方格的顏色。運(yùn)用數(shù)組org[][]顯示初始化的圖形,org2[][]表達(dá)在顯示下一種圖形里的圖形。變化的圖形用數(shù)組block[][]表達(dá)。運(yùn)用隨機(jī)函數(shù)rand()來(lái)產(chǎn)生七個(gè)隨機(jī)數(shù),分別是從0到6,代表七種不同的形狀。 srand((unsigned)time(NULL)); sel=rand()%7; switch(sel) { case0: //▓▓ //▓▓ org[0][0]=block[0][0]=5;org[0][1]=block[0][1]=0; org[1][0]=block[1][0]=6;org[1][1]=block[1][1]=0; org[2][0]=block[2][0]=5;org[2][1]=block[2][1]=1; org[3][0]=block[3][0]=6;org[3][1]=block[3][1]=1; for(i=0;i<4;i++) { org2[i][0]=org[i][0]+11; org2[i][1]=org[i][1]+5; } break; case1: //▓▓▓▓ org[0][0]=block[0][0]=4;org[0][1]=block[0][1]=0; org[1][0]=block[1][0]=5;org[1][1]=block[1][1]=0; org[2][0]=block[2][0]=6;org[2][1]=block[2][1]=0; org[3][0]=block[3][0]=7;org[3][1]=block[3][1]=0; for(i=0;i<4;i++) { org2[i][0]=org[i][0]+11; org2[i][1]=org[i][1]+5; } break; case2: //▓ //▓▓ //▓ org[0][0]=block[0][0]=5;org[0][1]=block[0][1]=0; org[1][0]=block[1][0]=5;org[1][1]=block[1][1]=1; org[2][0]=block[2][0]=6;org[2][1]=block[2][1]=1; org[3][0]=block[3][0]=6;org[3][1]=block[3][1]=2; for(i=0;i<4;i++) { org2[i][0]=org[i][0]+11; org2[i][1]=org[i][1]+5; } break; case3: //▓ //▓▓ //▓ org[0][0]=block[0][0]=6;org[0][1]=block[0][1]=0; org[1][0]=block[1][0]=6;org[1][1]=block[1][1]=1; org[2][0]=block[2][0]=5;org[2][1]=block[2][1]=1; org[3][0]=block[3][0]=5;org[3][1]=block[3][1]=2; for(i=0;i<4;i++) { org2[i][0]=org[i][0]+11; org2[i][1]=org[i][1]+5; } break; case4: //▓ //▓ //▓▓ org[0][0]=block[0][0]=5;org[0][1]=block[0][1]=0; org[1][0]=block[1][0]=5;org[1][1]=block[1][1]=1; org[2][0]=block[2][0]=5;org[2][1]=block[2][1]=2; org[3][0]=block[3][0]=6;org[3][1]=block[3][1]=2; for(i=0;i<4;i++) { org2[i][0]=org[i][0]+11; org2[i][1]=org[i][1]+5; } break; case5: //▓ //▓ //▓▓ org[0][0]=block[0][0]=5;org[0][1]=block[0][1]=0; org[1][0]=block[1][0]=5;org[1][1]=block[1][1]=1; org[2][0]=block[2][0]=5;org[2][1]=block[2][1]=2; org[3][0]=block[3][0]=4;org[3][1]=block[3][1]=2; for(i=0;i<4;i++) { org2[i][0]=org[i][0]+11; org2[i][1]=org[i][1]+5; } break; case6: //▓ //▓▓▓ org[0][0]=block[0][0]=5;org[0][1]=block[0][1]=0; org[1][0]=block[1][0]=4;org[1][1]=block[1][1]=1; org[2][0]=block[2][0]=5;org[2][1]=block[2][1]=1; org[3][0]=block[3][0]=6;org[3][1]=block[3][1]=1; for(i=0;i<4;i++) { org2[i][0]=org[i][0]+11; org2[i][1]=org[i][1]+5; } SendMessage(hwnd,MS_NEXTBLOCK,0,0); break; default: SendMessage(hwnd,MS_NEWBLOCK,0,0); SendMessage(hwnd,MS_NEXTBLOCK,0,0); break;}圖形移動(dòng)圖形的左右以及下移動(dòng)比較簡(jiǎn)樸,是通過(guò)用cover()函數(shù)來(lái)覆蓋之前的圖形,再用block顯示變化過(guò)的圖形,通過(guò)對(duì)坐標(biāo)的增減1來(lái)實(shí)現(xiàn)每按一次下左右鍵來(lái)使得圖形的位置發(fā)生變化。以下:switch((int)wParam) { caseVK_LEFT: for(i=0;i<4;i++) block[i][0]--; break; caseVK_RIGHT: for(i=0;i<4;i++) block[i][0]++; break; caseVK_DOWN: for(i=0;i<4;i++) block[i][1]++; break;方塊變形 方塊的變形稍顯復(fù)雜,通過(guò)鍵盤(pán)的上鍵控制。變形的圖形事實(shí)上是在每一種圖形能夠變化的全部狀況。具體實(shí)現(xiàn)的算法過(guò)程以下:caseVK_UP: r=1; flag++;//【方塊】旋轉(zhuǎn)加1 switch(sel)//sel代表現(xiàn)在【方塊】的形狀 { case0:break; case1: flag=flag%2; for(i=0;i<4;i++) { block[i][(flag+1)%2]=org[2][(flag+1)%2]; block[i][flag]=org[2][flag]-2+i; } break; case2: flag=flag%2; if(flag) {block[0][1]+=2;block[3][0]-=2;} else {block[0][1]-=2;block[3][0]+=2;} break; case3: flag=flag%2; if(flag) {block[0][1]+=2;block[3][0]+=2;} else {block[0][1]-=2;block[3][0]-=2;} break; case4: flag=flag%4; switch(flag) {case0: block[2][0]+=2;block[3][0]+=2; block[2][1]+=1;block[3][1]+=1; break; case1: block[2][0]+=1;block[3][0]+=1; block[2][1]-=2;block[3][1]-=2; break; case2: block[2][0]-=2;block[3][0]-=2; block[2][1]-=1;block[3][1]-=1; break; case3: block[2][0]-=1;block[3][0]-=1; block[2][1]+=2;block[3][1]+=2; break; } break; case5: flag=flag%4; switch(flag) { case0: block[2][0]+=1;block[3][0]+=1; block[2][1]+=2;block[3][1]+=2; break; case1: block[2][0]+=2;block[3][0]+=2; block[2][1]-=1;block[3][1]-=1; break; case2: block[2][0]-=1;block[3][0]-=1; block[2][1]-=2;block[3][1]-=2; break; case3: block[2][0]-=2;block[3][0]-=2; block[2][1]+=1;block[3][1]+=1; break; } break; case6: flag=flag%4; switch(flag) { case0: block[0][0]++;block[0][1]--; block[1][0]--;block[1][1]--; block[3][0]++;block[3][1]++; break; case1: block[1][0]++;block[1][1]++;break; case2: block[0][0]--;block[0][1]++;break; case3: block[3][0]--;block[3][1]--;break; } break; } break;}障礙判斷障礙判斷,就是在方塊運(yùn)動(dòng)中或者變形中判斷周邊與否有障礙妨礙下落、移位、變形。當(dāng)方塊下落碰到下面有方塊或者達(dá)成下邊界則應(yīng)停止下落并統(tǒng)計(jì)數(shù)據(jù),存入背景數(shù)據(jù)數(shù)組。變形時(shí)應(yīng)判斷這個(gè)變形與否能夠進(jìn)行,如果有障礙則不能變形。例如當(dāng)方塊達(dá)成右邊界,而若變形則會(huì)越過(guò)邊界,那么這個(gè)變形的命令是不應(yīng)執(zhí)行的。全部這些判斷都由if(!=lines)來(lái)判斷。 top=H-1; //將第一列和最后一列【方格】置1,控制【方塊】不超出游戲區(qū)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論