1、可视化程序设计可视化程序设计课程设计报告题目: 俄罗斯游戏方块 班级: 04级本一班 成员: 吴晓娟(0419411046) 赵粉娟(0419411035) 白冰(0419411034) 专业: 计算机科学与技术 日期: 2008-1-07 一、设计内容创建一个单文档应用程序, 设计一个简单的俄罗斯方块游戏,能够完成俄罗斯方块游戏的基本功能。二、设计目的通过本实验来巩固本学期中所学的Vc+ 中的类的使用,菜单资源的添加及使用,学会进行消息影射,能够实现对键盘消息进行响应。三、设计要求要求通过键盘上的左右方向键来控制游戏中方块的左右移动,通过键盘上的向上键来改变方块的排列方向,同过向下的键来使方
2、块直接移动到下面。通过在菜单栏里面的skill下的1,2,3,4来选择游戏的难度。四、设计原理先在菜单资源中添加和修改相应的资源,并对其进行消息映射,再在CView中添加相应的函数和变量完成相应的设置以实现其功能。主要是通过键盘消息响应实现各个方块的移动和变化。通过计时器实现游戏难度的设置。用数组的方式来表示游戏中的格子,每种不同排列的方块用不同的颜色来表示。方块移动时使用填充和绘制的方式来实现。五、 设计步骤1)创建MFC单文档应用程序。 2)添加和修改菜单资源,并进行消息映射。 3)利用ClassWizard添加成员变量。 4)利用ClassWizard添加成员函数及结构体point。六、
3、设计总结通过本次实验,巩固和更深的理解了本学期所学的知识,理解了类的定义,资源的添加和消息映射,对键盘消息的响应有了更好的掌握,七、主要源码具体代码如下:添加的成员变量如下: COLORREF tempcolor,color2010;void myDraw();int time;void Star(); int count;void Isover();int dop();int Isbottom();int Isout(int w);int round(int as); void clean(int b);int index;int R; int L;int H;int cor2010;int
4、 J;CBitmap* m_pbmpContents; / to get a faster update if flickerfree is on int K;BOOL flag,flag2;int Y;int X;int k;point aa4,bb4,dd4;添加成员函数及其代码如下:int CFanView:OnCreate(LPCREATESTRUCT lpCreateStruct) / 初始化游戏界面if (CView:OnCreate(lpCreateStruct) = -1) return -1; flag2=0;k=0; time=500; K=0; Y=0; for(int
5、i=0;i20;i+) for(int j=0;j11;j+) corij=0; count=0; R=0; L=0; H=0; index=0; flag=0; Star(); SetTimer(IDC_TIMER,time,NULL);return 0;/ 设置定时器void CFanView:OnTimer(UINT nIDEvent) Y=1; if(K) if(Isbottom() flag=1; clean(0); R=R+2; for(int a=0;a4;a+) aaa.x+; myDraw(); else if(K) Isover(); Star(); flag=1; Y=0
6、; CView:OnTimer(nIDEvent);void CFanView:clean(int b)for(int a=0;a4;a+) coraaa.xaaa.y=0; dda.x=aaa.x; dda.y=aaa.y; int CFanView:round(int as) int tempx=0,tempy=0,a,d=0,h=0; int temp2=0,temp1=0; for(a=0;a4;a+) bba.x=aaa.x; bba.y=aaa.y; if(index=1) temp1=aa2.x; temp2=aa2.y; h=2; else temp1=aa1.x; temp2
7、=aa1.y; h=1; for(a=0;a9)|(aaa.y19)|(aaa.x0) for(int d=0;d4;d+) aad.x=bbd.x; aad.y=bbd.y; return 0; return 1;int CFanView:Isout(int w)if(w=2) for(int a=0;a=9)|(coraaa.xaaa.y+1=2) return 1; if(w=1) for(int a=0;a4;a+) if(aaa.y=0)|(coraaa.xaaa.y-1=2) return 2; return 3;int CFanView:Isbottom()for(int a=0
8、;a4;a+) if(aaa.x=19) for(int c=0;c4;c+) coraac.xaac.y=2; coloraac.xaac.y=tempcolor; flag2=1; k=0; return 0; if(coraaa.x+1aaa.y=2) for(int c=0;c4;c+) coraac.xaac.y=2; coloraac.xaac.y=tempcolor; flag2=1; k=0; return 0; return 1;int CFanView:dop()for(int u=0;u20;u+) for(int a=0;a4;a+) if(coraaa.x+1aaa.
9、y=2) for(int c=0;c4;c+) coraac.xaac.y=2; coloraac.xaac.y=tempcolor; flag2=1; / flag=1; return 0; for(a=0;a4;a+) if(aaa.x=19) for(int c=0;c4;c+) coraac.xaac.y=2; coloraac.xaac.y=tempcolor; flag2=1; / flag=1; return 0; for(int o=0;o=0;a-) flagover=0; for(int b=0;b10;b+) if(corab=2) flagover+; if(flago
10、ver=10) count=count+100; for(b=0;b0;t-) for(b=0;b10;b+) if(cort-1b=2) cortb=2; colortb=colort-1b; flag2=1; cort-1b=0; colort-1b=RGB(255,255,255); a=a+1; for(a=0;a9;a+) if(cor0a=2) KillTimer(IDC_TIMER); MessageBox(游戏结束); / clean(1); count=0; for(int i=0;i20;i+) for(int j=0;jm_wndStatusBar.GetPaneInfo
11、(0,nID,nStyle,cxwidth); frame-m_wndStatusBar.SetPaneInfo(0,nID,SBPS_STRETCH|SBPS_NORMAL,cxwidth); CString cs; frame-m_wndStatusBar.SetPaneText(0,cs);/ 初始设置游戏的七个方块void CFanView:Star()for(int i=0;iSetCheck(1); else pCmdUI-SetCheck(0); void CFanView:On2() time=300;void CFanView:OnUpdate2(CCmdUI* pCmdUI
12、) if(time=300) pCmdUI-SetCheck(1); else pCmdUI-SetCheck(0); void CFanView:On3() time=60; void CFanView:OnUpdate3(CCmdUI* pCmdUI) if(time=60) pCmdUI-SetCheck(1); else pCmdUI-SetCheck(0); / 键盘响应消息映射void CFanView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) if(!Y) K=0; switch(nChar) case VK_LEFT: c
13、ase VK_NUMPAD4: if(!(Isout(1)=2) flag=1; clean(0); H-; for(int a=0;a4;a+) aaa.y-; / Invalidate(); break;case VK_RIGHT: case VK_NUMPAD6: if(!(Isout(2)=1) flag=1; clean(0); H+; for(int a=0;a4;a+) aaa.y+; / Invalidate(); break; case VK_DOWN: case VK_NUMPAD2: clean(0); dop(); Isover(); Star(); break; ca
14、se VK_UP: case VK_NUMPAD8: case VK_NUMPAD5: clean(0); k+; round(k); / Invalidate(); break; K=1; myDraw();/ OnPaint(); CView:OnKeyDown(nChar, nRepCnt, nFlags);void CFanView:OnPaint() CPaintDC pdc(this); / device context for painting / ShowWindow(SW_HIDE); COLORREF clrTopLeft = RGB(68, 71, 140); COLOR
15、REF clrBottomRight = RGB(70, 166,152); COLORREF clrTopLeft2 = :GetSysColor(COLOR_BTNHILIGHT); COLORREF clrBottomRight2 = :GetSysColor(COLOR_BTNSHADOW); CRect rect; CMemDC dc(&pdc); register const UINT wide =20; register const UINT hight = 20;/ paint the board itself if(flag) for(int a=0;a4;a+) coraa
16、a.xaaa.y=1; for(int x=0;x20;x+) for(int j=0;j10;j+) if(corxj=1) dc.FillSolidRect(100+20+j*20,x*20,wide,hight,clrTopLeft); dc.Draw3dRect(100+20+j*20,x*20,wide,hight,clrTopLeft, clrBottomRight); for(int x=0;x20;x+) for(int j=0;j10;j+) dc.FillSolidRect(100+20+j*20,x*20,wide,hight,clrTopLeft2); dc.Draw3
17、dRect(100+20+j*20,x*20,wide,hight,clrTopLeft, clrTopLeft2); for( x=0;x20;x+) for(int j=0;j10;j+) if(corxj=1)|(corxj=2) dc.FillSolidRect(100+20+j*20,x*20,wide,hight,clrTopLeft); dc.Draw3dRect(100+20+j*20,x*20,wide,hight,clrTopLeft, clrBottomRight); / 游戏过程中界面的变化过程void CFanView:myDraw() CDC* dc=GetDC()
18、; COLORREF clrTopLeft = RGB(68, 71, 140); COLORREF clrBottomRight = RGB(70, 166,152); COLORREF clrTopLeft2 = :GetSysColor(COLOR_BTNHILIGHT); COLORREF clrBottomRight2 = :GetSysColor(COLOR_BTNSHADOW); register const UINT wide =20; register const UINT hight = 20;/ paint the board itself for(int a=0;aFi
19、llSolidRect(100+20+dda.y*20,dda.x*20,wide,hight,clrTopLeft2); dc-Draw3dRect(100+20+dda.y*20,dda.x*20,wide,hight,clrTopLeft2, clrBottomRight2); dc-FillSolidRect(100+20+dda.y*20,dda.x*20,wide,hight,clrTopLeft2); dc-Draw3dRect(100+20+dda.y*20,dda.x*20,wide,hight,clrTopLeft, clrTopLeft2); if(flag) for(int a=0;a4;a+) coraaa.xaaa.y=1; for(int x=0;x20;x+) for(int j=0;jFillSolidRect(100+20+j*20,x*20,wide,hight,tempcolor); dc-Draw3dRect(100+20+j*20,x*20,wide,hight,clrTopLeft, tempcolor); if(flag2) for(int x=0;x20
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1