已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于 VC 的俄罗斯方块 创业创新 知识管理 Ahead Institute of software and Technology 编 号 090619090619 审定成绩 先锋软件学院 2012 届 毕业设计 论文 题目 基于 VC 的俄罗斯方块 分 院 软 件 分 院 学生姓名 吕志亚 专 业 电 脑 游 戏 班 级 0906 学 号 200900008920 指导教师 易 刚 填表时间 2012 年 03 月 基于 VC 的俄罗斯方块 创业创新 知识管理 Ahead Institute of software and Technology 学生毕业设计 论文 工作自查表 2011 年 11 月 2012 年 4 月检查 学生姓名 吕志亚 专业电脑游戏学号 200900008920 导师姓名 易 刚 职称 讲师导师每周指导次数5 次每次 1 小时 题目名称基于 VC 的俄罗斯方块 作息时间上午8 30 12 00下午 2 00 4 30 晚间 7 00 8 30 个人精力 实际投入 日均工 作小时 7 小时 周均工 作小时 35 小时 缺席 天数 无出勤率 100 已完成主要内容100 待完成主要内容0 毕业设计 论文 工作进度 完成 封面 摘要 引言 第一章 绪论 第二章 可行性研究 第三章 需求分析 第四章 设计基本的游戏 功能 第五章 程序主要功能设 计及按键事件的 控制 第六章 程序设计思想与 流程图 致谢 参考文献 本毕业设计基本完成 存在问题 工作措施 存在问题 在开发设计中存在诸多问题 工作措施 在网上进行了查阅以及学习以及询问导师 指导教师指导教师 签字 日期 日期 年年 月月 日日 基于 VC 的俄罗斯方块 创业创新 知识管理 Ahead Institute of software and Technology 先锋软件学院毕业论文 设计 评阅表 指导教师 评阅人用 论文 设计 名称 学生姓名学号 指导教师或评阅 人 姓名 序号评审项目指标满分评分 1论文 设计 完成量 论文 设计 内容完成量 难易程度符合 教学基本要求 20 2调查与综合 根据论文 设计 任务 能独立查阅文献 资料和从事其它有关调研 有收集 综合 和正确利用各种信息的能力 20 3论文 设计 质量 文章切合选题 材料丰富 内容充实 观 点明确 论据充分 论证严格 构思完整 层次分明 段落 论题间的衔接自然 舒 展 文笔流畅 语言通顺 使用专业术语 准确 图表清楚 符合要求 50 4创新有独特的见解 或有一定应用价值10 总分 评语 明确指出论文 设计 的调研论证材料收集是否适合论点要求 创新点 论文 设计 论证能力 写作水平 同时要明确指出论文 设计 的不足之处及改进方向 评阅人 年 月 1 创业创新 知识管理 Ahead Institute of software and Technology 摘摘 要要 俄罗斯方块是有史以来最伟大的游戏之一 它是永恒的娱乐经典 但它实际上又和那些传统的经 典娱乐方式不同 因为它的本质是电子化的 所以它的确属于现代产物 俄罗斯方块举世闻名的游戏 性 在该游戏新鲜出炉时就显得非常直观 某些与坠落的玩具碎片和它们的形状有关的东西 使得哪 怕新手也会很自然地企图把它们排列起来 并加以适当组合 就好似俄罗斯方块触动了我们某些内在 的感官 使得哪怕是我们当中最杂乱无章的人也要把事情整理妥当 俄罗斯方块是一款风靡全球的掌上游戏机和 PC 机游戏 它造成的轰动与创造的经济价值可以说 是游戏史上的一件大事 它由俄罗斯人阿列克谢 帕基特诺夫发明 故得此名 俄罗斯方块的基本规 则是移动 旋转和摆放游戏自动输出的各种方块 使之排列成完整的一行或多行并且消除得分 它看 似简单却变化无穷 俄罗斯方块上手极其简单 但是要熟练地掌握其中的操作与摆放技巧 难度却不 低 作为家喻户晓老少皆宜的大众游戏 其普及程度可以说是史上任何一款游戏都无法相比的 相信 大多数人都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代 俄罗斯方块是个老幼皆宜的小游戏 它实现由四块正方形的色块组成 然后存储在一个数组的四 个元素中 计算机随机产生不同七种类型的方块 根据计算机定时器控制它在一定的时间不停的产生 用户根据键盘的四个方向键控制翻转 向左 向右和向下操作 用信号和槽函数的关联来实现对按键 事件的控制 然后程序根据这七种方块堆叠成各种不同的模型 Qt 是诺基亚开发的一个跨平台的 C 图形用户界面应用程序框架 它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能 论文描述了游戏的历史 开发此游戏的环境 游戏开发的意义 遵循软件工程的知识 从软件问题定 义开始 接着进行可行性研究 需求分析 概要设计 详细设计 整个开发过程贯穿软件工程的知识 体系 此次设计在 Linux 系统下 以 QT Creator 为开发语言 使用 C 和 QT 库来进行游戏的设计与实现 关键词 游戏设计 算法 数组 事件关键词 游戏设计 算法 数组 事件 2 创业创新 知识管理 Ahead Institute of software and Technology 目 录 摘 要 1 目 录 2 引 言 3 1 绪 论 4 1 1电子游戏及其分类 3 1 2 电子游戏发展现状 4 1 2 1 电子游戏在国外的发展现状 4 2 可行性研究 5 2 1 设计目的 6 2 2 软件问题定义 6 2 3 可行性分析 6 3 概要设计 7 3 1 游戏设计方案的确定 7 3 2 系统流程结构设计 8 3 3 各个功能模块图设计 8 3 3 1 模型层功能模块图设计 8 3 3 2 试图层功能模块图设计 9 3 3 3 控制层功能模块设计 9 4 详细设计代码 10 总 结 25 致 谢 26 参 考 文 献 27 3 创业创新 知识管理 Ahead Institute of software and Technology 引引 言言 游戏是人们活动中一项非常重要的内容 有人认为如果哪一天人类对所有的游戏都失去兴趣 恐怕 世界的末日就要到了 电脑对游戏的贡献有目共睹 现在摸过电脑的人很少有没玩过电脑游戏的 喜 欢游戏的人也很少有不玩电脑的 俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏 它曾经造成的轰动与造成的经济价值 可以说是游戏史上的一件大事 这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的 它看似简 单但却变化无穷 令人上瘾 相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时 代 究其历史 俄罗斯方块最早还是出现在PC机上 而我国的用户都是通过红白机了解 喜欢上它的 现在联众又将重新掀起这股让人沉迷的俄罗斯方块风潮 对一般用户来说 它的规则简单 容易上手 且游戏过程变化无穷 而在 联众俄罗斯方块 中 更有一些联众网络游戏所独有的魅力 有单机作 战与两人在线对战两种模式 用户可任选一种进行游戏 网络模式还增加了积分制 使用户既能感受 到游戏中的乐趣 也给用户提供了一个展现自己高超技艺的场所 俄罗斯方块游戏可以说是随计算机的发展而发展 并不断推陈出新演变出各种类似游戏 深受广大 玩家喜爱 这个游戏有的简单 有的复杂 但其根本原理是一样的都是对运动的方块进行组合 来训 练玩家的反应能力 谈到游戏软件 大多数人都认为其神妙莫测 高不可及 而一般游戏软件也确实 具有很高的技术难度 随着开发工具及软件开发方法学的不断发展 动手开发游戏也不是十分困难的 俄罗斯方块游戏是一种古老而又有趣的游戏 游戏软件不计其数 网上就有好多关于实现的复杂算法 和设计 其难度让一般初学者望而却步 本文利用数组作为方块的数据结构 提出一种用pascal语言 实现的简易方法 对初学者可仿此开发类似游戏 并了解游戏软件的设计与开发过程 4 创业创新 知识管理 Ahead Institute of software and Technology 1 1 绪绪 论论 1 1 电子游戏及其分类 电子游戏 也就是运行在家用电脑 家用电子游戏机或是掌中宝游戏机及街机上的电子游戏程序 电子游戏是一种结合剧情故事 美术 音乐 动画 程序等技术于一身的互动型娱乐软件 涉及到多 个行业 从电子游戏的分类来看 有着多种分类方式 传统的游戏分类是按照游戏类型 将其分为即时战略 游戏 第一人称射击游戏 角色扮演游戏 策略型游戏等类别 根据游戏运行平台的不同 可将电子 游戏分为游戏机游戏 单机版 PC 游戏 互动电视游戏 在线游戏和手机游戏 此外 韩国政府将电 子游戏业分为家用游戏机游戏 单机版 PC 游戏 网络游戏和街机游戏四大类 考虑到中韩游戏业比 较接近 论文采用韩国的分类标准 网络游戏 也就是人们一般所指的 在线游戏 是指通过互联 网进行的电脑游戏 通过人与人之间的互动达到交流 娱乐和休闲的目的 在互联网 局域网 技术 出现之前 电子游戏都可以归于单机版游戏 即 人机对战 游戏 或最多是双人对战游戏 而随着 互联网技术的出现 通过连接游戏服务器 上百 上千 乃至上万的游戏玩家同时连线娱乐成为了现 实 这就大大增加了游戏的互动性 真实性 丰富了电子游戏的内涵 从网络游戏的分类来看 目前 业界还没有一个比较统一规范的分类 随着计算机设备和网络技术的发展 电子游戏在全球得到了迅 猛的发展 取得了巨大的成功 已成为当今世界上不可缺少的精神粮食 1 2 电子游戏发展现状电子游戏发展现状 1 2 1 电子游戏在国外的发展现状电子游戏在国外的发展现状 电子游戏是最初产生于美国 1971 年 一个还在 MIT 就读的学生设计了世界上第一个业务用游戏 机 这个街机游戏的名字叫 电脑空间 可以说时至今日 电子游戏仍然是外国的天下 美国至今仍是世界第一大游戏市场 它遵循的是以发行商为主的产业开发链模式 根据美国市场调 查公司 NPD Group 调查统计 美国 2004 年游戏总销售金额 包括家用 掌上型主机及软件 为 99 亿 5 创业创新 知识管理 Ahead Institute of software and Technology 美元 占了全球游戏市场的 45 其中游戏软件销售的具体数字是 视频游戏软件的销售额达 52 亿 美元 1 6 亿套 PC 游戏软件销售额达 11 亿美元 4500 万套 掌机游戏销售额达 10 亿美元 4230 万套 2004 年一共大约有 2 48 亿套游戏售出 据估计 美国每个家庭平均购买过 2 部游戏 3 日本近 20 年来疯狂赚电子游戏的钱 从上世纪 60 年代初的街机 到六七十年代之间的家用游戏机 再到八九十年代的掌上游戏机 日本经过 30 多年的耕耘 终于把电子游戏这棵 摇钱树 培育成第 一时尚娱乐产业 垄断全球业界长达 10 余年 对于日本来说 电玩业已是国家经济的重要支柱之一 在 GDP 中占有 1 5 的举足轻重地位 日本游戏业在最辉煌的 1998 年 曾经占领全球电子游戏市场硬 件 90 以上 软件 50 以上 韩国号称世界上网络游戏产业最发达国家之一 迄今为止 国内网络游戏市场有超过 60 的产品 来自韩国游戏软件开发商 韩国网络游戏使国内很多游戏运营公司在游戏营销市场或股票资本市场上 获得了巨大的成功 韩国游戏市场的发展不是偶然 韩国政府不仅给游戏产业以正确的定位和引导 更是将其和本国经济发展紧密地联系到一起 做了很多市场培育方面的工作 韩国政府认识到 靠重 型工业来支撑全国经济的做法是片面的 于是将 娱乐产业视为新的经济增长点 开始大力扶持 从那时起 科技含量极高而能源消耗极低的游戏制作及相关产业担负起了 富国兴邦 的重担 由文 化观光部出面组建韩国游戏支援中心 向韩国游戏产业提供从资金到技术上的多方面支援 成立游戏 投资联盟 政府每年向游戏产业投入的资金多达 亿韩元 并为游戏企业提供长期的低息贷款 设立信息化基金和文化产业基金 为游戏产业服务 对指定的风险企业实行各种税制优惠政策 减少 甚至免除游戏企业的税务负担 建设游戏产业基地以扶持中小游戏企业的发展 对从事游戏产业的高 科技人才免除两年的兵役 在韩国 从制作到运营 一个网络游戏公司起步门槛较低 主要得益于政 府实行的援助计划 此外 在有利的政策形势下 韩国出现了众多的游戏院校 一些原本不涉足此领 域的大学也开设了游戏相关专业课程 以大力培养游戏专业人才 从而为游戏生产提供了基础保障 2 可行性研究 可行性研究 2 1 设计目的 通过本游戏的设计 综合自己在校期间所学的理论知识 设计开发俄罗斯方块游戏 使自己熟悉应 6 创业创新 知识管理 Ahead Institute of software and Technology 用系统的开发过程 培养独立思考能力 检验学习效果和动手能力 初步掌握软件工程的系统理论 初步掌握 MVC 这种设计模式 进一步巩固和加强自身对 j2se 基础知识的理解 提高自己的编程水平 从而达到理论与实践相结合的目的 2 22 2 软件问题定义软件问题定义 基本要求 本游戏开发的总体任务是实现游戏的可操作性 以及界面的美观性 整个开发过程遵 循软件工程规范 采用 PASCAL 编程来实现界面以及事件的控制 用户根据键盘的四个方向键控制翻 转 向左 向右和向下操作 通过菜单栏中的相应菜单选项实现游戏的开始 结束 变换方块 积分 以及等级的功能 目标 通过本游戏的开发 主要实现游戏的可操作性以及美观性 同时使自己对 PASCAL 语言 的了解更进一层 为将来的实际工作打下坚实的基础 条件 假定和限制 由于知识以及能力的限制 本游戏所实现的功能不够强大 可对本游戏进行 改善 从而增强游戏的功能 可行性研究的方法 通过研究分析俄罗斯方块所具备的能力及实现的方法 确定主体结构 利用 现阶段我所能达到的能力 以最简洁 最容易的办法 边开发边测试边修改 实现一个初级游戏软件 评价尺度 由于本软件是一个初级产品 对其要求不是太苛刻 所以能够达到俄罗斯游戏的一般 功能即可 2 32 3 可行性分析可行性分析 技术可行性 开发本游戏的编程语言有多种 考虑到自身对语言的掌握程度 选择 PASCAL 语言进行游戏的开发 采用 PASCAL 编程来实现界面以及事件的控制 经济可行性 本游戏的开发旨在完成毕业设计 不注重直接的经济效益和其后的发展方向 只在注重自身水平和能力的提高 对自身的经济要求也不高 只要有一台能运行相应 JAVA 程序的 手机便可 所以不用考虑到经济问题 社会可行性 本游戏的开发主要为了完成毕业设计 开发的主体是个人 不存在法律上的侵权 行为 也不会为社会造成影响 这方面是完全可行的 7 创业创新 知识管理 Ahead Institute of software and Technology 3 概要设计概要设计 3 1 游戏设计方案的确定 本游戏的设计采用 MVC 模式 Model View Controller 即把本游戏的输入 处理 输出流 程按照 Model View Controller 的方式进行分离 这样本游戏的设计被分成三个层 模型层 视图 层 控制层 MVC 模型图如下所示 8 创业创新 知识管理 Ahead Institute of software and Technology 3 2 系统流程结构设计系统流程结构设计 图形工厂类 图形类 障碍物类 中央控制器 处理按键事件 处理逻辑 显示面板 显示 生产 3 3 各个功能模块图设计各个功能模块图设计 3 3 1 模型层 Model 功能模块图设计 图形工厂 图形 障碍物 生产图形 下落产生障碍 物 触发按键事件 9 创业创新 知识管理 Ahead Institute of software and Technology 3 3 23 3 2 视图层视图层 View View 功能模块设计功能模块设计 游戏面板 GamePanel 方块的显示障碍物的显示 3 3 33 3 3 控制层控制层 Controller Controller 功能模块设计功能模块设计 中央控制器 Controller 类 图形工厂生 产图形 显示面板显 示图形和障 碍物 处理按键 和鼠标事 件 10 创业创新 知识管理 Ahead Institute of software and Technology 4 详细设计代码详细设计代码 Tetris a MIDletPascal implementation of a classic game You are allowed to use this code free change it on your own will use it distribute it etc as long as you make no profit outof it program Tetris const fieldWidth 10 fieldHeight 15 vargameField array 1 fieldWidth 1 fieldHeight of integer block array 1 4 1 4 of integer blockX blockY integer blockSize integer screenWidth screenHeight integer screenX screenY integer score integer time integer gameRunning boolean gameSpeedDelay integer pauseCommand quitCommand clickedCommand command gamePaused boolean procedure rotateRight forward function blockPositionValid boolean forward 11 创业创新 知识管理 Ahead Institute of software and Technology welcomeScreen display the wellcome screen procedure welcomeScreen var textToDisplay string textXPos integer textYPos integer keyCode integer begin setColor 255 0 255 fillRect 0 0 screenWidth screenHeight setColor 0 0 255 setFont FONT FACE PROPORTIONAL FONT STYLE BOLD FONT SIZE LARGE textToDisplay Tetris textXPos screenWidth getStringWidth textToDisplay div 2 textYPos screenHeight getStringHeight textToDisplay 2 drawText textToDisplay textXPos textYPos textYPos textYPos getStringHeight textToDisplay setColor 0 0 0 setFont FONT FACE PROPORTIONAL FONT STYLE PLAIN FONT SIZE SMALL textToDisplay Created with MIDletPascal textXPos screenWidth getStringWidth textToDisplay div 2 drawText textToDisplay textXPos textYPos textYPos textYPos getStringHeight textToDisplay textToDisplay Press any key textXPos screenWidth getStringWidth textToDisplay div 2 drawText textToDisplay textXPos textYPos repaint wait until user presses any key repeat keyCode getKeyClicked 12 创业创新 知识管理 Ahead Institute of software and Technology until keyCode 0 end gameOver displays the game over screen function gameOver boolean var textToDisplay string textXPos integer textYPos integer keyCode integer newGame command quit command clickedCommand command begin setColor 255 255 255 fillRect 0 0 screenWidth screenHeight setColor 255 0 0 setFont FONT FACE PROPORTIONAL FONT STYLE BOLD FONT SIZE LARGE textToDisplay Game over textXPos screenWidth getStringWidth textToDisplay div 2 textYPos screenHeight getStringHeight textToDisplay 2 drawText textToDisplay textXPos textYPos textYPos textYPos getStringHeight textToDisplay repaint newGame createCommand Play CM SCREEN 1 quit createCommand Quit CM EXIT 1 addCommand newGame addCommand quit wait until user presses any key 13 创业创新 知识管理 Ahead Institute of software and Technology repeat delay 100 clickedCommand getClickedCommand until clickedCommand emptyCommand if clickedCommand quit then gameOver true else gameOver false removeCommand newGame removeCommand quit end setSizes calculates the size of a single block and the position of the game field procedure setSizes var blockWidth blockHeight integer begin screenWidth getWidth screenHeight getHeight blockWidth screenWidth fieldWidth blockHeight screenHeight fieldHeight if blockHeight blockWidth then blockSize blockWidth else blockSize blockHeight screenX screenWidth blockSize fieldWidth 2 screenY screenHeight blockSize fieldHeight 2 end 14 创业创新 知识管理 Ahead Institute of software and Technology initializeGameField makes the game field empty procedure initializeGameField var i j integer begin for i 1 to fieldWidth do for j 1 to fieldHeight do gameField i j 0 end drawScore writes the score on the screen in black procedure drawScore var stringWidth stringHeight integer outputText string begin outputText Lines score stringWidth getStringWidth outputText stringHeight getStringHeight outputText setFont FONT FACE PROPORTIONAL FONT STYLE PLAIN FONT SIZE SMALL setColor 0 0 0 drawText outputText screenWidth stringWidth 2 screenHeight stringHeight 2 end drawBlock draws a single game block procedure drawBlock col row color integer var red green blue integer begin set the color 15 创业创新 知识管理 Ahead Institute of software and Technology if color 1 then red 255 if color 2 then green 255 if color 3 then blue 255 if color 4 then begin red 255 green 255 end if color 5 then begin red 255 blue 255 end if color 6 then begin green 255 blue 255 end if color 0 and row 0 and row 0 and col fieldWidth then begin row row col col 1 draw the light block fill setColor red green blue fillRect screenX col blockSize screenHeight screenY row blockSize blockSize blockSize draw the dark border around the block setColor red 2 green 2 blue 2 drawRect screenX col blockSize screenHeight screenY row blockSize blockSize blockSize end end redrawGameScreen redraws the screen with all the blocks procedure redrawGameScreen var i j integer begin setColor 0 0 0 fillRect 0 0 screenWidth screenHeight setColor 255 255 255 fillRect screenX screenY fieldWidth blockSize 1 fieldHeight blockSize 1 draw the blocks that are down 16 创业创新 知识管理 Ahead Institute of software and Technology for i 1 to fieldWidth do for j 1 to fieldHeight do drawBlock i j gameField i j draw the blocks that are falling for i 1 to 4 do for j 1 to 4 do drawBlock i blockX j blockY block i j draw the score text drawScore repaint end createNewBlock creates the new falling block If you want to change the falling shapes do it here procedure createNewBlock var x shape integer begin shape random 7 x random 6 1 if shape 0 then begin block 1 4 0 block 2 4 x block 3 4 x block 4 4 0 block 1 3 0 block 2 3 x block 3 3 x block 4 3 0 block 1 2 0 block 2 2 0 block 3 2 0 block 4 2 0 block 1 1 0 block 2 1 0 block 3 1 0 block 4 1 0 end if shape 1 then begin block 1 4 0 block 2 4 x block 3 4 0 block 4 4 0 block 1 3 0 block 2 3 x block 3 3 0 block 4 3 0 block 1 2 0 block 2 2 x block 3 2 0 block 4 2 0 block 1 1 0 block 2 1 x block 3 1 0 block 4 1 0 17 创业创新 知识管理 Ahead Institute of software and Technology end if shape 2 then begin block 1 4 0 block 2 4 x block 3 4 0 block 4 4 0 block 1 3 0 block 2 3 x block 3 3 x block 4 3 0 block 1 2 0 block 2 2 0 block 3 2 x block 4 2 0 block 1 1 0 block 2 1 0 block 3 1 0 block 4 1 0 end if shape 3 then begin block 1 4 0 block 2 4 0 block 3 4 x block 4 4 0 block 1 3 0 block 2 3 x block 3 3 x block 4 3 0 block 1 2 0 block 2 2 x block 3 2 0 block 4 2 0 block 1 1 0 block 2 1 0 block 3 1 0 block 4 1 0 end if shape 4 then begin block 1 4 0 block 2 4 x block 3 4 0 block 4 4 0 block 1 3 0 block 2 3 x block 3 3 0 block 4 3 0 block 1 2 0 block 2 2 x block 3 2 x block 4 2 0 block 1 1 0 block 2 1 0 block 3 1 0 block 4 1 0 end if shape 5 then begin block 1 4 0 block 2 4 0 block 3 4 x block 4 4 0 block 1 3 0 block 2 3 0 block 3 3 x block 4 3 0 block 1 2 0 block 2 2 x block 3 2 x block 4 2 0 block 1 1 0 block 2 1 0 block 3 1 0 block 4 1 0 end if shape 6 then begin block 1 4 0 block 2 4 0 block 3 4 0 block 4 4 0 block 1 3 0 block 2 3 x block 3 3 0 block 4 3 0 block 1 2 x block 2 2 x block 3 2 x block 4 2 0 block 1 1 0 block 2 1 0 block 3 1 0 block 4 1 0 end 18 创业创新 知识管理 Ahead Institute of software and Technology redrawGameScreen end removeFullLines checks if any line is full and removes it procedure removeFullLines var lineFull boolean i j k integer begin for i 1 to fieldHeight do begin check if the line is full lineFull true for j 1 to fieldWidth do if gameField j i 0 then lineFull false if it is full remove it if lineFull then begin for k i 1 to fieldHeight do begin for j 1 to fieldWidth do gameField j k 1 gameField j k end erase the top line for j 1 to fieldWidth do gameField j fieldHeight 0 score score 1 speed the game up if score mod 5 0 then gameSpeedDelay gameSpeedDelay 9 10 i i 1 19 创业创新 知识管理 Ahead Institute of software and Technology end end end blockIsDown this procedure is invoked when the block falls as low as it can get procedure blockIsDown vari j integer begin copy the block data for i 1 to 4 do for j 1 to 4 do begin if block i j 0 then gameField i blockX j blockY block i j end check if any lines can be removed removeFullLines blockX fieldWidth 4 2 blockY fieldHeight 4 create the new block createNewBlock check if the block can be placed on the screen if not blockPositionValid then gameRunning false end blockPositionValid returns true if the block s current position is OK If the block s current position is not OK because 20 创业创新 知识管理 Ahead Institute of software and Technology the block overlaps with other elements or because it is out of the game are return false function blockPositionValid boolean var i j integer x y integer begin blockPositionValid true for i 1 to 4 do for j 1 to 4 do begin if block i j 0 then begin x blockX i y blockY j if xfieldWidth then blockPositionValid false else if yfieldHeight then blockPositionValid false else if gameField x y 0 then blockPositionValid false end end end rotateLeft rotates a block to the left procedure rotateLeft var i j t integer begin transpose the block for i 1 to 4 do for j i to 4 do begin t block i j block i j block j i block j i t 21 创业创新 知识管理 Ahead Institute of software and Technology end do the vertical mirror transformation for i 1 to 4 do begin t block i 1 block i 1 block i 4 block i 4 t t block i 2 block i 2 block i 3 block i 3 t end if not blockPositionValid then rotateRight else redrawGameScreen end rotateRight rotates a block to the right procedure rotateRight var i j t integer begin transpose the block for i 1 to 4 do for j i to 4 do begin t block i j block i j block j i block j i t end do the horizontal mirror transformation for i 1 to 4 do begin t block 1 i block 1 i block 4 i 22 创业创新 知识管理 Ahead Institute of software and Technology block 4 i t t block 2 i block 2 i block 3 i block 3 i t end if not blockPositionValid then rotateLeft else redrawGameScreen end moveBlock moves the block and checks if the block can be moved to the given position procedure moveBlock deltaX deltaY integer begin blockX blockX deltaX blockY blockY deltaY if not blockPositionValid then begin blockX blockX deltaX blockY blockY deltaY if deltaY 0 then blockIsDown end else redrawGameScreen end processKeyActions read the keyboard and run the needeed commands procedure processKeyActions 23 创业创新 知识管理 Ahead Institute of software and Technology varkey integer begin key keyToAction getKeyClicked if key GA UP then rotateLeft if key GA FIRE then rotateRight if key GA DOWN then moveBlock 0 1 if key GA LEFT then moveBlock 1 0 if key GA RIGHT then moveBlock 1 0 end checkTime check if the game speed interval has passed if it did then move the block one place down procedure checkTime var currentTime integer begin currentTime getRelativeTimeMs if currentTime time gameSpeedDelay or currentTime time 0 then begin moveBlock 0 1 time currentTime end end main program initialize the game read the keyboard inputs and measure timings begin setSizes welcomeScreen setDefaultFont repeat initializeGameField 24 创业创新 知识管理 Ahead Institute of software and Technology gameSpeedDelay 500 500 ms 0 5 s score 0 createNewBlock blockX fieldWidth 4 div 2 blockY fieldHeight 4 time getRelativeTimeMs gameRunning true redrawGameScreen gamePaused false pauseCommand createCommand Pause CM SCREEN 1 quitCommand createCommand Quit CM EXIT 1 addCommand pauseCommand addCommand quitCommand while gameRunning do begin if not isMidletPaused and not gamePaused then begin processKeyActions checkTime end clickedCommand getClickedCommand if clickedCommand quitCommand then begin gameRunning
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025贵阳市康养集团有限公司三医康养服务分公司招聘2人考试笔试备考题库及答案解析
- 2025福建省纤维检验中心编外人员招聘3人考试笔试备考题库及答案解析
- 2025贵州玉屏侗族自治县人民医院第二批招聘编外人员考试笔试参考题库附答案解析
- 2025广西南宁市部分学校赴高校招聘教师67人笔试考试参考试题及答案解析
- 2025浙江温州大学面向全球引进高层次紧缺人才补充(二)笔试考试参考试题及答案解析
- 2025上海静安区区管企业招聘中层管理人员17人笔试考试备考题库及答案解析
- 2025丽江市宁蒗县紫玛街道办事处招聘公益性岗位人员(4人)笔试考试参考试题及答案解析
- 2025中国诚通所出资企业高级管理人员招聘8人考试笔试备考题库及答案解析
- 2025年瓦房店市教师进修学校公开遴选视导员和研训教师考试笔试备考题库及答案解析
- 碳排放监测员保密意识考核试卷含答案
- 蜜雪冰城加盟合同(2025年版)
- Unit5 we're family单元整体(说课稿)-2024-2025学年外研版(三起)(2024)英语三年级上册
- 【课件】进出口货物报关单填制
- 小儿甲型流感护理
- 美术与设计的关系与发展
- 创伤性凝血病救治
- 中国血管性认知障碍诊治指南(2024版)解读
- 服务工作程序、方法和制度
- 2024年国开电大 高级财务会计 形考任务4答案
- RhD阴性孕产妇的合理输血讲课分享
- 2024年02月深圳市坪山区融媒体中心2024年公开招考12名工作人员笔试近年2018-2023典型考题及考点剖析附答案带详解
评论
0/150
提交评论