




已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
學(xué) 院: 數(shù)計(jì)學(xué)院 班 級(jí): 13級(jí)數(shù)媒班 學(xué) 號(hào): 姓 名: 摘 要.關(guān)鍵字: 目錄第一部分 設(shè)計(jì)總概摘要一、設(shè)計(jì)目的二、設(shè)計(jì)要求三、設(shè)計(jì)內(nèi)容四、系統(tǒng)分析與設(shè)計(jì)第二部分 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)第三部分 功能實(shí)現(xiàn)與程序調(diào)試.第四部分 完成設(shè)計(jì)一、實(shí)習(xí)日記二、實(shí)習(xí)總結(jié)三、教師評(píng)語(yǔ)四、程序使用說(shuō)明書(shū).第一部分 設(shè)計(jì)總概一、設(shè)計(jì)目的二、設(shè)計(jì)要求三、設(shè)計(jì)內(nèi)容四、系統(tǒng)分析與設(shè)計(jì) 第二部分 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 第三部分 功能實(shí)現(xiàn)與程序調(diào)試第四部分 完成設(shè)計(jì)一、實(shí)習(xí)日記:二、實(shí)習(xí)總結(jié):三、教師評(píng)語(yǔ):設(shè)計(jì)成績(jī):指導(dǎo)老師簽名: 摘 要使用C語(yǔ)言編寫(xiě)一個(gè)俄羅斯方塊游戲系統(tǒng),要求程序運(yùn)行后有一個(gè)圖形用戶界面,實(shí)現(xiàn)各種方塊的生產(chǎn),包括形狀和顏色等信息,完成左右下旋轉(zhuǎn)的功能,在消行的同時(shí)分?jǐn)?shù)加10,在點(diǎn)擊暫?;蛘甙聪驴崭竦臅r(shí)候暫?;蜷_(kāi)始游戲,最后結(jié)束游戲.關(guān)鍵字:音樂(lè)、背景、按鍵控制、暫停、繼續(xù)、停止,難度級(jí)別第一部分 設(shè)計(jì)總概一、 設(shè)計(jì)目的:本課程設(shè)計(jì)是一個(gè)綜合性的實(shí)踐教學(xué)環(huán)節(jié),目的在于促進(jìn)學(xué)生復(fù)習(xí)和鞏固計(jì)算機(jī)軟件設(shè)計(jì)知識(shí),加深對(duì)軟件設(shè)計(jì)方法、軟件設(shè)計(jì)技術(shù)和設(shè)計(jì)思想的理解,并能運(yùn)用所學(xué)知識(shí)進(jìn)行開(kāi)發(fā)。希望通過(guò)本課程設(shè)計(jì)中簡(jiǎn)單系統(tǒng)的開(kāi)發(fā),使學(xué)生掌握軟件設(shè)計(jì)的基本方法和基本流程,提高自己的綜合應(yīng)用能力。二、設(shè)計(jì)要求利用C+編寫(xiě)俄羅斯方塊游戲,使俄羅斯游戲能夠在Microsoft Visual C+6.0上運(yùn)行該游戲。二、 設(shè)計(jì)內(nèi)容:俄羅斯方塊(1)游戲等級(jí):游戲分為難中易三個(gè)等級(jí),等級(jí)越高,方塊下落速度越快;(2)由方向鍵控制游戲:上鍵控制方塊變形、下鍵控制方塊下移并判斷是否有消行、左鍵控制方塊左移、右鍵控制方塊右移;(3)游戲積分:一次性消的行數(shù)越多加的分?jǐn)?shù)越多,當(dāng)達(dá)到一定分?jǐn)?shù)自動(dòng)提高一個(gè)游戲等級(jí)。三、 系統(tǒng)分析與設(shè)計(jì)1.程序功能模塊:2.程序流程圖: 第二部分 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)1.游戲需求隨機(jī)給出不同的形狀(長(zhǎng)條形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充給定的區(qū)域,若填滿一條便消掉,記分,當(dāng)達(dá)到一定的分?jǐn)?shù)時(shí),過(guò)關(guān),每關(guān)方塊下落的速度不同,若在游戲中各形狀填滿了給定區(qū)域,為輸者。2.游戲界面需求:良好的用戶界面,以鍵盤(pán)操作,有關(guān)數(shù)顯示和分?jǐn)?shù)顯示。讓方塊在一定的區(qū)域內(nèi)運(yùn)動(dòng)和變形,并且顯示下一個(gè)即將出現(xiàn)的方塊。3.游戲形狀(方塊)需求:良好的方塊形狀設(shè)計(jì),繪制七種常見(jiàn)的基本圖形(長(zhǎng)條形、Z字形、反Z形、田字形、7字形、反7形、T字型),各個(gè)方塊要能實(shí)現(xiàn)它的變形,可設(shè)為順時(shí)針或逆時(shí)針變形,一般為逆時(shí)針。第三部分 功能實(shí)現(xiàn)與程序調(diào)試程序:/ testBlock.cpp : Defines the entry point for the application./#define CreateWindow CreateWindowA#include stdafx.h#include resource.h#include/PlaySound函數(shù)的頭文件 #pragma comment(lib, WINMM.LIB)#include commctrl.h #pragma comment(lib, comctl32.lib)#include #include HMENU hMenu; /菜單句柄#define IDM_NEW 40001#define IDM_PAUSE 40002/#define IDM_STOP 40003#define IDM_HELP 40008#define IDM_MUSIC 40010#define IDM_LEFT 1001#define IDM_RIGHT 1002#define IDM_UP 1003#define IDM_DOWN 1004#define IDC_RADIO1 1005#define IDC_RADIO2 1006#define COLOR_BTNFACE 15#define MAX_LOADSTRING 100#define TIMER_DROP_ID 1int c = 0,contin=1;int cnext=0;int ch1=0;int ch2=0;int ch3=1;int music=0;BOOL bMusicOn; /音樂(lè)開(kāi)關(guān)int iMusicBG; /背景音樂(lè)canRotate( int rank);BOOL CALLBACK MusicDlgProc(HWND,UINT,WPARAM,LPARAM);void TetrisMusic(BOOL);void MusicItem(int);static TBBUTTON tbButtons =0,IDC_JIXU,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1,1,IDC_PAUSE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1,2,IDM_STOP,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1,0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1,3,IDM_MUSIC,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1,4,IDM_HELP1,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ù)結(jié)構(gòu)struct Block POINT a; POINT b; POINT c; POINT d; ; /方塊模型數(shù)據(jù)結(jié)構(gòu)static Block Tetris74 = /(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,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, 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ù)結(jié)構(gòu)int x = 4 ;/以方塊為單位int y = -1;int nBlockAreaX=10;/背景窗口int nBlockAreaY=30;int BlockMatrix1910;int nBlockKind = 0;int nBlockColor = 0;int nBlockState = 0;int nBlockAreaXnext=220;/顯示窗口int nBlockAreaYnext=37;int BlockMatrixnext86;int nBlockKindnext = 0;int nBlockColornext = 0;int nBlockStatenext = 0;int gamescore=0;BOOL BGame=FALSE;BOOL bGOver=FALSE;HWND hWnd;HDC hdc;HDC hMemDC = NULL;HDC hWndDC = NULL;/ Global Variables:HINSTANCE hInst;/ current instanceTCHAR szTitleMAX_LOADSTRING;/ The title bar textTCHAR szWindowClassMAX_LOADSTRING;/ The title bar textHBITMAP bmp999 = 0;/ Foward declarations of functions included in this code module:ATOMMyRegisterClass(HINSTANCE hInstance);BOOLInitInstance(HINSTANCE, int);LRESULT CALLBACKWndProc(HWND, UINT, WPARAM, LPARAM);LRESULT CALLBACKAbout(HWND, UINT, WPARAM, LPARAM);void DrawTetris( HDC hdc, int offsetX/*0*/, int offsetY/*0*/, int rank/*no use*/ );void Tools(HWND hWnd);LoadImage();void GameStart();void DrawNext(HDC hdc);void GameOver();void DrawButton(LPARAM lParam);LPARAM lParam;int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) / TODO: Place code here.MSG msg;HACCEL hAccelTable;/ Initialize global stringsLoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadString(hInstance, IDC_TESTBLOCK, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);FILE *fp=NULL;/char ch50;fp=fopen(test.txt,r);fgets(ch,523,fp);ch1=atoi(ch);fclose(fp);/ Perform application initialization:if (!InitInstance (hInstance, nCmdShow) return FALSE;hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_TESTBLOCK);char fileName100 = 0;/res1.bmpfor (int i = 0; i 9; 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(int j=0;j=9;j+)BlockMatrixij=-1;for(int m=0;m=5;m+)for(int n=0;n=5;n+)BlockMatrixnextmn=-1;/beijingint a=1000;SetTimer(hWnd,TIMER_DROP_ID,a,NULL);hWndDC = GetDC(hWnd);hMemDC = CreateCompatibleDC(NULL);/ Main message loop:Tools(hWnd);while (GetMessage(&msg, NULL, 0, 0) if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg) TranslateMessage(&msg);DispatchMessage(&msg);return msg.wParam;ATOM MyRegisterClass(HINSTANCE hInstance)WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX); wcex.style= CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc= (WNDPROC)WndProc;wcex.cbClsExtra= 0;wcex.cbWndExtra= 0;wcex.hInstance= hInstance;wcex.hIcon= LoadIcon(hInstance, (LPCTSTR)IDI_ICON1);wcex.hCursor= LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+2);wcex.lpszMenuName= MAKEINTRESOURCE(IDC_TESTBLOCK);wcex.lpszClassName= szWindowClass;wcex.hIconSm= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_ICON1);return RegisterClassEx(&wcex);BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) hInst = hInstance; / Store instance handle in our global variable hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 200, 350, 485, NULL, NULL, hInstance, NULL);/窗口大小設(shè)置 if (!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE;LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;TCHAR szHelloMAX_LOADSTRING;LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);switch (message) case WM_COMMAND:wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); / Parse the menu selections:switch (wmId)case IDM_UP:SendMessage(hWnd,WM_KEYDOWN,VK_UP,0);SetFocus(hWnd);break;case IDM_DOWN:SendMessage(hWnd,WM_KEYDOWN,VK_DOWN,0);SetFocus(hWnd); break;case IDM_RIGHT:SendMessage(hWnd,WM_KEYDOWN,VK_RIGHT,0);SetFocus(hWnd);break;case IDM_LEFT:SendMessage(hWnd,WM_KEYDOWN,VK_LEFT,0);SetFocus(hWnd);break;case IDM_START:InvalidateRect(hWnd,0,1);GameStart(); break;break;/開(kāi)始按鍵case IDC_PAUSE:/暫停 BGame=FALSE; MessageBox(NULL, 你好,游戲暫停, 暫停, MB_OK); break; case IDC_JIXU:/繼續(xù)if(contin!=0)BGame=TRUE;break;case IDM_STOP:/停止BGame=FALSE; GameOver();break;case IDC_easy: InvalidateRect(hWnd,0,0);ch3=1;MessageBox(NULL, 你好,你選擇的難易程度為簡(jiǎn)單, 簡(jiǎn)單, MB_OK);SetTimer(hWnd,TIMER_DROP_ID,1000,NULL);break;case IDC_normal:InvalidateRect(hWnd,0,0);ch3=2;MessageBox(NULL, 你好,你選擇的難易程度為一般, 一般, MB_OK);SetTimer(hWnd,TIMER_DROP_ID,500,NULL); break; case IDC_difficult:MessageBox(NULL, 你好,你選擇的難易程度為困難, 困難, MB_OK); ch3=3;InvalidateRect(hWnd,0,0);SetTimer(hWnd,TIMER_DROP_ID,100,NULL); break; case IDM_beijing:SelectObject(hMemDC,bmp8);BitBlt(hWndDC,0,20,2000,2000,hMemDC,0,0,SRCCOPY);InvalidateRect(hWnd,0,0);/重繪/InvalidateRect(hwnd, NULL, false);重畫(huà)時(shí)不擦除背景break;case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_HELP1), hWnd, (DLGPROC)About); break; case IDM_HELP1: DialogBox(hInst, MAKEINTRESOURCE(IDD_help2), hWnd, (DLGPROC)About); break; case IDM_MUSIC:DialogBox(hInst,MAKEINTRESOURCE(IDD_MUSIC),hWnd,MusicDlgProc);break; case IDM_music1:MusicItem(IDM_music1);break;case IDM_music2:MusicItem(IDM_music2);break;case IDM_musicstop:MusicItem(IDM_musicstop);break; case IDM_EXIT: DestroyWindow(hWnd); break;default: return DefWindowProc(hWnd, message, wParam, lParam);break; case WM_PAINT:hdc = BeginPaint(hWnd, &ps);RECT rt;GetClientRect(hWnd, &rt); for(int i=0;i=18;i+) for(int j=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); /Invali
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)技術(shù)應(yīng)用能力試題及答案
- 計(jì)算機(jī)信息處理總結(jié)分析試題及答案
- 材料疲勞損傷累積分析模型重點(diǎn)基礎(chǔ)知識(shí)點(diǎn)
- 醫(yī)院門(mén)診火災(zāi)應(yīng)急預(yù)案(3篇)
- 列車(chē)發(fā)生火災(zāi)應(yīng)急預(yù)案(3篇)
- 車(chē)站街道火災(zāi)應(yīng)急預(yù)案(3篇)
- 經(jīng)濟(jì)危機(jī)影響下的政治經(jīng)濟(jì)學(xué)問(wèn)題試題及答案
- 公園停車(chē)場(chǎng)火災(zāi)應(yīng)急預(yù)案(3篇)
- 2025年法學(xué)概論考試社會(huì)影響與試題及答案
- 2025年AI倫理與法律問(wèn)題試題及答案
- 申請(qǐng)軟著流程
- 民航旅客乘機(jī)流程
- 貴州文物調(diào)查研究-從文物看中華民族共同體歷史的區(qū)域?qū)嵺`知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋貴州民族大學(xué)
- 光伏安全施工方案范本
- 食品公司配送路線優(yōu)化流程
- 房屋安全性鑒定培訓(xùn)
- 婦科常見(jiàn)疾病及護(hù)理常規(guī)
- 電機(jī)學(xué)II知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋廣東工業(yè)大學(xué)
- 抑郁癥與rTMS治療
- DB23T 3630-2023黑龍江省超低能耗建筑節(jié)能工程施工質(zhì)量驗(yàn)收標(biāo)準(zhǔn)
- 吊籃安裝安全技術(shù)交底
評(píng)論
0/150
提交評(píng)論