




已閱讀5頁,還剩43頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
學 院: 數計學院 班 級: 13級數媒班 學 號: 姓 名: 摘 要.關鍵字: 目錄第一部分 設計總概摘要一、設計目的二、設計要求三、設計內容四、系統分析與設計第二部分 數據結構設計第三部分 功能實現與程序調試.第四部分 完成設計一、實習日記二、實習總結三、教師評語四、程序使用說明書.第一部分 設計總概一、設計目的二、設計要求三、設計內容四、系統分析與設計 第二部分 數據結構設計 第三部分 功能實現與程序調試第四部分 完成設計一、實習日記:二、實習總結:三、教師評語:設計成績:指導老師簽名: 摘 要使用C語言編寫一個俄羅斯方塊游戲系統,要求程序運行后有一個圖形用戶界面,實現各種方塊的生產,包括形狀和顏色等信息,完成左右下旋轉的功能,在消行的同時分數加10,在點擊暫停或者按下空格的時候暫停或開始游戲,最后結束游戲.關鍵字:音樂、背景、按鍵控制、暫停、繼續、停止,難度級別第一部分 設計總概一、 設計目的:本課程設計是一個綜合性的實踐教學環節,目的在于促進學生復習和鞏固計算機軟件設計知識,加深對軟件設計方法、軟件設計技術和設計思想的理解,并能運用所學知識進行開發。希望通過本課程設計中簡單系統的開發,使學生掌握軟件設計的基本方法和基本流程,提高自己的綜合應用能力。二、設計要求利用C+編寫俄羅斯方塊游戲,使俄羅斯游戲能夠在Microsoft Visual C+6.0上運行該游戲。二、 設計內容:俄羅斯方塊(1)游戲等級:游戲分為難中易三個等級,等級越高,方塊下落速度越快;(2)由方向鍵控制游戲:上鍵控制方塊變形、下鍵控制方塊下移并判斷是否有消行、左鍵控制方塊左移、右鍵控制方塊右移;(3)游戲積分:一次性消的行數越多加的分數越多,當達到一定分數自動提高一個游戲等級。三、 系統分析與設計1.程序功能模塊:2.程序流程圖: 第二部分 數據結構設計1.游戲需求隨機給出不同的形狀(長條形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充給定的區域,若填滿一條便消掉,記分,當達到一定的分數時,過關,每關方塊下落的速度不同,若在游戲中各形狀填滿了給定區域,為輸者。2.游戲界面需求:良好的用戶界面,以鍵盤操作,有關數顯示和分數顯示。讓方塊在一定的區域內運動和變形,并且顯示下一個即將出現的方塊。3.游戲形狀(方塊)需求:良好的方塊形狀設計,繪制七種常見的基本圖形(長條形、Z字形、反Z形、田字形、7字形、反7形、T字型),各個方塊要能實現它的變形,可設為順時針或逆時針變形,一般為逆時針。第三部分 功能實現與程序調試程序:/ testBlock.cpp : Defines the entry point for the application./#define CreateWindow CreateWindowA#include stdafx.h#include resource.h#include/PlaySound函數的頭文件 #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; /音樂開關int iMusicBG; /背景音樂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,; /工具欄數據結構struct Block POINT a; POINT b; POINT c; POINT d; ; /方塊模型數據結構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; /七種方塊全部變形數據結構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);/窗口大小設置 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;/開始按鍵case IDC_PAUSE:/暫停 BGame=FALSE; MessageBox(NULL, 你好,游戲暫停, 暫停, MB_OK); break; case IDC_JIXU:/繼續if(contin!=0)BGame=TRUE;break;case IDM_STOP:/停止BGame=FALSE; GameOver();break;case IDC_easy: InvalidateRect(hWnd,0,0);ch3=1;MessageBox(NULL, 你好,你選擇的難易程度為簡單, 簡單, 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);重畫時不擦除背景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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流運輸成本控制表格
- 制造業表格:產品分類表
- 印度入學考試試題及答案
- 醫院出納考試試題及答案
- 醫用設備考試試題及答案
- 六一兒童節禮服活動方案
- 六一圍棋活動方案
- 六一異地活動方案
- 六一捐款活動方案
- 六一活動招生策劃方案
- 2025年江西報業傳媒集團招聘題庫帶答案分析
- 公司退貨流程管理制度
- 國際標準舞智慧樹知到期末考試答案2024年
- 《基于PLC的快遞包裹分揀系統【設計報告(論文)】》
- 入團志愿書(2016版本)(可編輯打印標準A4) (1)
- WS T 510-2016病區醫院感染管理規范
- 中南大學計算機體系結構題庫
- 兒童身高預測與促進課件
- 中小學教育懲戒規則(試行)解讀課件
- 年產3000噸新茶飲及抹茶智能精深產能加工項目可行性研究報告-甲乙丙資信
- 活動板房安裝驗收表
評論
0/150
提交評論