12020年4月19日C课程设计俄罗斯方块C#程序设计实训报告题目:俄罗斯方块专业____计算机科学与技术_年级班别___计算机09-2班__学号学生姓名____________指导教师_成绩年1月文档仅供参考32020年4月19日目录一系统设计要求...................................................................................31.1课题分析..........................................................错误!未定义书签。1.2设计环境....................................................................................31.3设计思路....................................................................................3二课题总体框架设计...........................................................................32.1程序流程图................................................................................42.2类的结构图................................................................................5三课题实现...........................................................................................63.1程序主界面................................................................................63.2开始游戏界面............................................................................63.3游戏结束界面............................................................................73.4暂停游戏界面............................................................................73.5使用说明界面…...………………………………………………83.6关键程序代码............................................................................8四总结.................................................................................................214.1设计总结..................................................................................214.2设计体会..................................................................................22文档仅供参考42020年4月19日一、系统设计要求1.1课题分析本游戏系统是利用C#实现的,是制作为我们所熟悉的非常简单的俄罗斯方块游戏,该系统能实现的具体功能如下:1).能简便的开始游戏,游戏中的方块的功能与日常我们所熟悉的游戏的功能一致,各种块的设置也一致,包括方块的旋转,加速下降,左右移动,满行消去,满行消去自动加分,以及到顶游戏结束等功能;2).能够经过对话框窗体说明各个功能的使用说明,以及一些其它功能。3).界面简洁美观,简单易用。跟其它一般的游戏相差不大。1.2设计环境本程序选择VisualStudio作为实验环境。1.3设计思路用面向对象的方法分析系统对于俄罗斯方块的程序制作,我们能够定义一个或者几个类,专门来描述俄罗斯方块,在这个类中,包含与之相关的方法、属性和字段,经过封装,实现其业务逻辑。其中,每一个俄罗斯方块都有相同的特征,由4个小正方形构成,有旋转,左右移动,下落的动作,整行被填满除去并计算分数而构成行的小正文档仅供参考52020年4月19日方体块。基中块的形状类型有7种:田、一、L、倒L、Z、倒Z、上。在窗口中经过调用主窗体Form1当中的菜单栏来设置游戏的开始、暂停、结束、重新开始以及推出程序。还能够经过其菜单中游戏说明选项来查看游戏各个键的使用说明,还可调用帮助菜单来查看版权说明。二、课题总体框架设计2.1、程序流程图文档仅供参考62020年4月19日2.2、类的结构图开始窗口初始化读取游戏开始游戏开启游戏时钟随机形成方块判断是否可移旋转左移右移加速下降暂停结束绘制方块是否越顶是否满行消行结束加分文档仅供参考72020年4月19日三、课题实现文档仅供参考82020年4月19日3.1程序主界面3.2开始游戏界面3.3游戏结束文档仅供参考92020年4月19日3.4暂停游戏3.5使用说明界面和版权界面文档仅供参考102020年4月19日3.6关键程序代码1、Form1类1)构造函数,设定当前运行的方块,下一个即将出现的方块,方块产生的位置,玩家积分,游戏开关等。publicpartialclassForm1:Form{privateBlockcurrentBlock;//当前在运行的方块privateBlocknextBlock;//下一个即将出现的方块privatePointstartLocation=newPoint(bianjie.SingleSquareSize*8,0);//方块产生的位置privateintscore=0;//玩家积分privateboolstillRuning=false;//游戏运行开关2)键盘操作:用来选择方块的移动方向,是向右移动,向左移动,向下加速,旋转,还是暂停。文档仅供参考112020年4月19日/*键盘操作*/privatevoidForm1_KeyDown(objectsender,KeyEventArgse){switch(e.KeyCode){caseKeys.Right:currentBlock.right();break;//向右移动caseKeys.Left:currentBlock.left();break;//向左移动caseKeys.Up:currentBlock.Rotate();break;//旋转caseKeys.Down:while(currentBlock.down());break;//向下加速caseKeys.Space://空格:暂停timer1.Enabled=!timer1.Enabled;if(!timer1.Enabled)showMsg(暂停);elsemsg.SendToBack();break;}picBack.Focus();}3)时钟触发处理函数,使方块自动的向下移动,每1秒使方块向下移动一次/*游戏时钟*/privatevoidtimer1_Tick(objectsender,EventArgse){文档仅供参考122020年4月19日if(!stillRuning)return;//检测是否还能够下移if(!currentBlock.down()){if(currentBlock.Top()==0){//如果到顶则游戏结束showMsg(GameOver!);stillRuning=false;timer1.Stop();return;}//否则计算分数并继续interaseLines=bianjie.CheckLines();if(eraseLines0){score+=bianjie.width*eraseLines;t_score.Text=score.ToString();picBack.Invalidate();Application.DoEvents();bianjie.Redraw();}文档仅供参考132020年4月19日//产生下一个blockcurrentBlock=newBlock(startLocation,nextBlock.blockType);currentBlock.Draw(bianjie.winHandle);pic_preView.Refresh();nextBlock=newBlock(newPoint(50,50),Block.BlockTypes.undefined);nextBlock.Draw(pic_preView.Handle);}currentBlock.down();}4)对窗口进行重绘/*窗口重绘*/privatevoidForm1_Activated(objectsender,EventArgse){picBack.Invalidate();Application.DoEvents();bianjie.Redraw();}2、SingleBlock类1)构造单个方块的尺寸,颜色,前景色,背景色publicSingleBlock(SizeinitSize,ColorinitForeColor,ColorinitBackColor)文档仅供参考142020年4月19日{size=initSize;foreColor=initForeColor;backColor=initBackColor;}2)画方块,用GDI+绘画,画出填充正方形//画方块publicvoidDraw(System.IntPtrwinHandle){Graphicsg=Graphics.FromHwnd(winHandle);GraphicsPathgp=newGraphicsPath();Rectanglerect=newRectangle(location,size);gp.AddRectangle(rect);Color[]surroundColor=newColor[]{backColor};PathGradientBrushpgb=newPathGradientBrush(gp);pgb.CenterColor=foreColor;pgb.SurroundColors=surroundColor;g.FillPath(pgb,gp);}//擦除方块publicvoidErase(System.IntPtrwinHandle){文档仅供参考152020年4月19日Graphicsg=Graphics.FromHwnd(winHandle);Rectanglerect=newRectangle(location,size);g.FillRectangle(newSolidBrush(bianjie.BackColor),rect);}3、Block类1)随机产生方块形状,并设置四个方块的颜色publicBlock(PointthisLocation,BlockTypesbType){//当blockType为undefined时,随机产生方块形状Randomrand=newRandom();if(bType==BlockTypes.undefined){blockType=(BlockTypes)(rand.Next(7)+1);}elseblockType=bType;//设置四小方块的颜色inti=(int)blockType-1;foreColor=bia