C语言编写俄罗斯方块实验报告.docx

上传人:b****5 文档编号:12148041 上传时间:2023-04-17 格式:DOCX 页数:56 大小:165.75KB
下载 相关 举报
C语言编写俄罗斯方块实验报告.docx_第1页
第1页 / 共56页
C语言编写俄罗斯方块实验报告.docx_第2页
第2页 / 共56页
C语言编写俄罗斯方块实验报告.docx_第3页
第3页 / 共56页
C语言编写俄罗斯方块实验报告.docx_第4页
第4页 / 共56页
C语言编写俄罗斯方块实验报告.docx_第5页
第5页 / 共56页
点击查看更多>>
下载资源
资源描述

C语言编写俄罗斯方块实验报告.docx

《C语言编写俄罗斯方块实验报告.docx》由会员分享,可在线阅读,更多相关《C语言编写俄罗斯方块实验报告.docx(56页珍藏版)》请在冰豆网上搜索。

C语言编写俄罗斯方块实验报告.docx

C语言编写俄罗斯方块实验报告

`````````

贵州师范大学

 

 

学院:

数计学院

班级:

13级数媒班

学号:

姓名:

摘要

……………………………………………………………………………………………………..

关键字:

 

第一部分设计总概

摘要…………………………………………………………………………………………………

一、设计目的

二、设计要求

三、设计内容

四、系统分析与设计

第二部分数据结构设计

第三部分功能实现与程序调试………………………………………………………………….

第四部分完成设计

一、实习日记

二、实习总结

三、教师评语

四、程序使用说明书………………………………………………………………………….

第一部分设计总概

一、设计目的

二、设计要求

三、设计内容

四、系统分析与设计

第二部分数据结构设计

第三部分功能实现与程序调试

第四部分完成设计

一、实习日记:

二、实习总结:

………………………

三、教师评语:

 

设计成绩:

               指导老师签名:

               

摘要

使用C语言编写一个俄罗斯方块游戏系统,要求程序运行后有一个图形用户界面,实现各种方块的生产,包括形状和颜色等信息,完成左右下旋转的功能,在消行的同时分数加10,在点击暂停或者按下空格的时候暂停或开始游戏,最后结束游戏.

关键字:

音乐、背景、按键控制、暂停、继续、停止,难度级别

第一部分设计总概

一、设计目的:

本课程设计是一个综合性的实践教学环节,目的在于促进学生复习和巩固计算机软件设计知识,加深对软件设计方法、软件设计技术和设计思想的理解,并能运用所学知识进行开发。

希望通过本课程设计中简单系统的开发,使学生掌握软件设计的基本方法和基本流程,提高自己的综合应用能力。

二、设计要求

利用C++编写俄罗斯方块游戏,使俄罗斯游戏能够在MicrosoftVisualC++6.0上运行该游戏。

二、设计内容:

俄罗斯方块

(1)游戏等级:

游戏分为难中易三个等级,等级越高,方块下落速度越快; 

(2)由方向键控制游戏:

上键控制方块变形、下键控制方块下移并判断是否有消行、左键控制方块左移、右键控制方块右移; 

(3)游戏积分:

一次性消的行数越多加的分数越多,当达到一定分数自动提高一个游戏等级。

 

 

三、系统分析与设计

 

1.程序功能模块:

 

 

2.程序流程图:

 

第二部分数据结构设计

1.游戏需求 

         随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关,每关方块下落的速度不同,若在游戏中各形状填满了给定区域,为输者。

 

2.游戏界面需求:

 

良好的用户界面,以键盘操作,有关数显示和分数显示。

让方块在一定的区域内

运动和变形,并且显示下一个即将出现的方块。

 

3.游戏形状(方块)需求:

 

良好的方块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形,可设为顺时针或逆 时针变形,一般为逆时针。

 

 

第三部分功能实现与程序调试

程序:

//testBlock.cpp:

Definestheentrypointfortheapplication.

//

#defineCreateWindowCreateWindowA

#include"stdafx.h"

#include"resource.h"

#include//PlaySound函数的头文件

#pragmacomment(lib,"WINMM.LIB")

#include"commctrl.h"

#pragmacomment(lib,"comctl32.lib")

#include

#include

HMENUhMenu;//菜单句柄

#defineIDM_NEW40001

#defineIDM_PAUSE40002

//#defineIDM_STOP40003

#defineIDM_HELP40008

#defineIDM_MUSIC40010

#defineIDM_LEFT1001

#defineIDM_RIGHT1002

#defineIDM_UP1003

#defineIDM_DOWN1004

#defineIDC_RADIO11005

#defineIDC_RADIO21006

#defineCOLOR_BTNFACE15

 

#defineMAX_LOADSTRING100

#defineTIMER_DROP_ID1

intc=0,contin=1;

intcnext=0;

intch1=0;

intch2=0;

intch3=1;

intmusic=0;

BOOLbMusicOn;//音乐开关

intiMusicBG;//背景音乐

canRotate(intrank);

BOOLCALLBACKMusicDlgProc(HWND,UINT,WPARAM,LPARAM);

voidTetrisMusic(BOOL);

voidMusicItem(int);

staticTBBUTTONtbButtons[]=

{

{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},

};//工具栏数据结构

structBlock{POINTa;POINTb;POINTc;POINTd;};//方块模型数据结构

staticBlockTetris[7][4]=

{

//□□

//□□

(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}}

}

};//七种方块全部变形数据结构

intx=4;//以方块为单位

inty=-1;

 

intnBlockAreaX=10;//背景窗口

intnBlockAreaY=30;

intBlockMatrix[19][10];

intnBlockKind=0;

intnBlockColor=0;

intnBlockState=0;

intnBlockAreaXnext=220;//显示窗口

intnBlockAreaYnext=37;

intBlockMatrixnext[8][6];

intnBlockKindnext=0;

intnBlockColornext=0;

intnBlockStatenext=0;

 

intgamescore=0;

BOOLBGame=FALSE;

BOOLbGOver=FALSE;

HWNDhWnd;

HDChdc;

HDChMemDC=NULL;

HDChWndDC=NULL;

//GlobalVariables:

HINSTANCEhInst;//currentinstance

TCHARszTitle[MAX_LOADSTRING];//Thetitlebartext

TCHARszWindowClass[MAX_LOADSTRING];//Thetitlebartext

HBITMAPbmp[999]={0};

//Fowarddeclarationsoffunctionsincludedinthiscodemodule:

ATOMMyRegisterClass(HINSTANCEhInstance);

BOOLInitInstance(HINSTANCE,int);

LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);

LRESULTCALLBACKAbout(HWND,UINT,WPARAM,LPARAM);

voidDrawTetris(HDChdc,intoffsetX/*0*/,intoffsetY/*0*/,intrank/*nouse*/);

voidTools(HWNDhWnd);

LoadImage();

voidGameStart();

voidDrawNext(HDChdc);

voidGameOver();

voidDrawButton(LPARAMlParam);

LPARAMlParam;

 

intAPIENTRYWinMain(HINSTANCEhInstance,

HINSTANCEhPrevInstance,

LPSTRlpCmdLine,

intnCmdShow)

{

//TODO:

Placecodehere.

MSGmsg;

HACCELhAccelTable;

//Initializeglobalstrings

LoadString(hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING);

LoadString(hInstance,IDC_TESTBLOCK,szWindowClass,MAX_LOADSTRING);

MyRegisterClass(hInstance);

FILE*fp=NULL;////////////

charch[50];

fp=fopen("test.txt","r");

fgets(ch,523,fp);

ch1=atoi(ch);

fclose(fp);////////

 

//Performapplicationinitialization:

if(!

InitInstance(hInstance,nCmdShow))

{

returnFALSE;

}

hAccelTable=LoadAccelerators(hInstance,(LPCTSTR)IDC_TESTBLOCK);

charfileName[100]={0};

//res\\1.bmp

for(inti=0;i<9;i++)

{

sprintf(fileName,"res\\%d.bmp",i+1);

bmp[i]=(HBITMAP)LoadImage(NULL,fileName,0,0,0,LR_LOADFROMFILE);//LOADIMAGEFROMFILE

}

for(i=0;i<=18;i++)

{

for(intj=0;j<=9;j++)

{

BlockMatrix[i][j]=-1;

}

}

for(intm=0;m<=5;m++)

{

for(intn=0;n<=5;n++)

{

BlockMatrixnext[m][n]=-1;

}

}//beijing

inta=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);

}

}

returnmsg.wParam;

}

 

ATOMMyRegisterClass(HINSTANCEhInstance)

{

WNDCLASSEXwcex;

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));

returnRegisterClassEx(&wcex);

}

BOOLInitInstance(HINSTANCEhInstance,intnCmdShow)

{

hInst=hInstance;//Storeinstancehandleinourglobalvariable

hWnd=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,200,350,485,NULL,NULL,hInstance,NULL);//窗口大小设置

if(!

hWnd)

{

returnFALSE;

}

ShowWindow(hWnd,nCmdShow);

UpdateWindow(hWnd);

returnTRUE;

}

LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)

{

intwmId,wmEvent;

PAINTSTRUCTps;

HDChdc;

TCHARszHello[MAX_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;

caseIDM_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:

//暂停

{

BGame=FALSE;

MessageBox(NULL,"你好,游戏暂停","暂停",MB_OK);

}

break;

 

caseIDC_JIXU:

//继续

{

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:

InvalidateRect(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,bmp[8]);

BitBlt(hWndDC,0,20,2000,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(hInst,MAKEINTRESOURCE(IDD_MUSIC),hWnd,MusicDlgProc);

break;

caseIDM_music1:

MusicItem(IDM_music1);

break;

case

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1