《俄罗斯方块--程序设计基础课程设计.doc》由会员分享,可在线阅读,更多相关《俄罗斯方块--程序设计基础课程设计.doc(22页珍藏版)》请在金锄头文库上搜索。
1、 工业学院 课程设计报告课程设计报告 课程名称课程名称程序设计基础课程设计 项目名称项目名称俄罗斯课程设计 姓姓 名名 班班 级级 学学 号号 指导教师指导教师 设计时间设计时间年 月日 至 年 月 日 工业学院 计算机工程学院 工业学院 程序设计基础课程设计 目录目录 目录目录 I 摘要摘要 I 序言序言 II 人员分工安排人员分工安排 III 1 1 需求分析 需求分析 1 1 1 游戏方块需求 1 1 2 游戏控制的需求 1 2 设计思路 设计思路 2 2 1 方块 2 2 2 主要操作 2 3 详细设计 详细设计 4 3 1 设计流程图 4 3 2 函数功能图 5 4 运行调试与分析讨
2、论 运行调试与分析讨论 6 4 1 游戏界面 6 5 设计体会与小结 设计体会与小结 8 工业学院 程序设计基础课程设计 摘要摘要 近年来 随着游戏产业的突飞猛进 游戏玩家的技术也是与日俱增 当你看见 游戏高手完美的表演时 你是否想过我也能达到那种水平 本程序采用全世界最金典 的游戏 俄罗斯方块作为背景 程序设置了键盘选择方式 游戏运行时随着等级的提 高而速度加快 这需要玩家快速操作 因此 本程序主要意义是为高手玩家提供训练 平台 其次也可为刚踏入游戏领域的新手们 提供一个很好的锻炼机会 本次课程设 计主要解决利用 C 语言设计实现俄罗斯方块游戏的算 法 游戏内部功能 游戏区域 的绘图的程序设
3、计 对于每个俄罗斯方块各自的形态变化改变到下一个形态利用数组 来实现 在程序设计中 直接从架构的其中一个类对象中继承下来 将它完善而变成 有某功能特性的物件对象 关键词 关键词 俄罗斯方块 数组 数据结构 算法 工业学院 程序设计基础课程设计 I 序言序言 俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏 它曾造成的 轰动 与造成的经济价值可言说是游戏史上的一件大事 这款游戏最初是由苏联的游戏制作 人 Alex Pajitnov 制作的 它看似简单但却变化无穷 令人上瘾 相信大多数用户都 还记得为它痴迷得茶饭不思不想的那个俄罗斯方块时代 俄罗斯方块最早还是出现在 PC 机上 而我国的用户都
4、是通过红白机了解 喜欢上它的 现在联众又将重新掀起 这股让人沉迷的俄罗斯方块风潮 对于一般用户来说 它的规则简单 容易上手 且 游戏过程变化无穷 俄罗斯方块游戏现在基本上是每个手机必备的游戏 种类千变万 化 多种多样俄罗斯方块是个老幼皆宜的小游戏 是经久不衰的一款游戏 自从它诞 生 那天起就一直深受人们的喜爱 几乎每个人都玩过这个游戏 也是人们接触最多 的一款游戏 它实现由四块正方形的色块组成 然后存储在一个数组的四个元素中 计算机随机产生不同七种类型的方块 根据计算机时钟控制它在一定的时间不停得产 生 用户根据键盘的四个方向翻转 向左 向右和向下操作 控制键的实现是由键 盘的方向键实现 然后
5、程序根据这七种方块堆叠成各种不停得模型 可以吸引更多 的小玩家 让人觉得更加的有趣 使人的视觉得到冲击 更加的轻松 工业学院 程序设计基础课程设计 II 人员分工安排人员分工安排 1 1 小组负责人 小组负责人 分工 分工 调试与检查 2 2 小组成员 小组成员 1 1 分工 分工 界面设计 3 3 小组成员 小组成员 2 2 分工 分工 方块的设计与变形 工业学院 程序设计基础课程设计 0 1 1 需求分析 需求分析 1 1 游戏方块需求游戏方块需求 随机给出不同的形状 长条形 Z 字形 反 Z 形 田字形 7 字形 反 7 形 T 字 型 下落填充给定的区域 若填满一条便消掉 记分 当达到
6、一定的分数时 过关 1 2 游戏控制的需求游戏控制的需求 游戏控制分为多个方面 包括画面绘制 控制命令的获取 控制命令的分配 控 制命令的处理 方块的绘制 方块的移动 方块的旋转 方块下落和消层以及计分等 工业学院 程序设计基础课程设计 1 2 设计思路 设计思路 方块要实现变形 要能通过键盘接收变形指令 即上键 将所得信号传递给信 号接收函数 再通过信号处理函数改变当前方块的 ID 值 最后根据新的 ID 值画出新 的图形 此时即实在了方块的变形 2 1 方块 方块 每个方块都要记录自己的 ID 形状 形状采用 4 对整数坐标来表示 分别记录 其 4 个小方块的相对位置 以方块内或旁边任一点
7、为中心 称为参考点 建议可以 在方块类中定义一个或多个数组 将每种 ID 的方块的形状数据存储好 都是一些固 定的数据 这样产生一个方块时只需要提供其 ID 即可 为了处理方块的旋转 我 们不能只记录上述 7 种方块 而应该把它们旋转后产生的每种形状都认为是一种不 同的方块 因为它们的 4 对坐标都不同 然后在方块 ID 之间建立映射关系 即哪 种 ID 的方块旋转后变成哪种 ID 的方块 只要求处理一个方向的旋转 这个映射关系 也可以用 c 数组来实现 此外 方块还要记录自己的参考点在指定的游戏区域中的位 置 2 2 主要操作 主要操作 填充 把自己填充到指定的游戏区域中 返回填充成功或失败
8、的信息 清除 把自己从指定的游戏区域中清除 移动 在指定的游戏区域中移动 包括向左 右 下移动 以 1 个单元格为单位 如果可以移动 则修改参考点的位置 并在指定的游戏区域中重新填充自己 先清 除 然后修改参考点位置 再填充 返回是否移动成功的信息 旋转 在指定的游戏区域中旋转一次 此时参考点位置不变 但要改变自己的 I D 然后在指定的游戏区域中重新填充自己 先清除 然后修改参考点位置 再填充 工业学院 程序设计基础课程设计 2 资 数 源 据 消息控制信息 显 数 示 据 3 1 设计思路图 资源文件 用户操作按 键 游戏事件处理游戏资源 控制系统 屏幕显示 工业学院 程序设计基础课程设计
9、 3 3 详细设计 详细设计 3 1 设计流程图设计流程图 否 否 是 开始 随机出示方块显 示下一个方块 结算分数 结束处理 实现方块的旋转 加分 速度改变 时间指针设定 判断是否 已满 判断是 否到底 游戏结束 工业学院 程序设计基础课程设计 4 3 1 设计流程图 3 2 函数功能图函数功能图 3 2 函数功能图 界面 设置 俄罗斯方块 随机显示 方块并显 示下一个 方块的旋 转移动下 落 判断能否 继续下落 分数的改 变和速度 的设置 工业学院 程序设计基础课程设计 5 4 运行调试与分析讨论 运行调试与分析讨论 4 1 游戏界面游戏界面 图 4 1 游戏开始界面 图 4 2 游戏运行
10、界面 工业学院 程序设计基础课程设计 6 图 4 3 游戏结束界面 工业学院 程序设计基础课程设计 7 5 设计体会与小结 设计体会与小结 本次课程设计 用 c 语言实现了一个简易的俄罗斯方块游戏 了解了 c 语言的强 大特性 游戏是在速度上的高效性 是其他编程语言无法企及的 需求分析 概要设 计 详细设计在编程中的重要性是不言而喻的 正确 高效的分析 设计为后面的编 程打下了坚实的基础 后面的工作就顺利成章了 当然 在需求分析 概要设计 详 细设计阶段是需要通过不断的讨论 论证来对项目进行更改的代码实现阶段就是软件 的具体实现 通过编码来实现需求中的功能 在代码实现阶段可能会遇到各种问题 此
11、时有可能就要对需求设计乃至需求分析进行更改 测试阶段同样重要 在本次软件 设计中 在测试阶段就发现了游戏测试错误问题 后来想到了通过修改程序 for j 0 j 3 j if l i j 1 gotoxy x j y i printf c TUAN else continue void L int x int y 摸去该方块 int i j for i 0 i 3 i for j 0 j 3 j if l i j 1 gotoxy x j y i printf if l i j 1 工业学院 程序设计基础课程设计 8 if biaoji y i 1 x j 1 d 1 if y c 1 Yma
12、p d 1 L x y break y L x y break Sleep 25 L x y if y c 1 Ymap d 1 y break for i 0 i 3 i for j 0 j 3 j if l i j 1 biaoji y i x j 1 void I move 同 L move int x Xmap 2 1 int y 0 int a b int c d e f c 0 d 0 工业学院 程序设计基础课程设计 9 e 0 y O x y Sleep times for i 0 i 2 i for j 0 j e e j if biaoji y i 1 x j 1 d 1 i
13、f y c 1 Ymap d 1 break O x y while kbhit 1 f 0 key keydown switch key case LEFT for i 0 i 2 i for j 0 j 2 j if o i j 1 if biaoji y i x j 1 1 f 1 if x 1 0 f 1 O x y break 工业学院 程序设计基础课程设计 10 x O x y break case RIGHT for i 0 i 2 i for j 0 j 2 j if o i j 1 if biaoji y i x j 1 1 f 1 if x e 1 Xmap f 1 O x
14、 y break x O x y break case DOWN for i 0 i 2 i for j 0 j 2 j if o i j 1 if biaoji y i 1 x j 1 d 1 if y c 1 Ymap d 1 O x y break y O x y break 工业学院 程序设计基础课程设计 11 Sleep 25 O x y if y c 1 Ymap d 1 y break for i 0 i 2 i for j 0 j 2 j if o i j 1 biaoji y i x j 1 void Z move 同 L move int x Xmap 2 1 int y
15、0 int i j int c d e f Z x y Sleep 500 Z x y while 1 c 0 d 0 e 0 y Z x y Sleep times for i 0 i 3 i for j 0 j e e j if biaoji y i 1 x j 1 d 1 if y c 1 Ymap d 1 break Z x y while kbhit 1 f 0 key keydown switch key case LEFT for i 0 i 3 i for j 0 j 3 j if z i j 1 if biaoji y i x j 1 1 f 1 if x 1 0 f 1 Z
16、 x y 此函数操作游戏进程 void youxiguocheng int j int queue 2 0 0 Wall 工业学院 程序设计基础课程设计 13 queue 0 rand 5 1 while 1 for j 0 j Xmap j if biaoji 1 j 1 break if biaoji 1 j 1 break queue 1 rand 5 1 switch queue 1 case 1 L Xmap 4 Ymap 4 5 break case 2 I Xmap 4 Ymap 4 5 break case 3 O Xmap 4 Ymap 4 5 break case 4 Z Xmap 4 Ymap 4 5 break case 5 T Xmap 4 Ymap 4 5 break switch queue 0 case 1 L move xiaochu break case 2 I move xiaochu break case 3 O move 工业学院 程序设计基础课程设计 14 xiaochu break case 4 Z move xiaochu break c