免费预览已结束,剩余15页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 语语 言言 课课 程程 设设 计计 报报 告告 设计题设计题目:目: 俄罗斯方块游戏设计 院院 系:系: 班班 级级: : 学学 号:号: 姓姓 名:名: 指指导导教教师师: : 设计设计地点:地点: 开开课时间课时间: : _ 精品资料 学学生生姓姓名名 成成绩绩 评评语语: : 指指导导教教师师( (签签名)名) 年年 月月 日日 _ 精品资料 目目录录 1.设设计计目目的的和和任任务务.- 1 - 1.1 目的:目的: .- 1 - 1.2 任任务务: : .- 1 - 2.开开发发环环境境.- 1 - 2.1 硬硬件件环环境境: :.- 1 - 2.2 软软件件环环境境: :.- 1 - 3.设计题设计题目目.- 2 - 3.1 题题目目名名称称: :.- 2 - 3.2 题题目目详详细细描描述述: :.- 2 - 3.3 功功能能要要求求: : .- 2 - 4.相关技相关技术术以及知以及知识识点点 .- 3 - 4.1 编编写写 BLOCK 类类: :.- 3 - 4.2 PATHGRADIENTBRUSH 类类: :.- 3 - 4.3 RANDOM 类类: : .- 3 - 4.4 GDI 图图形形处处理理: : .- 3 - 5. 设设计计与与实实现现 .- 4 - 5.1 设设计计流流程程图图 .- 4 - 5.2 游游戏戏主主体体界界面面 .- 4 - 5.3 游游戏戏图图形形界界面面 .- 11 - 5.4 图图形形的的移移动动与与消消行行 .- 13 - 5.5 得得分分的的实实现现 .- 15 - 6 总总结结.- 16 - 7 参参考考资资料料 .- 16 - 移动计算技术与应用课程设计报告 - - 1 - - 1.设设计计目目的的和和任任务务 1.1 目的: : 在现今电子信息高速发展的时代,电子游戏已深入人们的日常生活,成为老少皆宜的娱乐方式。 俄罗斯方块,是一款风靡全球的游戏,最初是由苏联人制作的,规则简单,容易上手,且游戏过程变 化无穷,可以让玩家充分感受游戏中的乐趣。 在游戏设计方面,俄罗斯方块是游戏编程的入门项目,因为它可以检验编辑人员对开 发语言、环境和基本数据结构知识熟练程度。 1.2 任务: 使用 C#语言编写一个俄罗斯方块游戏系统,要求程序运行后有一个图形用户界面,并具备下 面几个功能: (1) 实现各种方块的生产,包括形状和颜色等信息; (2) 实现各个方块的上下左右移动和旋转的功能; (3) 实现消行的功能; (4) 实现开始,暂停,结束等功能。 2.开开发发环环境境 2.1 硬件环境: 服务器 CPU:PIII 500 以上, 内存:256M 客户机 CPU:P200MMX 以上,内存:32M 以上 2.2 软件环境: Visual Studio2005 .net 2.0 以上以上 _ 精品资料 3.设计题设计题目目 3.1 题目名称: : 俄罗斯方块游戏系统 3.2 题目详细描述: : 使用 C#语言编写一个俄罗斯方块游戏系统,要求程序运行后有一个图形用户界面,实现各种 方块的生产,包括形状和颜色等信息,完成左右下旋转的功能,在消行的同时分数加 1,在点击暂停 或者按下空格的时候暂停或开始游戏,最后结束游戏。 3.3 功能要求: : 功能(1) 实现各种方块的生产,包括形状和颜色等信息; (2) 实现各个方块的上下左右移动和旋转的功能; (3) 实现消行的功能; (4) 实现时间和得分的统计功能; (5) 实现开始,暂停,结束等功能; 要求(1) 编写程序要严格按照 C#编程规范进行代码编写。 (2) 必须按照个体软件的过程,编写有关的文档。 (3) 按照老师的要求,每个人必须独立完成。 (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 (lines = 3) /如果同时消除 3 行,得 5 分 score += 5; if (lines = 4) /如果同时消除 4 行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年执业药师中药二模拟试题及答案解析温里药
- 2025年特种设备培训试题及答案
- 2025年宁夏国家公务员申论考试真题及答案
- 2025年护士基础理论考试题练习题库(+答案)
- 教师职业道德反思报告范例
- 企业内部沟通优化方案设计
- 2025绿色食品行业市场发展分析及前景趋势与投资机会研究报告
- 2025纺织服装行业市场发展分析及前景趋势与投资机会分析报告
- 2025碳捕集与封存技术商业化应用障碍与对策研究报告
- 2025年云南省昭通市新《安全生产法》理论考试试卷及答案
- 短视频创意策划方案
- 2025 年大学动物医学(动物寄生虫)下学期期末测试卷
- 2025年教师招聘考试(行政职业能力测验)历年参考题库含答案详解
- 2026年山东化工职业学院单招职业技能考试题库附答案
- 蓄力扬帆 增长可期-中国企业在拉美投资调研
- 员工离职流程及薪资结算标准
- 【《高血压脑出血患者超早期康复护理的分析进展》5100字】
- 产品生命周期管理表格产品更新换代决策参考
- 2025年国考税务面试真题及答案
- 中国石化安全员考试题库完整版及答案解析
- 知道网课《气的世界-太极健康探秘(上海中医药大学)》课后章节测试答案
评论
0/150
提交评论