




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
. 精选范本 C 语语言言课课程程设设计计 报报告告 设计题目:设计题目: 俄罗斯方块游戏设计 院院 系:系: 班班 级:级: 学学 号:号: 姓姓 名:名: 指导教师:指导教师: 设计地点:设计地点: 开课时间:开课时间: . 精选范本 学学生生姓姓名名 成成绩绩 评评语语: 指指导导教教师师(签名)(签名) 年年 月月 日日 . 精选范本 目目录录 1 1. .设设计计目目的的和和任任务务 .- 1 - 1.11.1 目的目的: .- 1 - 1.21.2 任务:任务: .- 1 - 2 2. .开开发发环环境境 .- 1 - 2 2. .1 1 硬硬件件环环境境: .- 1 - 2 2. .2 2 软软件件环环境境: .- 1 - 3.3.设计题目设计题目.- 2 - 3 3. .1 1 题题目目名名称称 :.- 2 - 3 3. .2 2 题题目目详详细细描描述述 :.- 2 - 3 3. .3 3 功功能能要要求求 : .- 2 - 4.4.相关技术以及知识点相关技术以及知识点 .- 3 - 4.14.1 编写编写 BLOCKBLOCK 类:类: .- 3 - 4 4. .2 2 P PA AT TH HG GR RA AD DI IE EN NT TB BR RU US SH H 类类: .- 3 - 4 4. .3 3 R RA AN ND DO OM M 类类: .- 3 - 4 4. .4 4 G GD DI I 图图形形处处理理: .- 3 - 5. 设设计计与与实实现现 .- 4 - 5 5. .1 1 设设计计流流程程图图 .- 4 - 5 5. .2 2 游游戏戏主主体体界界面面 .- 4 - 5 5. .3 3 游游戏戏图图形形界界面面 .- 11 - 5 5. .4 4 图图形形的的移移动动与与消消行行 .- 13 - 5 5. .5 5 得得分分的的实实现现 .- 15 - 6 6总总结结 .- 16 - 7 7参参考考资资料料 .- 16 - . 精选范本 1 1. .设设计计目目的的和和任任务务 1.1 目的: 在现今电子信息高速发展的时代,电子游戏已深入人们的日常生活,成为老少皆宜的娱乐方 式。俄罗斯方块,是一款风靡全球的游戏,最初是由苏联人制作的,规则简单,容易上手,且游 戏过程变化无穷,可以让玩家充分感受游戏中的乐趣。 在游戏设计方面,俄罗斯方块是游戏编程的入门项目,因为它可以检验编辑人员对开发 语言、环境和基本数据结构知识熟练程度。 1.2 任务: 使用 C#C#语言编写一个俄罗斯方块游戏系统,要求程序运行后有一个图形用户界面,并具备下 面几个功能: (1) 实现各种方块的生产,包括形状和颜色等信息; (2) 实现各个方块的上下左右移动和旋转的功能; (3) 实现消行的功能; (4) 实现开始,暂停,结束等功能。 2 2. .开开发发环环境境 2.1 硬件环境: 服务器 CPU:PIII 500 以上, 内存:256M 客户机 CPU:P200MMX 以上,内存: 32M 以上 2.2 软件环境: Visual Studio2005 .net 2.0 以上以上 . 精选范本 3.3.设计题目设计题目 3.1 题目名称: 俄罗斯方块游戏系统 3.2 题目详细描述: 使用 C#C#语言编写一个俄罗斯方块游戏系统,要求程序运行后有一个图形用户界面,实现各种 方块的生产,包括形状和颜色等信息,完成左右下旋转的功能,在消行的同时分数加 1,在点击 暂停或者按下空格的时候暂停或开始游戏,最后结束游戏。 3.3 功能要求: 功能(1) 实现各种方块的生产,包括形状和颜色等信息; (2) 实现各个方块的上下左右移动和旋转的功能; (3) 实现消行的功能; (4) 实现时间和得分的统计功能; (5) 实现开始,暂停,结束等功能; 要求(1) 编写程序要严格按照 C#C#编程规范进行代码编写。 (2) 必须按照个体软件的过程,编写有关的文档。 (3) 按照老师的要求,每个人必须独立完成。 (4) 按照实训的时间安排进行实训,实训结束后提交有关的表格与文档 . 精选范本 4.4.相关技术以及知识点相关技术以及知识点 4.1 编写 Block 类: 在游戏项目规范说明书所创建的类图中定义了 Block 类,现在可以把它编写为最终的类接口 形式,包括属性的数据类型以及方法所使用参数的数据类型。 每个确定的方块都与正方形的某种特定排列方式相对应,因此可以考虑 Block 类的 3 个新成 员:BlockType 属性、方块类型的枚举集合、构造函数(用以在期望的位置、使用期望的色彩创建 每个正方形)。为了给玩家一个清楚的视觉提示,每种类型的方块颜色应该是固定的,因此创建一 个数组来保存每种类型方块的前景色和背景色是一种较好的想法。 4.2 PathGradientBrush 类: 封装 Brush 对象,它通过渐变填充 GraphicsPath 对象的内部。 彩色渐变是从路径的中点到路径的外边界边缘的平滑的彩色渐变。混合因子、位置和样式影 响渐变起始和结束的位置,并且影响渐变变化的速度。 路径渐变画笔不遵循用于执行绘制操作的 Graphics 对象的 SmoothingMode 属性。无论是否 用平滑模式,用 PathGradientBrush 对象填充的区域都以同样的方式呈现。 4.3 Random 类: 伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,因 为它们是用一种确定的数学算法选择的,但是从实用的角度而言,其随机程度已足够了。Random 类的当前实现基于 Donald E.Knuth 的减法随机数生成器算法。 随机数的生成是从种子值开始。如果反复使用同一个种子,就会生成相同的数字系列。产生 不同序列的一种方法是使种子值与时间相关,从而对于 Random 的每个新实例,都会产生不同的 系列。默认情况下,Random 类的无参数构造函数使用系统时钟生成其种子值,而参数化构造函数 可根据当前时间的计时周期数采用 Int32 值。但是,因为时钟的分辨率有限,所以,如果使用无 参数构造函数连续创建不同的 Random 对象,就会创建生成相同随机数序列的随机数生成器。 通过创建单个而不是多个 Random 对象可以避免此问题。 若要提高性能,请创建一个随时间推移能生成多个随机数的 Random 对象,而不要反复新建 会生成同一个随机数的 Random 对象。 4.4 GDI 图形处理 : GDI+提供了一个抽象层,隐藏了不同视频卡之间的区别,这样就可以调用 Windows API 函数 完成指定的任务了,GDI 还在内部指出在运行特定的代码时,如果让客户机的视频卡完成要绘制 的图形。GDI 还可以完成其他任务。大多数计算机都有多个显示设备-监视器、打印机。GDI 成 功的使应用程序所使用的打印机看起来与屏幕一样。如果要打印某些东西,而不是显示他们,只 需告诉系统输出设备是打印机,再用相同的方式调用相同的 Windows API 函数可以。 . 精选范本 5. 设设计计与与实实现现 5.1 设计流程图 图 5.1.1 5.2 游戏主体界面 图 5.2.1 . 精选范本 主界面关键部分代码 : namespace 俄罗斯方块 public partial class Form1 : Form public Form1() InitializeComponent(); static public int, mainField; static public int row = 20; /数组 mainField,的行 static public int line = 15; /数组 mainField,的列 private Block currentBlock; /主界面中活动的方块 private Block nextBlock; /副界面中的方块 private int level = 1; private int score = 0; /菜单栏中 NewGame private void menuItemNew_Click(object sender, EventArgs e) NewGame(); /菜单栏中 Start,在暂停之后使用,继续进行游戏 private void menuItemStart_Click(object sender, EventArgs e) timerInterval.Start(); menuItemStart.Enabled = false; menuItemPause.Enabled = true; btnPause.Text = Pause; . 精选范本 /菜单栏中 Pause,用于暂停游戏 private void menuItemPause_Click(object sender, EventArgs e) timerInterval.Stop(); menuItemStart.Enabled = true; menuItemPause.Enabled = false; btnPause.Text = Start; /菜单栏中 Exit,用于推出游戏 private void menuItemExit_Click(object sender, EventArgs e) this.Close(); Application.Exit(); /菜单栏中 beginner model private void menuItemBeginer_Click(object sender, EventArgs e) NewGame(); level = 1; timerInterval.Interval = 500 / level; labeLevelVisual.Text = Convert.ToString(level); /菜单栏中 normal model private void menuItemNormal_Click(object sender, EventArgs e) NewGame(); level = 2; timerInterval.Interval = 500 / level; labeLevelVisual.Text = Convert.ToString(level); . 精选范本 /菜单栏中 insane model private void menuItemInsane_Click(object sender, EventArgs e) NewGame(); level = 3; timerInterval.Interval = 500 / level; labeLevelVisual.Text = Convert.ToString(level); private void menuItemOnMusic_Click(object sender, EventArgs e) private void menuItemOffMusic_Click(object sender, EventArgs e) /菜单栏中的 config 选项 private void menuItemConfig_Click(object sender, EventArgs e) if (!GameIsOver() timerInterval.Stop(); MessageBox.Show(Left: Arrow()nnRight: Arrow()nnDown: Arrow()nnRotate: Arrow(); timerInterval.Start(); else MessageBox.Show(Left: Arrow()nnRight: Arrow()nnDown: Arrow()nnRotate: Arrow(); . 精选范本 /菜单栏中的 version 选项 private void picBoxMainField_Click(object sender, EventArgs e) /picBoxMainField.Focus(); /focus private void picBoxMainField_Paint(object sender, PaintEventArgs e) /若没有此句 ,键盘焦点不能移到 picBoxMainField 中 picBoxMainField.Focus(); private void labeLevelVisual_Click(object sender, EventArgs e) private void labScoreVisual_Click(object sender, EventArgs e) /主界面中的 Pause 按钮 private void btnPause_Click(object sender, EventArgs e) /按钮 btnPause 点击 Pause 后显示 Start if (btnPause.Text = Pause) timerInterval.Stop(); btnPause.Text = Start; menuItemPause.Enabled = false; . 精选范本 menuItemStart.Enabled = true; /按钮 btnPause 点击 Start 后显示 Pause else if (btnPause.Text = Start) timerInterval.Start(); btnPause.Text = Pause; menuItemPause.Enabled = true; menuItemStart.Enabled = false; /主界面中的 NewGame 按钮 private void btnNewGame_Click(object sender, EventArgs e) NewGame(); /主界面中的 Exit 按钮 private void btnExit_Click(object sender, EventArgs e) this.Close(); Application.Exit(); /Null private void Form1_Load(object sender, EventArgs e) /Null private void Form1_KeyDown(object sender, KeyEventArgs e) . 精选范本 /显示 newGame,这里是必须的 private void Form1_Shown(object sender, EventArgs e) NewGame(); /新游戏 private void NewGame() mainField = new introw, line; /申请一个新的数组,存储整个界面方块信 息 for (int i = 0; i row; i+) for (int j = 0; j line; j+) mainFieldi, j = 0; level = 1; /游戏下落速度等级 score = 0; /消去行数 timerInterval.Interval = 500 / level; /时间间隔随 着等级增加而减少 labeLevelVisual.Text = level.ToString(); /将等级显示在 label 上 labScoreVisual.Text = score.ToString(); /将分数显示再 label 上 menuItemNew.Enabled = false; /菜单按钮 new game 不能点击 menuItemPause.Enabled = true; /菜单按钮 Pause 可以点击 btnPause.Text = Pause; btnPause.Enabled = true; /主界面按钮 pause 可以点击 timerInterval.Start(); /计时器开始计时 . 精选范本 this.Refresh(); /刷新界面 currentBlock = new Block(); currentBlock.MoveToCenterScreen(); /为了美观,将方块出现的位置移动 到中间 do nextBlock = new Block(); while (nextBlock.Type = currentBlock.Type); /防止主界面中与副界面中 出现的 block 相同 /先后绘制副主界面中的 block nextBlock.DrawBlock(picBoxSubField.CreateGraphics(); currentBlock.DrawBlock(picBoxMainField.CreateGraphics(); 5.3 游戏图形界面 一共七个图形 图 5.3.1 图形部分设计代码(此类代码太多,文档中只列举其中一个) private class Block private Brick, Shape; private Point left; private Point right; private Point top; private Point bottom; private int type; public int Type . 精选范本 get return type; set type = value; public Block() Shape = new Brick4, 4; for (int i = 0; i 4; i+) for (int j = 0; j 4; j+) Shapei, j = new Brick(); Random RandType = new Random(); type = RandType.Next(1, 20); switch (type) case 1: / / / / Shape0, 0.X = 0; Shape0, 0.Y = 0; for (int i = 0; i = 0; j-) if (Shapei, j.Filled = true) if (mainFieldShapei, j.Y + 1, Shapei, j.X = 1) canDown = false; return canDown; . 精选范本 消行方面代码示例: private void ClearLine() int lines = 0; /同时消失的行数 int bricks; /同一行中的砖块 brick 数 for (int i = row-1; i = 0; i-) bricks = 0; for (int j = line-1; j = 0; j-) if (mainFieldi, j = 1) bricks+; if (bricks = line) /如果同一行中的砖块 brick 个数达到了行数 line, 即该行满行 lines+; for(int j=line-1;j=0;j-) mainFieldi,j=0; /将该行全部赋值为 0,即消除该行 for(int m=i;m0;m-) for(int j=line-1;j=0;j-) mainFieldm,j=mainFieldm-1,j; /将该行以上各行, 均向下一行移动一行,这里用赋值完成 i+; /检查下一行 . 精选范本 5.5 得分的实现 if (lines = 1) /如果同时消除 1 行,得 1 分 score += 1; if (lines = 2) /如果同时消除 2 行,得 3 分 score += 3; if (l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民转幼儿园后勤工作总结与纸尿裤售后培训
- 关于名人的爱情故事
- 2026届内蒙古呼伦贝尔市九年级化学第一学期期末学业水平测试模拟试题含解析
- 街道亮点工作总结
- 2026届重庆市南开融侨中学九年级化学第一学期期末复习检测试题含解析
- 研发中心年终总结报告
- 浙江省宁波市鄞州区七校2026届九年级英语第一学期期末学业质量监测试题含解析
- 重庆綦江南川巴县2026届化学九年级第一学期期中综合测试模拟试题含解析
- 2026届江西省育华学校九年级英语第一学期期末达标检测模拟试题含解析
- 山东省淄博市沂源县第二中学2024-2025学年高二上学期11月期中考试政治试卷(含答案)
- T-CNAS 12-2020 成人经口气管插管机械通气患者口腔护理
- 神经外科危重症患者的观察与护理
- 做最勇敢的自己
- 《中国象棋基础教程》课件
- 保险销售技巧培训课件
- 《支气管动脉栓塞术》课件
- 2025年河北石家庄市高速公路集团限公司面向社会公开招聘收费人员150名高频重点提升(共500题)附带答案详解
- 地面铺装室外施工合同
- 人员分级管理
- 2024-2025年江苏专转本英语历年真题(含答案)
- 《铁路轨道维护》课件-钢轨母材探伤
评论
0/150
提交评论