




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 目目 录录 1 系统概述 1 2 设计说明书 4 3 系统操作界面 6 4 源程序编码 7 5 测试计划 36 6 改进意见 39 7 课程设计心得体会 40 8 参考书籍 资料 40 2 系统概述 1 1 现状分析 在个人电脑日益普及的今天 一些有趣的桌面游戏已经成为人们在使用计 算机进行工作或学习之余休闲娱乐的首选 而俄罗斯方块游戏是人们最熟 悉的小游戏之一 它以其趣味性强 易上手等诸多特点得到了大众的认可 因此开发此游戏软件可满足人们的一些娱乐的需求 此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的 界面 美观的 易于控制的俄罗斯方块游戏 1 2 项目要求 俄罗斯方块游戏是一款适合大众的游戏软件 它适合不同年龄的人玩 本软件 要实现的功能如下 1 游戏区 玩家可以在游戏区中堆积方块 并能够在游戏过程中随时了解 得分情况 2 游戏控制 玩家可以通过游戏控制功能来选择开始新的一局游戏 暂 停或退出游戏 3 级别设置 玩家可以根据自己的需要自行设定游戏的开始级别 级别 越高 游戏的速度越快 难度越大 4 1 3 系统功能模块示意图 3 游戏区 游戏控制 显示玩家操作 显示操作结果 开始 暂停 继续 提高等级 退出 降低等级 项目开发计划书 项目开发计划书 名称时间工作内容 下达设计任务 1 天 集中 说明如何着手设计的方法和设计任务的解 释说明 收集 分析资料及 文档 2 天 项目组在项目经理的组织下选题 分析 识别实体 完成 项目开发计划书 及小 组人员分工 设计2 天 各项目组完成系统层次图 用户界面设计 数据库表设计 报表设计 完成 设计说 明书 程序编写和测试7 天根据方案进行现场编程 调试 编写设计文档2 天 完成软件测试以及 用户操作手册 的编 写 文档提交 答辩1 天 各小组提交文档 教师根据情况选择是否 答辩及答辩方式 抽样答辩或全员答辩 设计说明 1 1 游戏区模块 俄罗斯方块游戏 4 游戏区模块 创建游戏区 处理玩家游戏操作 显示游戏结果 1 2 控制区模块 游戏控制模块 开始游戏 暂停游戏 初始级别设置 退出游戏 1 3 系统流程图 5 开始 设置初始级别 创建游戏区 游戏开局 随机选择方块类型 是否到顶部 方块下落一行 游戏结束 是 否 1 4 模块简介 1 功能模块 1 游戏区模块 创建游戏区 处理玩家操作 显示操作结果 2 游戏控制模块 开始 暂停继续 提高等级 降低等级 停止 新游戏 帮助 处理玩家操 作 是否到顶部 6 系统操作界面 游戏打开界面 游戏进行中界面 7 源代码编码 include include include include include include define true 1 define false 0 define BoardWidth 12 define BoardHeight 23 define INNER HELPER inner helper method Scan Codes Define enum KEYCODES K ESC 0 x011b K UP 0 x4800 upward arrow K LEFT 0 x4b00 K DOWN 0 x5000 K RIGHT 0 x4d00 K SPACE 0 x3920 K P 0 x1970 8 the data structure of the block typedef struct tagBlock char c 4 4 cell fill info array 0 empty 1 filled int x block position cx 0 BoardWidht 1 int y block position cy 4 BoardHeight 1 char color block color char size block max size in width or height char name block name the block s shape Block game s global info int FrameTime 1300 int CellSize 18 int BoardLeft 30 int BoardTop 30 next block grid int NBBoardLeft 300 int NBBoardTop 30 int NBCellSize 10 score board position int ScoreBoardLeft 300 int ScoreBoardTop 100 int ScoreBoardWidth 200 int ScoreBoardHeight 35 int ScoreColor LIGHTCYAN infor text postion int InfoLeft 300 int InfoTop 200 int InfoColor YELLOW int BorderColor DARKGRAY int BkGndColor BLACK int GameRunning true int TopLine BoardHeight 1 top empty line int TotalScore 100 char info score 20 char info help 255 char info common 255 our board Board x y 0 isFilled Board x y 1 fillColor 9 unsigned char Board BoardWidth BoardHeight 2 char BufferCells 4 4 used to judge if can rotate block Block curBlock current moving block Block nextBlock next Block to appear function list int GetKeyCode int CanMove int dx int dy int CanRotate int RotateBlock Block block int MoveBlock Block block int dx int dy void DrawBlock Block block int int int void EraseBlock Block block int int int void DisplayScore void DisplayInfo char text void GenerateBlock Block block void NextBlock void InitGame int PauseGame void QuitGame Get Key Code int INNER HELPER GetKeyCode int key 0 if bioskey 1 key bioskey 0 return key display text void INNER HELPER DisplayInfo char text setcolor BkGndColor outtextxy InfoLeft InfoTop info common strcpy info common text setcolor InfoColor outtextxy InfoLeft InfoTop info common create a new block by key number the block anchor to the top left corner of 4 4 cells 10 void INNER HELPER GenerateBlock Block block int key random 13 random 17 random 1000 random 3000 7 block size 3 because most blocks size 3 memset block c 0 16 switch key case 0 block name T block color RED block c 1 0 1 block c 1 1 1 block c 2 1 1 block c 1 2 1 break case 1 block name L block color YELLOW block c 1 0 1 block c 1 1 1 block c 1 2 1 block c 2 2 1 break case 2 block name J block color LIGHTGRAY block c 1 0 1 block c 1 1 1 block c 1 2 1 block c 0 2 1 break case 3 block name z block color CYAN block c 0 0 1 block c 1 0 1 block c 1 1 1 block c 2 1 1 break case 4 block name 5 block color LIGHTBLUE block c 1 0 1 block c 2 0 1 block c 0 1 1 block c 1 1 1 break case 5 block name o block color BLUE 11 block size 2 block c 0 0 1 block c 1 0 1 block c 0 1 1 block c 1 1 1 break case 6 block name I block color GREEN block size 4 block c 1 0 1 block c 1 1 1 block c 1 2 1 block c 1 3 1 break get next block void NextBlock copy the nextBlock to curBlock curBlock size nextBlock size curBlock color nextBlock color curBlock x BoardWidth 4 2 curBlock y curBlock size memcpy curBlock c nextBlock c 16 generate nextBlock and show it EraseBlock GenerateBlock nextBlock x 1 nextBlock y 0 DrawBlock rotate the block update the block struct data int INNER HELPER RotateCells char c 4 4 char blockSize char temp i j switch blockSize case 3 temp c 0 0 c 0 0 c 2 0 c 2 0 c 2 2 c 2 2 c 0 2 c 0 2 temp temp c 0 1 c 0 1 c 1 0 c 1 0 c 2 1 c 2 1 c 1 2 12 c 1 2 temp break case 4 only I block arived here c 1 0 1 c 1 0 c 1 2 1 c 1 2 c 1 3 1 c 1 3 c 0 1 1 c 0 1 c 2 1 1 c 2 1 c 3 1 1 c 3 1 break judge if the block can move toward the direction int CanMove int dx int dy int i j tempX tempY for i 0 i curBlock size i for j 0 j curBlock size j if curBlock c i j cannot move leftward or rightward tempX curBlock x i dx if tempX BoardWidth 1 return false make sure x is valid cannot move downward tempY curBlock y j dy if tempY BoardHeight 1 return false y is only checked lower bound maybe negative the cell already filled we must check Y s upper bound before check cell if tempY 0 return true judge if the block can rotate int CanRotate int i j tempX tempY update buffer memcpy BufferCells curBlock c 16 RotateCells BufferCells curBlock size 13 for i 0 i curBlock size i for j 0 j curBlock size j if BufferCells i j tempX curBlock x i tempY curBlock y j if tempX BoardWidth 1 return false if tempY BoardHeight 1 return false if tempY 0 return true draw the block void INNER HELPER DrawBlock Block block int bdLeft int bdTop int cellSize int i j setfillstyle SOLID FILL block color for i 0 isize i for j 0 jsize j if block c i j Rotate the block if success return true int RotateBlock Block block 14 char temp i j int b success if block size 2 return true if b success CanRotate EraseBlock block BoardLeft BoardTop CellSize memcpy curBlock c BufferCells 16 DrawBlock block BoardLeft BoardTop CellSize return b success erase a block only fill the filled cell with background color void INNER HELPER EraseBlock Block block int bdLeft int bdTop int cellSize int i j setfillstyle SOLID FILL BkGndColor for i 0 isize i for j 0 jsize j if block c i j move by the direction if can donothing if cannot return value true success false cannot move toward this direction int MoveBlock Block block int dx int dy int b canmove CanMove dx dy if b canmove 15 EraseBlock block BoardLeft BoardTop CellSize curBlock x dx curBlock y dy DrawBlock block BoardLeft BoardTop CellSize return b canmove drop the block to the bottom int DropBlock Block block EraseBlock block BoardLeft BoardTop CellSize while CanMove 0 1 curBlock y DrawBlock block BoardLeft BoardTop CellSize return 0 return value is assign to the block s alive init the graphics mode draw the board grid void InitGame int i j gdriver DETECT gmode struct time sysTime draw board cells memset Board 0 BoardWidth BoardHeight 2 memset nextBlock c 0 16 strcpy info help P Pause Game by hoodlum1980 initgraph setcolor BorderColor for i 0 i BoardWidth i line BoardLeft i CellSize BoardTop BoardLeft i CellSize BoardTop BoardHeight CellSize for i 0 i BoardHeight i line BoardLeft BoardTop i CellSize BoardLeft BoardWidth CellSize BoardTop i CellSize draw board outer border rect rectangle BoardLeft CellSize 4 BoardTop CellSize 4 16 BoardLeft BoardWidth CellSize CellSize 4 BoardTop BoardHeight CellSize CellSize 4 draw next block grids for i 0 i 4 i line NBBoardLeft i NBCellSize NBBoardTop NBBoardLeft i NBCellSize NBBoardTop 4 NBCellSize line NBBoardLeft NBBoardTop i NBCellSize NBBoardLeft 4 NBCellSize NBBoardTop i NBCellSize draw score rect rectangle ScoreBoardLeft ScoreBoardTop ScoreBoardLeft ScoreBoardWidth S coreBoardTop ScoreBoardHeight DisplayScore set new seed gettime srand sysTime ti hour 3600 sysTime ti min 60 sysTime ti sec GenerateBlock NextBlock create first block setcolor DARKGRAY outtextxy InfoLeft InfoTop 20 Up rotate Space drop outtextxy InfoLeft InfoTop 35 Left left Right right outtextxy InfoLeft InfoTop 50 Esc exit DisplayInfo info help set the isFilled and fillcolor data to the board void INNER HELPER FillBoardData int i j for i 0 i curBlock size i for j 0 j 0 Board curBlock x i curBlock y j 0 1 Board curBlock x i curBlock y j 1 curBlock color 17 draw one line of the board void INNER HELPER PaintBoard int i j fillcolor for j max TopLine 4 0 j BoardHeight j for i 0 i BoardWidth i fillcolor Board i j 0 Board i j 1 BkGndColor setfillstyle SOLID FILL fillcolor floodfill BoardLeft i CellSize CellSize 2 BoardTop j CellSize CellSiz e 2 BorderColor check if one line if filled full and increase the totalScore void INNER HELPER CheckBoard int i j k score 10 sum 0 topy lines 0 we find the top empty line j topy BoardHeight 1 do sum 0 for i 0 i0 remove the full filled line max remove lines count 4 do sum 0 for i 0 i topy k for i 0 i BoardWidth i Board i k 0 Board i k 1 0 Board i k 1 Board i k 1 1 make the top line empty for i 0 i BoardWidth i Board i topy 0 0 Board i topy 1 0 topy move the topline downward one line lines lines 0 NextBlock if CanMove 0 1 goto GameOver tick 0 delay 100 switch key case K LEFT MoveBlock break case K RIGHT MoveBlock break case K DOWN MoveBlock break case K UP RotateBlock break case K SPACE DropBlock break case K P PauseGame break GameOver DisplayInfo GAME OVER Press any key to exit getch wait the user Press any key QuitGame 21 测试计划 1 11 1 测试方案测试方案 本游戏的测试方法采用检查各个功能能否实现的方法 1 2 测试项目及功能 控制区 开始 实现游戏的开始 暂停 实现游戏暂停 继续 实现游戏继续 提高级数 提高级数增加游戏的难度 降低级数 降低级数减小游戏的难度 菜单区 新游戏 游戏结束从新开始新一轮的游戏 提高级数 提高游戏难度 降低级数 减小游戏难度 22 退出 退出游戏 开始 开始游戏 暂停 暂停正在进行的游戏 从新开始 重新开始游戏 停止 停止正在进行的游戏 帮助信息 游戏控制键 显示区 显示俄罗斯方块 提前显示窗口 显示下一个方块的样式 测试进度 本游戏在我和同组李帅同学的辛苦努力下用了半天的时间完成了 1 3 测试准备测试准备 编写相应的驱动模块 并精心设计测试用例编写相应的驱动模块 并精心设计测试用例 1 41 4 测试机构测试机构 测试人员 王新勃 职责 找出程序中的错误 实现游戏的功能 1 5 测试项目说明 测试 1 名称 控制区功能测试 目的 测试控制区各个功能的按钮 内容 包括游戏开始 暂停 继续 停止 提高级数 降低级数的 功能 步骤 打开游戏窗口 按下开始按钮 看游戏区是否有方块下落 若 有则在按暂停按钮看其是否暂停 若暂停 则按继续看其是否继续下落 按停 止按钮方块观察方块是否停止不动 按提高级数 降低级数看显示区级数是否 在变化 并观察游戏中方块的下落书读是否变化 按提高级数按钮 方块的下 落速度应加快 按降低级数按钮 方块的速度应减慢 测试 2 名称 菜单区功能测试 23 目的 测试菜单区各个子菜单的功能 内容 游戏菜单下的子菜单 新游戏 提高级数 降低级数 退出 按钮的功能实现 控制菜单下的子菜单 开始 暂停 重新开始 停止的功能 实现 步骤 打开游戏窗口 按下控制菜单下的开始按钮 看游戏区是否有方块下落 预显区是否显示下一个方块的样式 在按测试控制区的功能一样分别测试各个 子菜单的功能 测试 3 名称 显示区功能测试 目的 测试玩家操作的功能 内容 实现方块的左右移动 快速下落 翻转变化 满行消除 游戏 升级等 测试步骤 打开游戏窗口 按开始按钮 接着测试 J K L I 能否实 现方块的左右移动 翻转变化 快速下落 当堆满一行看其能否消除满行 消 除后得分栏是否加分 当累积分超过 2000 分时看其是否升级 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农发行成都市简阳市2025秋招笔试热点题型专练及答案
- 农发行资阳市乐至县2025秋招笔试行测高频题及答案
- 楚雄姚安县中储粮2025秋招笔试行测高频题库及答案
- 国家能源济南市莱芜区2025秋招笔试思维策略题专练及答案
- 国家能源保定市唐县2025秋招笔试逻辑推理题专练及答案
- 恩施咸丰县中储粮2025秋招写作案例分析万能模板直接套用
- 半年护理工作总结15篇
- 厂转让合同汇编15篇
- 劳动委员个人工作总结
- 2025年湖北城市建设职业技术学院专项公开招聘19名工作人员模拟试卷完整参考答案详解
- GB/T 19494.2-2023煤炭机械化采样第2部分:煤样的制备
- 2023年【汽车驾驶员(技师)】考试题及汽车驾驶员(技师)试题答案
- 催化重整(石油加工生产技术课件)
- (完整版)袱子的书写格式和称呼
- 证监会行业分类结构与代码
- 安全仪表系统SIS课件
- Φ1397套管开窗侧钻操作规程
- 《寻梦环游记(2017)》完整中英文对照剧本
- RB/T 089-2022绿色供应链管理体系要求及使用指南
- 某某集团年度经营计划编制指引
- 山区道路施工施组
评论
0/150
提交评论