




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C C# #课课程程实实训训 报报告告 ( 2013 - 2014 年度第年度第 1 学期学期) 专业专业软件工程软件工程 学生姓名学生姓名 班级班级 学号学号 指导教师指导教师 完成日期完成日期 C#课程实训报告 目目 录录 目 录2 1 设计目的1 2 设计内容1 3 实现方法1 3.1 程序概述.1 3.2 游戏的概要设计.3 3.3 游戏的详细设计及编码.4 3.4 开发环境.33 4 小 结34 C#课程实训报告 1 C#C#课程实训报告课程实训报告 1 设计目的 本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上, 旨在深化学生学习的 C#语言课程基本知识,进一步掌握 C#语言程序设计方法,提 高分析问题、解决问题的综合应用能力。 2 设计内容 俄罗斯方块游戏的编制。 3 实现方法 3.1 程序概述 3.1.1 游戏的功能游戏的功能 它的基本功能就是要求玩家先登录窗体输入用户名(ldq)和密码(afafa),如 果正确则登录游戏,如果输错三次则退出游戏。 登录游戏后玩家通过移动或旋转自己窗口内落下的方块,方块在一行堆满后 就可以消掉;如果方块堆积至窗口顶端,则游戏结束。 系统默认设置使用右边的窗口,用光标操作:左箭头左移一格,右箭头右移 一格,上箭头旋转方块,下箭头方块丢下。用户还可以定义自己习惯的按键来操 作游戏。 3.1.2 游戏的预览游戏的预览 游戏运行的登录窗口如图 3-1 所示。 C#语言课程设计 2 图 3-1 登录窗体 游戏运行的主操作界面如图 3-2 所示。 图 3-2 主操作界面 单击 设置 按钮,出现一个对话框,可以设置游戏规则。在操作设置界面中可 以进行键盘设置,还可以进行环境设置,设置游戏的难度。操作界面如图 3-3 所 示。 C#课程实训报告 3 图 3-3 操作设置界面 开始级别(默认是一级) ,级别是 1-10,级别越高方块下落速度越快。 3.2 游戏的概要设计 3.2.1 游戏实现方案游戏实现方案 屏幕上有一个 X 列 Y 层的区域,计算机自动产生多重不同形状的方块,并出 现在区域的最顶端;然后每过一个固定时间向下落一层,玩家可以使用键盘控制 方块向三个方向移动和顺(逆)时针旋转 90。不过前提是方块移动和旋转后的 位置是空的,并且碰触不到提前设置好的边界。当方块落到区域底部或者另一个 方块之上是将停止移动。该方块降落后检查每行是否有满行的现象,如果有,这 一行全部取消方块,将上一层的方块重新画到这一层。随后新的方块产生,当新 方块无处放置时,游戏结束。 3.3.2 游戏逻辑设计游戏逻辑设计 首先是定义与游戏相关的数据的存储方法,分为两个主要的部分:一个是当 前的方块,需要保存位置、当前的旋转状态;另一个是屏幕区域的状态,这可以 用一个二维数组来表示。 其次,分析得到按键的含义,做出响应,响应模块:“左” 、 “右” 、 “下” 、 C#语言课程设计 4 “移动”和“旋转”几个模块,负责改变当前方块的状态的数据;画方块模块: 位置移动后,把方块画到新的位置上;检查模块:在每次改变状态之前,对方块 企图占用的区域进行检查。如果无处可放,则此次移动失败。如果方块到区域底 端了,则应该固定在当前位置,这可以调用前面的画方块模块来实现,同时再再 产生一个方块。这样还需要写一个产生方块的模块。每次当方块到底的时候,都 需要检查一下是否有新的层排满了,如果有,则应该消层。这就又需要写两个模 块,检车是否排满和消层。产生新方块时也需要检查其产生的位置,如果这个位 置已被占用,则游戏结束,这需要调用前面的检查模块来实现。 最后检查系统时间,规定每过一个指定时间间隔就调用一次方块下落模块。 3.3 游戏的详细设计及编码 3.3.1 主界面设计编码主界面设计编码 主界面的作用就是显示本游戏所有的功能菜单项,提供游戏的而显示界面。 在本界面中共设计了 5 种控件,通过这些控件,玩家可以方便的控制游戏,各个 控件的名称、作用和类型如表 3-1 所示。 表 3-1 主界面的控件设计 控件类型控件名称作用 退出 ToolStripMenuItem退出 打开命令 ToolStripMenuItem操作控制 打开音乐 ToolStripMenuItem打开音乐 menustrip 帮助 ToolStripMenuItem帮助 Panel1显示游戏中当前所有方块 panelPanel2显示要出现的下一个方块 Label1显示级别 Label3显示块数 Label5显示行数 Label Label7显示手速 Botton1开始 Botton2打开游戏设置界面 Botton Botton3暂停 Windows media playeraxMediaPlayer1音乐播放器 另外,在界面中还设置了 1 个 TextBox 控件。在界面操作中,把焦点一直防 止在这个控件上,方便用户用键盘操作游戏方块。 在游戏中需要保存用户自定义的一些设置,本游戏中把设置保存到 setting.cob 文件中,并在游戏加载的时候调用。主界面 Load 事件的代码如例程 3-1 所示,游戏设置保存代码如例程 3-2 所示。 例程 3-1 主界面 Load 代码,用到 Initiate 函数进行操作设置初始化。 private void Form1_Load(object sender, EventArgs e) C#课程实训报告 5 this.Initiate(); private void Initiate() try XmlDocument doc = new XmlDocument(); doc.Load(“c:setting.ini“); XmlNodeList nodes = doc.DocumentElement.ChildNodes; this.startLevel = Convert.ToInt32(nodes0.InnerText); keys = new Keys5; for (int i = 0; i = 32 C#课程实训报告 17 break; else foreach (Point p in this.pos) if (p.Y + 1 this.bottomBorder | this.hujip.X, p.Y + 1) canMove = false; break; return canMove; private bool CanRotate(Point pos) bool canRotate = true; foreach (Point p in pos) if (p.X this.leftBorder | p.Ythis.bottomBorder|this.hujip.X,p.Y) canRotate = false; break; C#语言课程设计 18 if (canRotate = true) this.SetLastPos(); return canRotate; private void DelRows() int count = 0; int highRow = 20; int lowRow = -1; int delRow = -1, -1, -1, -1 ; foreach (Point p in this.pos) if (p.Y = highRow | p.Y = lowRow) continue; int i; for (i = 0; i lowRow) lowRow = p.Y; count+; C#课程实训报告 19 if (count 0) /- Graphics gra = con.CreateGraphics(); foreach (Point p in this.lastPos) gra.FillRectangle(new SolidBrush(con.BackColor), p.X * this.unitPix, p.Y * unitPix, 25, 25); foreach (Point p in this.pos) this.DrawOne(p.X,p.Y,this.color,gra); foreach(int i in delRow) if(i0) for(int j =0;j 1) for (int i = lowRow; i highRow + 1; i-) for (int j = 0; j =count;i-) for(int j=0;j2) int midRow=-1; foreach(int row in delRow) if(row != highRow break; C#课程实训报告 21 for(int j=0;j=count;i-) for(int j=0;j=count;i-) for(int j=0;jthis.huji.GetLength(0);j+) this.hujij,i=this.hujij,i-count; this.iorij,i=this.iorij,i-count; for(int i=0;icount;i+) for(int j=0;jthis.huji.GetLength(0);j+) C#语言课程设计 22 this.hujij,i=false; /Helpers1.PlaySound(); con.Invalidate(new Rectangle(0,0,con.Width,( lowRow+1) * this.unitPix); this.rowDelNum += count; /* Cnum = count;*/ public void FixBlock() this.blockNum+; foreach (Point p in this.pos) this.hujip.X, p.Y = true; this.iorip.X, p.Y = this.color; this.DelRows(); public bool GeneBlock(int shapeNo, Point firstPos, Color color) this.SetLastPos(); this.EraseLast(); this.SetPos(shapeNo, firstPos); if (!this.CanRotate(this.pos) this.pos = null; C#课程实训报告 23 return false; else this.color = color; return true; public bool Rotate() bool rotated = true; Point temp = pos0, pos1, pos2, pos3 ; switch (this.shapeNo) case 1: rotated = false; break; case 2: temp0.Offset(2, 2); temp1.Offset(1, 1); temp3.Offset(-1,-1); if(this.CanRotate(temp) this.pos0.Offset(2,2); this.pos1.Offset(1,1); this.pos3.Offset(-1,-1); this.shapeNo=8; C#语言课程设计 24 else rotated=false; break; case 3: temp0.Offset(1,-1); if(this.CanRotate(temp) this.pos0.Offset(1,-1); this.shapeNo=9; else rotated=false; break; case 4: temp0.Offset(2,0); temp1.Offset(0,2); if (this.CanRotate(temp) this.pos0.Offset(2, 0); this.pos1.Offset(0, 2); this.shapeNo = 12; else rotated = false; break; C#课程实训报告 25 case 5: temp2.Offset(-1,0); temp3.Offset(-1,2); if(this.CanRotate(temp) this.pos2.Offset(-1,0); this.pos3.Offset(-1,2); this.shapeNo=13; else rotated=false; break; case 6: temp0.Offset(1,1); temp1.Offset(2,0); temp3.Offset(-1,-1); if (this.CanRotate(temp) this.pos0.Offset(1, 1); this.pos1.Offset(2, 0); this.pos3.Offset(-1, -1); this.shapeNo = 14; else rotated = false; C#语言课程设计 26 break; case 7: temp0.Offset(1, 1); temp2.Offset(-1, -1); temp3.Offset(0, -2); if (this.CanRotate(temp) this.pos0.Offset(1, 1); this.pos2.Offset(-1, -1); this.pos3.Offset(0, -2); this.shapeNo = 17; else rotated = false; break; case 8: temp0.Offset(-2, -2); temp1.Offset(-1, -1); temp3.Offset(1, 1); if(this.CanRotate(temp) temp0.Offset(-2, -2); temp1.Offset(-1, -1); temp3.Offset(1,1); this.shapeNo = 2; C#课程实训报告 27 else rotated=false; break; case 9: temp2.Offset(-1,-1); if (this.CanRotate(temp) this.pos2.Offset(-1,-1); this.shapeNo = 10; else rotated = false; break; case 10: temp3.Offset(-1, 1); if (this.CanRotate(temp) this.pos3.Offset(-1, 1); this.shapeNo = 11; else rotated = false; break; case 11: temp0.Offset(-1, 1); temp2.Offset(1, 1); temp3.Offset(1, -1); if (this.CanRotate(temp) C#语言课程设计 28 this.pos0.Offset(-1, 1); this.pos2.Offset(1, 1); this.pos3.Offset(1, -1); this.shapeNo = 3; else rotated = false; break; case 12: temp0.Offset(-2, 0); temp2.Offset(0, -2); if (this.CanRotate(temp) this.pos0.Offset(-2, 0); this.pos1.Offset(0, -2); this.shapeNo = 4; else rotated = false; break; case 13: temp2.Offset(1, 0); temp3.Offset(1, -2); if (this.CanRotate(temp) this.pos2.Offset(1, 0); this.pos3.Offset(1, -2); C#课程实训报告 29 this.shapeNo = 5; else rotated = false; break; case 14: temp2.Offset(1, 0); temp3.Offset(-1, 2); if (this.CanRotate(temp) this.pos2.Offset(1, 0); this.pos3.Offset(-1, 2); this.shapeNo = 15; else rotated = false; break; case 15: temp1.Offset(-1, -1); temp2.Offset(-1, -1); temp3.Offset(0, -2); if (this.CanRotate(temp) this.pos1.Offset(-1, -1); C#语言课程设计 30 this.pos2.Offset(-1, -1); this.pos3.Offset(0, -2); this.shapeNo = 16; else rotated = false; break; case 16: temp0.Offset(-1, -1); temp1.Offset(-1, 1); temp2.Offset(0, 1); temp3.Offset(2, 1); if (this.CanRotate(temp) this.pos0.Offset(-1, -1); this.pos1.Offset(-1, 1); this.pos2.Offset(0, 1); this.pos3.Offset(2, 1); this.shapeNo = 6; else rotated = false; break; case 17: C#课程实训报告 31 temp0.Offset(1,-1); temp2.Offset(-1,1); temp3.Offset(-2,0); if(this.CanRotate(temp) this.pos0.Offset(1,-1); this.pos2.Offset(-1,1); this.pos3.Offset(-2,0); this.shapeNo=18; else rotated=false; break; case 18: temp0.Offset(-1,-1); temp2.Offset(1,1); temp3.Offset(0,2); if(this.CanRotate(temp) this.pos0.Offset(-1,-1); this.pos2.Offset(1,1); this.pos3.Offset(0,2); this.shapeNo=19; else C#语言课程设计 32 rotated=false; break; case 19: temp0.Offset(-1,1); temp2.Offset(1,-1); temp3.Offset(2,0); if (this.CanRotate(temp) this.pos0.Offset(-1, 1); this.pos2.Offset(1, -1); this.pos3.Offset(2, 0); this.shapeNo = 7; else rotated = fa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 60287-2-2:1995 EN-D Electric cables - Calculation of the current rating - Part 2: Thermal resistance - Section 2: A method for calculating reduction factors for groups o
- 音乐b级考试试题及答案
- 仪表培训考试试题及答案
- 六一周系列活动方案
- 六一外卖联动活动方案
- 六一教育教学活动方案
- 医学超声考试试题及答案
- 六一活动亲子diy活动方案
- 六一活动接球活动方案
- 六一活动评比活动方案
- 2025年内蒙古兴安银铅冶炼有限公司招聘笔试参考题库含答案解析
- 大学生毕业代表演讲稿
- 中成药处方大全-仅作参考
- 净水机产品培训
- 北师大版4四年级下册数学期末复习试卷(5套)
- 《校园防踩踏安全教育班会》课件四套
- 护理实习生岗前动员大会
- 2024-2024-《电子商务系统规划与设计》课程试卷
- 【MOOC】国际商务-暨南大学 中国大学慕课MOOC答案
- 英语词根大全(共910个)
- 2024年北京大学强基计划物理试题(附答案)
评论
0/150
提交评论