C专业课程设计俄罗斯方块_第1页
C专业课程设计俄罗斯方块_第2页
C专业课程设计俄罗斯方块_第3页
C专业课程设计俄罗斯方块_第4页
C专业课程设计俄罗斯方块_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C#程序设计实训汇报题目:俄罗斯方块专业____计算机科学和技术_年级班别___计算机09-2班__学号学生姓名____________指导老师_成绩年1月目录一系统设计要求 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一、系统设计要求课题分析本游戏系统是利用C#实现,是制作为我们所熟悉很简单俄罗斯方块游戏,该系统能实现具体功效以下:能简便开始游戏,游戏中方块功效和日常我们所熟悉游戏功效一致,多种块设置也一致,包含方块旋转,加速下降,左右移动,满行消去,满行消去自动加分,和到顶游戏结束等功效;能够经过对话框窗体说明各个功效使用说明,和部分其它功效。界面简练美观,简单易用。跟其它通常游戏相差不大。设计环境本程序选择VisualStudio作为试验环境。1.3设计思绪用面向对象方法分析系统对于俄罗斯方块程序制作,我们能够定义一个或多个类,专门来描述俄罗斯方块,在这个类中,包含和之相关方法、属性和字段,经过封装,实现其业务逻辑。其中,每一个俄罗斯方块全部有相同特征,由4个小正方形组成,有旋转,左右移动,下落动作,整行被填满除去并计算分数而组成行小正方体块。基中块形状类型有7种:田、一、L、倒L、Z、倒Z、上。在窗口中经过调用主窗体Form1当中菜单栏来设置游戏开始、暂停、结束、重新开始和推出程序。还能够经过其菜单中游戏说明选项来查看游戏各个键使用说明,还可调用帮助菜单来查看版权说明。二、课题总体框架设计2.1、程序步骤图开始开始窗口初始化读取游戏开始游戏开启游戏时钟随机形成方块判定是否可移旋转左移右移加速下降暂停结束绘制方块是否越顶是否满行消行结束加分类结构图三、课题实现3.1程序主界面3.2开始游戏界面3.3游戏结束3.4暂停游戏3.5使用说明界面和版权界面3.6关键程序代码1、Form1类结构函数,设定目前运行方块,下一个立即出现方块,方块产生位置,玩家积分,游戏开关等。publicpartialclassForm1:Form{privateBlockcurrentBlock;//目前在运行方块privateBlocknextBlock;//下一个立即出现方块privatePointstartLocation=newPoint(bianjie.SingleSquareSize*8,0);//方块产生位置privateintscore=0;//玩家积分privateboolstillRuning=false;//游戏运行开关键盘操作:用来选择方块移动方向,是向右移动,向左移动,向下加速,旋转,还是暂停。/*键盘操作*/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();}时钟触发处理函数,使方块自动向下移动,每1秒使方块向下移动一次/*游戏时钟*/privatevoidtimer1_Tick(objectsender,EventArgse){if(!stillRuning)return;//检测是否还能够下移if(!currentBlock.down()){if(currentBlock.Top()==0){//假如到顶则游戏结束showMsg("GameOver!");stillRuning=false;timer1.Stop();return;}//不然计算分数并继续interaseLines=bianjie.CheckLines();if(eraseLines>0){score+=bianjie.width*eraseLines;t_score.Text=score.ToString();picBack.Invalidate();Application.DoEvents();bianjie.Redraw();}//产生下一个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){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){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=bianjie.BlockForeColor[i];backColor=bianjie.BlockBackColor[i];SizeSingleSquareS=newSize(SingleSquareSize,SingleSquareSize);SingleSquare1=newSingleBlock(SingleSquareS,foreColor,backColor);SingleSquare2=newSingleBlock(SingleSquareS,foreColor,backColor);SingleSquare3=newSingleBlock(SingleSquareS,foreColor,backColor);SingleSquare4=newSingleBlock(SingleSquareS,foreColor,backColor);2)设置小方块位置,组合成指定形状方块//设置小方块位置,组合成指定形状一个大方块switch(blockType){caseBlockTypes.SingleSquare://组合成正方形SingleSquare1.location=newPoint(thisLocation.X,thisLocation.Y);SingleSquare2.location=newPoint(thisLocation.X+SingleSquareSize,thisLocation.Y);SingleSquare3.location=newPoint(thisLocation.X,thisLocation.Y+SingleSquareSize);SingleSquare4.location=newPoint(thisLocation.X+SingleSquareSize,thisLocation.Y+SingleSquareSize);break;caseBlockTypes.line://组合成线形SingleSquare1.location=newPoint(thisLocation.X,thisLocation.Y);SingleSquare2.location=newPoint(thisLocation.X+SingleSquareSize,thisLocation.Y);SingleSquare3.location=newPoint(thisLocation.X+2*SingleSquareSize,thisLocation.Y);SingleSquare4.location=newPoint(thisLocation.X+3*SingleSquareSize,thisLocation.Y);break;caseBlockTypes.J://组合成J形SingleSquare1.location=newPoint(thisLocation.X+SingleSquareSize,thisLocation.Y);SingleSquare2.location=newPoint(thisLocation.X+SingleSquareSize,thisLocation.Y+SingleSquareSize);SingleSquare3.location=newPoint(thisLocation.X+SingleSquareSize,thisLocation.Y+2*SingleSquareSize);SingleSquare4.location=newPoint(thisLocation.X,thisLocation.Y+2*SingleSquareSize);break;caseBlockTypes.L://组合成l形SingleSquare1.location=newPoint(thisLocation.X,thisLocation.Y);SingleSquare2.location=newPoint(thisLocation.X,thisLocation.Y+SingleSquareSize);SingleSquare3.location=newPoint(thisLocation.X,thisLocation.Y+2*SingleSquareSize);SingleSquare4.location=newPoint(thisLocation.X+SingleSquareSize,thisLocation.Y+2*SingleSquareSize);break;caseBlockTypes.T://组合成T形SingleSquare1.location=newPoint(thisLocation.X,thisLocation.Y);SingleSquare2.location=newPoint(thisLocation.X+SingleSquareSize,thisLocation.Y);SingleSquare3.location=newPoint(thisLocation.X+2*SingleSquareSize,thisLocation.Y);SingleSquare4.location=newPoint(thisLocation.X+SingleSquareSize,thisLocation.Y+SingleSquareSize);break;caseBlockTypes.Z://组合成z形SingleSquare1.location=newPoint(thisLocation.X,thisLocation.Y);SingleSquare2.location=newPoint(thisLocation.X+SingleSquareSize,thisLocation.Y);SingleSquare3.location=newPoint(thisLocation.X+SingleSquareSize,thisLocation.Y+SingleSquareSize);SingleSquare4.location=newPoint(thisLocation.X+2*SingleSquareSize,thisLocation.Y+SingleSquareSize);break;caseBlockTypes.S://组合成S形SingleSquare1.location=newPoint(thisLocation.X,thisLocation.Y+SingleSquareSize);SingleSquare2.location=newPoint(thisLocation.X+SingleSquareSize,thisLocation.Y+SingleSquareSize);SingleSquare3.location=newPoint(thisLocation.X+SingleSquareSize,thisLocation.Y);SingleSquare4.location=newPoint(thisLocation.X+2*SingleSquareSize,thisLocation.Y);break;}}/*画方块*/publicvoidDraw(System.IntPtrwinHandle){SingleSquare1.Draw(winHandle);SingleSquare2.Draw(winHandle);SingleSquare3.Draw(winHandle);SingleSquare4.Draw(winHandle);}/*擦方块*/publicvoidErase(System.IntPtrwinHandle){SingleSquare1.Erase(winHandle);SingleSquare2.Erase(winHandle);SingleSquare3.Erase(winHandle);SingleSquare4.Erase(winHandle);}3)移动方块/*移动*/publicbooldown(){//检测是否能够下移if(bianjie.isEmpty(SingleSquare1.location.X/SingleSquareSize,SingleSquare1.location.Y/SingleSquareSize+1)&&bianjie.isEmpty(SingleSquare2.location.X/SingleSquareSize,SingleSquare2.location.Y/SingleSquareSize+1)&&bianjie.isEmpty(SingleSquare3.location.X/SingleSquareSize,SingleSquare3.location.Y/SingleSquareSize+1)&&bianjie.isEmpty(SingleSquare4.location.X/SingleSquareSize,SingleSquare4.location.Y/SingleSquareSize+1)){Erase(bianjie.winHandle);SingleSquare1.location=newPoint(SingleSquare1.location.X,SingleSquare1.location.Y+SingleSquareSize);SingleSquare2.location=newPoint(SingleSquare2.location.X,SingleSquare2.location.Y+SingleSquareSize);SingleSquare3.location=newPoint(SingleSquare3.location.X,SingleSquare3.location.Y+SingleSquareSize);SingleSquare4.location=newPoint(SingleSquare4.location.X,SingleSquare4.location.Y+SingleSquareSize);Draw(bianjie.winHandle);returntrue;}else//假如不能下移了{bianjie.stopSingleSquare(SingleSquare1,SingleSquare1.location.X/SingleSquareSize,SingleSquare1.location.Y/SingleSquareSize);bianjie.stopSingleSquare(SingleSquare2,SingleSquare2.location.X/SingleSquareSize,SingleSquare2.location.Y/SingleSquareSize);bianjie.stopSingleSquare(SingleSquare3,SingleSquare3.location.X/SingleSquareSize,SingleSquare3.location.Y/SingleSquareSize);bianjie.stopSingleSquare(SingleSquare4,SingleSquare4.location.X/SingleSquareSize,SingleSquare4.location.Y/SingleSquareSize);returnfalse;//表示能够弹出下一个block了}}publicboolleft(){//检测是否能够左移if(bianjie.isEmpty(SingleSquare1.location.X/SingleSquareSize-1,SingleSquare1.location.Y/SingleSquareSize)&&bianjie.isEmpty(SingleSquare2.location.X/SingleSquareSize-1,SingleSquare2.location.Y/SingleSquareSize)&&bianjie.isEmpty(SingleSquare3.location.X/SingleSquareSize-1,SingleSquare3.location.Y/SingleSquareSize)&&bianjie.isEmpty(SingleSquare4.location.X/SingleSquareSize-1,SingleSquare4.location.Y/SingleSquareSize)){Erase(bianjie.winHandle);SingleSquare1.location=newPoint(SingleSquare1.location.X-SingleSquareSize,SingleSquare1.location.Y);SingleSquare2.location=newPoint(SingleSquare2.location.X-SingleSquareSize,SingleSquare2.location.Y);SingleSquare3.location=newPoint(SingleSquare3.location.X-SingleSquareSize,SingleSquare3.location.Y);SingleSquare4.location=newPoint(SingleSquare4.location.X-SingleSquareSize,SingleSquare4.location.Y);Draw(bianjie.winHandle);returntrue;}else//假如不能左移了{returnfalse;}}publicboolright(){//检测是否能够右移if(bianjie.isEmpty(SingleSquare1.location.X/SingleSquareSize+1,SingleSquare1.location.Y/SingleSquareSize)&&bianjie.isEmpty(SingleSquare2.location.X/SingleSquareSize+1,SingleSquare2.location.Y/SingleSquareSize)&&bianjie.isEmpty(SingleSquare3.location.X/SingleSquareSize+1,SingleSquare3.location.Y/SingleSquareSize)&&bianjie.isEmpty(SingleSquare4.location.X/SingleSquareSize+1,SingleSquare4.location.Y/SingleSquareSize)){Erase(bianjie.winHandle);SingleSquare1.location=newPoint(SingleSquare1.location.X+SingleSquareSize,SingleSquare1.location.Y);SingleSquare2.location=newPoint(SingleSquare2.location.X+SingleSquareSize,SingleSquare2.location.Y);SingleSquare3.location=newPoint(SingleSquare3.location.X+SingleSquareSize,SingleSquare3.location.Y);SingleSquare4.location=newPoint(SingleSquare4.location.X+SingleSquareSize,SingleSquare4.location.Y);Draw(bianjie.winHandle);returntrue;}else//假如不能右移了{returnfalse;}}4)旋转方块/*旋转block*/publicvoidRotate(){//保留每个小块位置PointoldPosition1=SingleSquare1.location;PointoldPosition2=SingleSquare2.location;PointoldPosition3=SingleSquare3.location;PointoldPosition4=SingleSquare4.location;//保留目前方向RotateDirectionsoldRotation=myRotation;//开始试着旋转方块,旋转方向:顺时针方向旋转中心点为形状拐点Erase(bianjie.winHandle);switch(blockType){caseBlockTypes.SingleSquare:break;caseBlockTypes.line://直线旋转只有两种方向switch(myRotation){caseRotateDirections.North:myRotation=RotateDirections.East;SingleSquare1.location=newPoint(SingleSquare2.location.X-SingleSquareSize,SingleSquare2.location.Y);SingleSquare3.location=newPoint(SingleSquare2.location.X+SingleSquareSize,SingleSquare2.location.Y);SingleSquare4.location=newPoint(SingleSquare2.location.X+2*SingleSquareSize,SingleSquare2.location.Y);break;caseRotateDirections.East:myRotation=RotateDirections.North;SingleSquare1.location=newPoint(SingleSquare2.location.X,SingleSquare2.location.Y-SingleSquareSize);SingleSquare3.location=newPoint(SingleSquare2.location.X,SingleSquare2.location.Y+SingleSquareSize);SingleSquare4.location=newPoint(SingleSquare2.location.X,SingleSquare2.location.Y+2*SingleSquareSize);break;}break;caseBlockTypes.J://J形方块有四种旋转方向switch(myRotation){caseRotateDirections.North:myRotation=RotateDirections.East;SingleSquare1.location=newPoint(SingleSquare3.location.X+2*SingleSquareSize,SingleSquare3.location.Y);SingleSquare2.location=newPoint(SingleSquare3.location.X+SingleSquareSize,SingleSquare3.location.Y);SingleSquare4.location=newPoint(SingleSquare3.location.X,SingleSquare3.location.Y-SingleSquareSize);break;caseRotateDirections.East:myRotation=RotateDirections.South;SingleSquare1.location=newPoint(SingleSquare3.location.X,SingleSquare3.location.Y+2*SingleSquareSize);SingleSquare2.location=newPoint(SingleSquare3.location.X,SingleSquare3.location.Y+SingleSquareSize);SingleSquare4.location=newPoint(SingleSquare3.location.X+SingleSquareSize,SingleSquare3.location.Y);break;caseRotateDirections.South:myRotation=RotateDirections.West;SingleSquare1.location=newPoint(SingleSquare3.location.X-2*SingleSquareSize,SingleSquare3.location.Y);SingleSquare2.location=newPoint(SingleSquare3.location.X-SingleSquareSize,SingleSquare3.location.Y);SingleSquare4.location=newPoint(SingleSquare3.location.X,SingleSquare3.location.Y+SingleSquareSize);break;caseRotateDirections.West:myRotation=RotateDirections.North;SingleSquare1.location=newPoint(SingleSquare3.location.X,SingleSquare3.location.Y-2*SingleSquareSize);SingleSquare2.location=newPoint(SingleSquare3.location.X,SingleSquare3.location.Y-SingleSquareSize);SingleSquare4.location=newPoint(SingleSquare3.location.X-SingleSquareSize,SingleSquare3.location.Y);break;}break;caseBlockTypes.L://L形方块有四种旋转方向switch(myRotation){caseRotateDirections.North:myRotation=RotateDirections.East;SingleSquare1.location=newPoint(SingleSquare3.location.X+2*SingleSquareSize,SingleSquare3.location.Y);SingleSquare2.location=newPoint(SingleSquare3.location.X+SingleSquareSize,SingleSquare3.location.Y);SingleSquare4.location=newPoint(SingleSquare3.location.X,SingleSquare3.location.Y+SingleSquareSize);break;caseRotateDirections.East:myRotation=RotateDirections.South;SingleSquare1.location=newPoint(SingleSquare3.location.X,SingleSquare3.location.Y+2*SingleSquareSize);SingleSquare2.location=newPoint(SingleSquare3.location.X,SingleSquare3.location.Y+SingleSquareSize);SingleSquare4.location=newPoint(SingleSquare3.location.X-SingleSquareSize,SingleSquare3.location.Y);break;caseRotateDirections.South:myRotation=RotateDirections.West;SingleSquare1.location=newPoint(SingleSquare3.location.X-2*SingleSquareSize,SingleSquare3.location.Y);SingleSquare2.location=newPoint(SingleSquare3.location.X-SingleSquareSize,SingleSquare3.location.Y);SingleSquare4.location=newPoint(SingleSquare3.location.X,SingleSquare3.location.Y-SingleSquareSize);break;caseRotateDirections.West:myRotation=RotateDirections.North;SingleSquare1.location=newPoint(SingleSquare3.location.X,SingleSquare3.location.Y-2*SingleSquareSize);SingleSquare2.location=newPoint(SingleSquare3.location.X,SingleSquare3.location.Y-SingleSquareSize);SingleSquare4.location=newPoint(SingleSquare3.location.X+SingleSquareSize,SingleSquare3.location.Y);break;}break;caseBlockTypes.T://T形方块也有四种旋转方向switch(myRotation){caseRotateDirections.North:myRotation=RotateDirections.East;SingleSquare1.location=newPoint(SingleSquare2.location.X,SingleSquare2.location.Y-SingleSquareSize);SingleSquare3.location=newPoint(SingleSquare2.location.X,SingleSquare2.location.Y+SingleSquareSize);SingleSquare4.location=newPoint(SingleSquare2.location.X-SingleSquareSize,SingleSquare2.location.Y);break;caseRotateDirections.East:myRotation=RotateDirections.South;SingleSquare1.location=newPoint(SingleSquare2.location.X+SingleSquareSize,SingleSquare2.location.Y);SingleSquare3.location=newPoint(SingleSquare2.location.X-SingleSquareSize,SingleSquare2.location.Y);SingleSquare4.location=newPoint(SingleSquare2.location.X,SingleSquare2.location.Y-SingleSquareSize);break;caseRotateDirections.South:myRotation=RotateDirections.West;SingleSquare1.location=newPoint(SingleSquare2.location.X,SingleSquare2.location.Y+SingleSquareSize);SingleSquare3.location=newPoint(SingleSquare2.location.X,SingleSquare2.location.Y-SingleSquareSize);SingleSquare4.location=newPoint(SingleSquare2.location.X+SingleSquareSize,SingleSquare2.location.Y);break;caseRotateDirections.West:myRotation=RotateDirections.North;SingleSquare1.location=newPoint(SingleSquare2.location.X-SingleSquareSize,SingleSquare2.location.Y);SingleSquare3.location=newPoint(SingleSquare2.location.X+SingleSquareSize,SingleSquare2.location.Y);SingleSquare4.location=newPoint(SingleSquare2.location.X,SingleSquare2.location.Y+SingleSquareSize);break;}break;caseBlockTypes.Z://Z形方块有两种旋转方向switch(myRotation){caseRotateDirections.North:myRotation=RotateDirections.East;SingleSquare1.location=newPoint(SingleSquare2.location.X,SingleSquare2.location.Y-SingleSquareSize);SingleSquare3.location=newPoint(SingleSquare2.location.X-SingleSquareSize,SingleSquare2.location.Y);SingleSquare4.location=newPoint(SingleSquare2.location.X-SingleSquareSize,SingleSquare2.location.Y+SingleSquareSize);break;caseRotateDirections.East:myRotation=RotateDirections.North;SingleSquare1.location=newPoint(SingleSquare2.location.X-SingleSquareSize,SingleSquare2.location.Y);SingleSquare3.location=newPoint(SingleSquare2.location.X,SingleSquare2.location.Y+SingleSquareSize);SingleSquare4.location=newPoint(SingleSquare2.location.X+SingleSquareSize,SingleSquare2.location.Y+SingleSquareSize);break;}break;caseBlockTypes.S://S形方块有两种旋转方向switch(myRotation){caseRotateDirections.North:myRotation=RotateDirections.East;SingleSquare1.location=newPoint(SingleSquare3.location.X+SingleSquareSize,SingleSquare3.location.Y+SingleSquareSize);SingleSquare2.location=newPoint(SingleSquare3.location.X+SingleSquareSize,SingleSquare3.location.Y);SingleSquare4.location=newPoint(SingleSquare3.location.X,SingleSquare3.location.Y-SingleSquareSize);break;caseRotateDirections.East:myRotation=RotateDirections.North;SingleSquare1.location=newPoint(SingleSquare3.location.X-SingleSquareSize,SingleSquare3.location.Y+Sin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论