版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
程序實習匯報學號:姓名:專業(yè):班級:指導教師:通信與電子工程學院7月5日
項目實習過程程序實習匯報總分指導教師簽字分數(shù)實習匯報一窗口程序基本練習實習時間:6月25日地點:207機房實習過程:理解Windows窗口程序的基本狀況。我們這里的Windows窗口的建立需要在VC++的環(huán)境里實現(xiàn),因此就需要VisualC++Windows程序的兩種方式去得到我們需要的新建的windows窗口。:2.窗口程序運行的過程如下:得到應用程序的句柄注冊窗口類(RegisterClassEx)建立窗口(CreateWindowEx)顯示窗口(ShowWindows)刷新窗口客戶區(qū)(UpdateWindow)進入無限的消息獲取和處理的循環(huán)(GetMessageDispatchMessage)。3調試運行。調試的成果是出現(xiàn)一種windows的窗口。實習成果:通過學習老師給的這個程序代碼,懂得了在建立一種窗口的時候所必需的某些程序代碼。剛開始的時候得到的運行成果是一種和其他同學同樣的窗口,在分析了這些代碼的意義之后,通過自己的改編,可以得到一種自己需要的長度高度的窗口。這為接下來的試驗打下了基礎。實習匯報二消息驅動程序練習實習時間:6月26日。地點:207機房。實習過程:在實習一的基礎上,學習繪制某些簡樸的圖形。調試老師給的程序代碼,并學習代碼。在理解的基礎上,變化所給的方塊的大小形狀顏色位置等。由于最終的任務是編寫俄羅斯方塊的程序,因此就在老師所給的這些方塊的基礎上通過自己的研究,繪制了俄羅斯方塊游戲中的七種不一樣的形狀。將如下的程序進行改編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);}得到的是俄羅斯方塊中的四個一排的圖形。以此類推,可以得到其他的圖形。實習成果:對實習一的窗口程序愈加純熟的掌握。同步掌握了消息驅動程序的基本構造。并且等夠運用SetPixel(hdc,x,y,crColor)TextOut(hdc,x,y,Str,StrLen)ReleaseDC(hwnd,hdc)等函數(shù)。變化方塊的顏色大小位置。方塊的下移是是用背景顏色白色覆蓋了本來的,通過控制鍵盤,方快抵達的新的位置顯示的還是本來的顏色。在用變化顏色的函數(shù)RGB(x,y,z)時,我發(fā)現(xiàn)可以打開畫圖程序,通過選用自己喜歡的顏色對應的三個數(shù)字來變化我們所繪制的圖形顏色。在這個過程中我明白了某些函數(shù)的用處,最重要的是我明白了不停探求新事物的重要性以及它帶來的快樂。實習匯報三俄羅斯方塊實習時間:6月26日—7月5日地點:207機房實習過程:試圖運用在之前兩個實習中學會的窗口建立和圖形繪制來編寫俄羅斯方塊的程序。并且在2試驗的中繪制了俄羅斯方塊的七種圖形。在編寫的過程中發(fā)現(xiàn)碰到困難,從網(wǎng)上查詢了某些優(yōu)秀的作品,起初在編譯的過程中,發(fā)既有34個錯誤。運用自己所學習的c語言的知識,修改了這個程序代碼,使得程序可以運行。這個程序本來的背景色是黑色,又有格子線,我發(fā)現(xiàn)方塊在下落的時候會有移動過的軌跡。猜測是兩種顏色疊加出現(xiàn)了新的顏色,因此我就將背景顏色變化為白色,這樣網(wǎng)格線也不能顯示,看上去整潔某些,并且也沒有下落的痕跡,這樣方塊就像是真的是在“下落”。這個程序中的方塊下落的速度非常快,影響游戲的進行。在查閱了資料以及跟同學談論之后找到了控制方塊下落速度的函數(shù)SetTimer(hwnd,4,300,NULL);通過變化第三個數(shù)的大小來變化方塊自動下落的速度。這個程序存本來在游戲的進行中,沒有分數(shù)等級的變化。在通過查閱資料和老師的講解后,我明白了TextOut()函數(shù)中若是輸出字符或者是數(shù)字的話,只能輸出一種不變化的字符。在老師的指導下,在程序中加入了一種函數(shù)itoa(),并設置了全局變量分數(shù)和等級,并將它們放入數(shù)組之中,如下:staticintscore=0; charp[10]; staticintlevel=0; chars[10]并且在判斷函數(shù)與否下移的時候在循環(huán)中加上分數(shù)和等級,使得分數(shù)和等級可以變化,詳細的程序如下: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ù)和等級。數(shù)據(jù)構造、流程圖和必要的算法描述:該程序的數(shù)據(jù)的構造:程序需要的基本數(shù)據(jù)。如建立窗口時的窗口位置,窗口寬度以及高度。繪制的游戲區(qū)于非游戲區(qū)的方格數(shù)等。程序過程中的數(shù)據(jù)存儲和調用。如分數(shù),等級,寄存圖形的三個數(shù)組等。運用函數(shù)過程中的數(shù)據(jù),及多種函數(shù)的使用。數(shù)據(jù)的邏輯構造(通過數(shù)據(jù)邏輯構造的描述,顯示函數(shù)與函數(shù)之間調用關系、功能實現(xiàn)與函數(shù)使用的關系、消息發(fā)送與功能實現(xiàn)的關系、各功能實現(xiàn)之間先后實現(xiàn)、也許平行實現(xiàn)、必須平行實現(xiàn)的關系。)創(chuàng)立繪制窗口顯示方格方格移動判斷某行與否被占滿,行的消除下落,障礙判斷分數(shù)等級的累積和變化這些模塊的功能實現(xiàn)都是由函數(shù)去執(zhí)行的。因此模塊之間是先后次序,而實現(xiàn)模塊則需要對應函數(shù)與之平行實現(xiàn)。與此同步,消息應在程序的開頭或模塊的開頭發(fā)送。游戲開始初始化游戲開始初始化注冊窗口繪制游戲區(qū)非游戲區(qū)與否可如下落與否消行與否按下控制鍵產生隨機方塊左右下上與否能移位左右移位加速下落能否變形消行記分游戲結束變化形狀與否充斥游戲區(qū)否是是是否否是是 否否 是是重要的算法描述游戲界面羅斯方塊的游戲界面包括游戲區(qū)域邊框、下落方塊繪制、右部計分和預覽圖顯示等。游戲區(qū)域邊框的繪制比較簡樸,循環(huán)中確定光標的位置輸出特定字符,即可完畢邊框繪制。游戲區(qū)方塊的繪制,循環(huán)從數(shù)據(jù)數(shù)組中依次讀出數(shù)據(jù),根據(jù)讀到的數(shù)據(jù)顯示“□”,最終構成方塊的形狀,完畢方塊的繪制。計分和預覽圖部分先畫出一種矩形區(qū)域,然后控制光標在其中顯示分數(shù)、等級、預覽圖和提醒信息。方塊顯示運用函數(shù)DrawRact()畫正方形。通過環(huán)境句柄和正方形的四角坐標來確定正方形的形狀。運用函數(shù)DrawCell()來畫方格。通過設備環(huán)境句柄和方格的四角坐標來確定方格。最終用reateSolidBrush()函數(shù)來確定方格的顏色。運用數(shù)組org[][]顯示初始化的圖形,org2[][]表達在顯示下一種圖形里的圖形。變化的圖形用數(shù)組block[][]表達。運用隨機函數(shù)rand()來產生七個隨機數(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;}圖形移動圖形的左右以及下移動比較簡樸,是通過用cover()函數(shù)來覆蓋之前的圖形,再用block顯示變化過的圖形,通過對坐標的增減1來實現(xiàn)每按一次下左右鍵來使得圖形的位置發(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;方塊變形 方塊的變形稍顯復雜,通過鍵盤的上鍵控制。變形的圖形實際上是在每一種圖形可以變化的所有狀況。詳細實現(xiàn)的算法過程如下:caseVK_UP: r=1; flag++;//【方塊】旋轉加1 switch(sel)//sel代表目前【方塊】的形狀 { 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;}障礙判斷障礙判斷,就是在方塊運動中或者變形中判斷周圍與否有障礙阻礙下落、移位、變形。當方塊下落碰到下面有方塊或者抵達下邊界則應停止下落并記錄數(shù)據(jù),存入背景數(shù)據(jù)數(shù)組。變形時應判斷這個變形與否可以進行,假如有障礙則不能變形。例如當方塊到達右邊界,而若變形則會越過邊界,那么這個變形的命令是不應執(zhí)行的。所有這些判斷都由if(!=lines)來判斷。 top=H-1; //將第一列和最終一列【方格】置1,控制【方塊】不超過游戲
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第四節(jié) 給水用水量標準 第五節(jié) 給水設計流21課件講解
- 2024秋新滬粵版物理8年級上冊教學課件 1.3 長度和時間測量的應用
- 《感壓膠基礎技術》課件
- 《乳房疾病》課件
- 內蒙古烏蘭察布市集寧區(qū)2024屆九年級上學期期末考試數(shù)學試卷(含解析)
- 養(yǎng)老院老人請假審批制度
- 《電工基礎知識講解》課件
- 《創(chuàng)新的原點》課件
- 教培退款協(xié)議書(2篇)
- 《礦內空氣》課件
- word公章模板
- 北京市工作居住證續(xù)簽申請表
- 中職傳感器教學設計
- 設備驗證(IQ、OQ、PQ)文件模板
- 學生英語短劇劇本《丑小鴨》
- 積分會員管理系統(tǒng)excel表格模板
- 建筑工程團體意外傷害保險投保單
- 小學體育障礙跑教案
- 二年級體質健康數(shù)據(jù)
- 高頻電路原理與分析課后習題答案.doc
- 武漢地區(qū)區(qū)域穩(wěn)定性評價
評論
0/150
提交評論