版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 i戢州師范大學科學院:數(shù)計學院班級:13級數(shù)媒班學號:姓名: 摘要關鍵字第一部分設計總概摘要一、設計目的二、設計要求三、設計內(nèi)容四、系統(tǒng)分析與設計第二部分數(shù)據(jù)結構設計第三部分功能實現(xiàn)與程序調試.第四部分完成設計一、實習日記二、實習總結三、教師評語四、程序使用說明書第一部分設計總概一、設計目的二、設計要求三、設計內(nèi)容第二部分數(shù)據(jù)結構設計第三部分功能實現(xiàn)與程序調試第四部分完成設計一、實習日記二、實習總結三、教師評語;設計成績:指導老師簽名:摘要使用C語言編寫一個俄羅斯方塊游戲系統(tǒng),要求程序運行后有一個圖形用戶界面,實現(xiàn)各種方塊的生產(chǎn),包括形狀和顏色等信息,完成左右下旋轉的功能,在消行的同時分數(shù)加
2、10,在點擊暫停或者按下空格的時候暫?;蜷_始游戲,最后結束游戲.關鍵字:音樂、背景、按鍵控制、暫停、繼續(xù)、停止,難度級別第一部分設計總概一、設計目的:本課程設計是一個綜合性的實踐教學環(huán)節(jié),目的在于促進學生復習和鞏固計算機軟件設計知識,加深對軟件設計方法、軟件設計技術和設計思想的理解,并能運用所學知識進行開發(fā)。希望通過本課程設計中簡單系統(tǒng)的開發(fā),使學生掌握軟件設計的基本方法和基本流程,提高自己的綜合應用能力。二、設計要求利用C+編寫俄羅斯方塊游戲,使俄羅斯游戲能夠在MicrosoftVisualC+6.0上運行該游戲。二、設計內(nèi)容:俄羅斯方塊(1)游戲等級:游戲分為難中易三個等級,等級越高,方塊
3、下落速度越快;(2)由方向鍵控制游戲:上鍵控制方塊變形、下鍵控制方塊下移并判斷是否有消行、左鍵控制方塊左移、右鍵控制方塊右移;(3)游戲積分:一次性消的行數(shù)越多加的分數(shù)越多,當達到一定分數(shù)自動提高一個游戲等級。三、系統(tǒng)分析與設計1.程序功能模塊:依羅斯方抉游就縣示池找!=熄TJ姑億窗口和游戲Z2.程序流程圖:第二部分數(shù)據(jù)結構設計1.游戲需求隨機給出不同的形狀(長條形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充給定的區(qū)域,若填滿一條便消掉,記分,當達到一定的分數(shù)時,過關,每關方塊下落的速度不同,若在游戲中各形狀填滿了給定區(qū)域,為輸者。2.游戲界面需求:良好的用戶界面,以鍵盤操作,有
4、關數(shù)顯示和分數(shù)顯示。讓方塊在一定的區(qū)域內(nèi)運動和變形,并且顯示下一個即將出現(xiàn)的方塊。3.游戲形狀(方塊)需求:良好的方塊形狀設計,繪制七種常見的基本圖形(長條形、Z字形、反Z形、田字形、7字形、反7形、T字型),各個方塊要能實現(xiàn)它的變形,可設為順時針或逆時針變形,一般為逆時針。第三部分功能實現(xiàn)與程序調試程序:/testBlock.cpp:Definestheentrypointfortheapplication./#defineCreateWindowCreateWindowA#includestdafx.h#includeresource.h#includemmsystem.h/PlaySou
5、nd函數(shù)的頭文件#pragmacomment(lib,WINMM.LIB)#includecommctrl.h#pragmacomment(lib,comctl32.lib)#includewindows.h#includecommctrl.hHMENUhMenu;/菜單句柄#defineIDM_NEW40001#defineIDM_PAUSE40002/#defineIDM_STOP40003#defineIDM_HELP40008#defineIDM_MUSIC40010#defineIDM_LEFT1001#defineIDM_RIGHT1002#defineIDM_UP1003#def
6、ineIDM_DOWN1004#defineIDC_RADIO11005#defineIDC_RADIO21006#defineCOLOR_BTNFACE15#defineMAX_LOADSTRING100#defineTIMER_DROP_ID1intc=0,contin=1;intcnext=0;intch1=0;intch2=0;intch3=1;intmusic=0;BOOLbMusicOn;/音樂開關intiMusicBG;/背景音樂canRotate(intrank);BOOLCALLBACKMusicDlgProc(HWND,UINT,WPARAM,LPARAM);voidTet
7、risMusic(BOOL);voidMusicItem(int);staticTBBUTTONtbButtons=0,IDC_JIXU,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-11,IDC_PAUSE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1,2,IDM_STOP,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-10,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1,3,IDM_MUSIC,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1,4,IDM_H
8、ELP1,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1,0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1,5,IDM_ABOUT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1,;/工具欄數(shù)據(jù)結構structBlockPOINTa;POINTb;POINTc;POINTd;/方塊模型數(shù)據(jù)結構staticBlockTetris74=/(1)0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,/(2)0,0,1,0,1,1,2,1,1,0
9、,1,1,0,1,0,2,0,0,1,0,1,1,2,1,1,0,1,1,0,1,0,2,/(2)1,0,2,0,0,1,1,1,0,0,0,1,1,1,1,2,1,0,2,0,0,1,1,1,0,0,0,1,1,1,1,2,/(2)0,0,1,0,2,0,3,0,1,0,1,1,1,2,1,3,0,0,1,0,2,0,3,0,1,0,1,1,1,2,1,3,/(4)1,0,0,1,1,1,2,1,0,0,0,1,1,1,0,2,0,0,1,0,2,0,1,1,1,0,0,1,1,1,1,2,/(4)0,0,0,1,1,1,2,1,0,0,1,0,0,1,0,2,0,0,1,0,2,0,2,1
10、,1,0,1,1,0,2,1,2,/(4)2,0,0,1,1,1,2,1,0,0,0,1,0,2,1,2,0,0,1,0,2,0,0,1,0,0,1,0,1,1,1,2;/七種方塊全部變形數(shù)據(jù)結構intx=4;/以方塊為單位inty=-1;intnBlockAreaX=10;/背景窗口intnBlockAreaY=30;intBlockMatrix1910;intnBlockKind=0;intnBlockColor=0;intnBlockState=0;intnBlockAreaXnext二220;/顯示窗口intnBlockAreaYnext=37;intBlockMatrixnext86
11、;intnBlockKindnext=0;intnBlockColornext=0;intnBlockStatenext=0;intgamescore=0;BOOLBGame=FALSE;BOOLbGOver=FALSE;HWNDhWnd;HDChdc;HDChMemDC=NULL;HDChWndDC=NULL;/GlobalVariables:currentHINSTANCEhInst;/instanceTCHARszTitleMAX_LOADSTRING;/ThetitlebartextTCHARszWindowClassMAX_LOADSTRING;/ThetitlebartextHBI
12、TMAPbmp999=0;/Fowarddeclarationsoffunctionsincludedinthiscodemodule:ATOMMyRegisterClass(HINSTANCEhInstance);BOOLInitInstance(HINSTANCE,int);LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);LRESULTCALLBACKAbout(HWND,UINT,WPARAM,LPARAM);voidDrawTetris(HDChdc,intoffsetX/*0*/,intoffsetY/*0*/,intrank/*nou
13、se*/);voidTools(HWNDhWnd);LoadImage();voidGameStart();voidDrawNext(HDChdc);voidGameOver();voidDrawButton(LPARAMlParam);LPARAMlParam;intAPIENTRYWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow)/TODO:Placecodehere.MSGmsg;HACCELhAccelTable;/InitializeglobalstringsLoadString(
14、hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING);LoadString(hInstance,IDC_TESTBLOCK,szWindowClass,MAX_LOADSTRING);MyRegisterClass(hInstance);FILE*fp=NULL;/charch50;fp=fopen(test.txt,r);fgets(ch,523,fp);ch1=atoi(ch);fclose(fp);/Performapplicationinitialization:if(!InitInstance(hInstance,nCmdShow)retur
15、nFALSE;hAccelTable=LoadAccelerators(hInstance,(LPCTSTR)IDC_TESTBLOCK);charfileName100=0;/res1.bmpfor(inti=0;i9;i+)sprintf(fileName,res%d.bmp,i+1);bmpi=(HBITMAP)LoadImage(NULL,fileName,0,0,0,LR_LOADFROMFILE);/LOADIMAGEFROMFILEfor(i=0;i=18;i+)for(intj=0;j=9;j+)BlockMatrixij=-1;for(intm=0;m=5;m+)for(in
16、tn=0;n=5;n+)BlockMatrixnextmn=-1;/beijinginta=1000;SetTimer(hWnd,TIMER_DROP_ID,a,NULL);hWndDC=GetDC(hWnd);hMemDC=CreateCompatibleDC(NULL);/Mainmessageloop:Tools(hWnd);while(GetMessage(&msg,NULL,0,0)if(!TranslateAccelerator(msg.hwnd,hAccelTable,&msg)TranslateMessage(&msg);DispatchMessage(&msg);return
17、msg.wParam;ATOMMyRegisterClass(HINSTANCEhInstance)WNDCLASSEXwcex;wcex.cbSize=sizeof(WNDCLASSEX);wcex.style=wcex.lpfnWndProc=wcex.cbClsExtrawcex.cbWndExtraCS_HREDRAW|CS_VREDRAW;(WNDPROC)WndProc;=0;=0;LoadIcon(hInstance,wcex.hInstance=hInstancewcex.hIcon=(LPCTSTR)IDI_ICON1);wcex.hCursor=LoadCursor(NUL
18、L,IDC_ARROW);wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+2);wcex.lpszMenuName=MAKEINTRESOURCE(IDC_TESTBLOCK);wcex.lpszClassName=szWindowClass;wcex.hIconSm=LoadIcon(wcex.hInstance,MAKEINTRESOURCE(IDI_ICON1);returnRegisterClassEx(&wcex);BOOLInitInstance(HINSTANCEhInstance,intnCmdShow)hInst=hInstance;/Sto
19、reinstancehandleinourglobalvariablehWnd=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,200,350,485,NULL,NULL,hlnstance,NULL);/窗口大小設置if(!hWnd)returnFALSE;ShowWindow(hWnd,nCmdShow);UpdateWindow(hWnd);returnTRUE;LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam
20、)intwmId,wmEvent;PAINTSTRUCTps;HDChdc;TCHARszHelloMAX_LOADSTRING;LoadString(hInst,IDS_HELLO,szHello,MAX_LOADSTRING);switch(message)caseWM_COMMAND:wmId=LOWORD(wParam);wmEvent=HIWORD(wParam);/Parsethemenuselections:switch(wmId)caseIDM_UP:SendMessage(hWnd,WM_KEYDOWN,VK_UP,0);SetFocus(hWnd);break;caseID
21、M_DOWN:SendMessage(hWnd,WM_KEYDOWN,VK_DOWN,0);SetFocus(hWnd);break;caseIDM_RIGHT:SendMessage(hWnd,WM_KEYDOWN,VK_RIGHT,0);SetFocus(hWnd);break;caseIDM_LEFT:SendMessage(hWnd,WM_KEYDOWN,VK_LEFT,0);SetFocus(hWnd);break;caseIDM_START:InvalidateRect(hWnd,0,1);GameStart();break;break;/開始按鍵caseIDC_PAUSE:/暫停
22、BGame=FALSE;MessageBox(NULL,你好,游戲暫停,暫停,MB_OK);break;caseIDC_JIXU:/繼續(xù)if(contin!=0)BGame=TRUE;break;caseIDM_STOP:/停止BGame=FALSE;GameOver();break;caseIDC_easy:InvalidateRect(hWnd,0,0);ch3=1;MessageBox(NULL,你好,你選擇的難易程度為簡單,簡單,MB_OK);SetTimer(hWnd,TIMER_DROP_ID,1000,NULL);break;caseIDC_normal:InvalidateRe
23、ct(hWnd,0,0);ch3=2;MessageBox(NULL,你好,你選擇的難易程度為一般,一般,MB_OK);SetTimer(hWnd,TIMER_DROP_ID,500,NULL);break;caseIDC_difficult:MessageBox(NULL,你好,你選擇的難易程度為困難,困難,MB_OK);ch3=3;InvalidateRect(hWnd,0,0);SetTimer(hWnd,TIMER_DROP_ID,100,NULL);break;caseIDM_beijing:SelectObject(hMemDC,bmp8);BitBlt(hWndDC,0,20,2
24、000,2000,hMemDC,0,0,SRCCOPY);InvalidateRect(hWnd,0,0);/重繪/InvalidateRect(hwnd,NULL,false);重畫時不擦除背景break;caseIDM_ABOUT:DialogBox(hInst,MAKEINTRESOURCE(IDD_HELP1),hWnd,(DLGPROC)About);break;caseIDM_HELP1:DialogBox(hInst,MAKEINTRESOURCE(IDD_help2),hWnd,(DLGPROC)About);break;caseIDM_MUSIC:DialogBox(hIns
25、t,MAKEINTRESOURCE(IDD_MUSIC),hWnd,MusicDlgProc);break;caseIDM_music1:MusicItem(IDM_music1);break;caseIDM_music2:MusicItem(IDM_music2);break;caseIDM_musicstop:MusicItem(IDM_musicstop);break;caseIDM_EXIT:DestroyWindow(hWnd);break;default:returnDefWindowProc(hWnd,message,wParam,lParam);break;caseWM_PAI
26、NT:hdc=BeginPaint(hWnd,&ps);RECTrt;GetClientRect(hWnd,&rt);for(inti=0;i=18;i+)for(intj=0;j=9;j+)if(BlockMatrixij=-1)PatBlt(hdc,nBlockAreaX+j*20,nBlockAreaY+i*20,20,20,BLACKNESS);elseSelectObject(hMemDC,bmpBlockMatrixij);BitBlt(hdc,nBlockAreaX+j*20,nBlockAreaY+i*20,20,20,hMemDC,0,0,SRCCOPY);/Invalida
27、teRect(hWnd,0,0);for(intm=0;m=5;m+)for(intn=0;n=5;n+)if(BlockMatrixnextmn=-1)PatBlt(hdc,nBlockAreaXnext+n*20,nBlockAreaYnext+m*20,20,20,BLACKNESS);elseSelectObject(hMemDC,bmpBlockMatrixnextmn);BitBlt(hdc,nBlockAreaXnext+n*20,nBlockAreaYnext+m*20,20,20,hMemDC,0,0,SRCCOPY);DrawTetris(hWndDC,0,0,0);Dra
28、wNext(hdc);RECTrtTxt;TCHARscoreTxt100;sprintf(scoreTxt,得分:%d,gamescore);rtTxt.top=200;rtTxt.left=220;rtTxt.right=rtTxt.left+200;rtTxt.bottom=rtTxt.top+50;DrawText(hdc,scoreTxt,strlen(scoreTxt),&rtTxt,DT_LEFT);RECTrtTxt1;TCHARmaxscore100;/sprintf(maxscore,最高分:%d,ch1);rtTxt1.top=240;rtTxt1.left=220;rt
29、Txt1.right=rtTxt1.left+300;rtTxt1.bottom=rtTxt1.top+100;DrawText(hdc,maxscore,strlen(maxscore),&rtTxt1,DT_LEFT);RECTrtTxt2;TCHAReaayORdifficult100;sprintf(eaayORdifficult,難易級別:%d,ch3);rtTxt2.top=280;rtTxt2.left=220;rtTxt2.right=rtTxt2.left+200;rtTxt2.bottom=rtTxt2.top+50;DrawText(hdc,eaayORdifficult
30、,strlen(eaayORdifficult),&rtTxt2,DT_LEFT);EndPaint(hWnd,&ps);break;/計算分數(shù)caseWM_DRAWITEM:DrawButton(lParam);/繪制方向按鈕returnTRUE;caseWM_LBUTTONDOWN:break;caseWM_TIMER:DrawTetris(hWndDC,0,1,0);break;caseWM_KEYDOWN:intvirtual_code=(int)wParam;intkey_state=(int)lParam;switch(virtual_code)caseVK_RIGHT:DrawT
31、etris(hWndDC,1,0,0);break;caseVK_LEFT:DrawTetris(hWndDC,-1,0,0);break;caseVK_UP:if(canRotate(1)DrawTetris(hWndDC,0,0,1);break;caseVK_DOWN:DrawTetris(hWndDC,0,1,0);break;default:break;break;caseWM_DESTROY:PostQuitMessage(0);break;default:returnDefWindowProc(hWnd,message,wParam,lParam);return0;/Mesage
32、handlerforaboutbox.LRESULTCALLBACKAbout(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam)switch(message)caseWM_INITDIALOG:returnTRUE;caseWM_COMMAND:if(LOWORD(wParam)=IDOK|LOWORD(wParam)=IDCANCEL)EndDialog(hDlg,LOWORD(wParam);returnTRUE;break;returnFALSE;BOOLCALLBACKMusicDlgProc(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam)switch(message)caseWM_INITDIALOG:if(iMusicBG=IDR_WAVE1)CheckRadioButton(hDlg,IDC_RADIO1,IDC_RADIO3,IDC_RADIO1);if(iMusicBG=IDR_WAVE2)CheckRadioButton(hDlg,IDC_RADIO1,IDC_RADIO3,IDC_RADIO2);if(!bMusicOn)CheckRadioButton(hDlg,IDC_RADIO1,IDC_RADIO3,IDC_RADIO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 儀器儀表制造業(yè)中的技術成果轉化考核試卷
- 婚禮策劃課程的浪漫創(chuàng)意考核試卷
- 智能材料在智能手表中的應用考核試卷
- 2024河北省建筑施工合同示范文本
- 2024網(wǎng)站建設合同書范本版
- 合成材料在智能評估中的應用考核試卷
- 公共設施管理的安全與防范工作考核試卷
- 免疫學檢驗技術-流式細胞術
- 醫(yī)藥制造業(yè)的前沿技術研究考核試卷
- 哲學思維審視人性的本質考核試卷
- 2024-2030年中國油套管行業(yè)產(chǎn)銷現(xiàn)狀分析及投資可行性研究報告
- 四川公安基礎知識模擬1
- 2024年中級司泵工職業(yè)鑒定考試題庫(精練500題)
- 患者溝通技巧
- 18 牛和鵝 第一課時 課件
- 2024年宜賓人才限公司招聘高頻難、易錯點500題模擬試題附帶答案詳解
- 小學生防性侵安全教育主題班會課件
- DBT29-305-2024 天津市裝配式建筑評價標準
- 冀教版七年級數(shù)學上冊 2.6 角大小的比較(第二章 幾何圖形的初步認識 學習、上課課件)
- 創(chuàng)建“環(huán)保銀行”(教學設計)-2024-2025學年四年級上冊綜合實踐活動教科版
- 勞動教育學習通超星期末考試答案章節(jié)答案2024年
評論
0/150
提交評論