过程蓝图文档.docx
- 文档编号:25722054
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:94
- 大小:66.42KB
过程蓝图文档.docx
《过程蓝图文档.docx》由会员分享,可在线阅读,更多相关《过程蓝图文档.docx(94页珍藏版)》请在冰豆网上搜索。
过程蓝图文档
项目综合实验报告
课程名称算法与程序设计实践
程序名称_俄罗斯方块__
实验工具_________JBTooL__________________
编程语言_________JAVA__________________
专业:
软件工程
班级/学号:
软工1202/
学生姓名:
rouforever
成绩_______________________
指导教师________________
完成日期_______________________
程序设计说明书
1.引言
1.1编写目的
游戏是用来给大家娱乐的,所以要能在使用的过程中给大家带来快乐,消除大家的疲劳
1.2项目背景
之所以选择开发俄罗斯方块游戏,无可争议,《俄罗斯方块》是有史以来最伟大的游戏之一。
在曾经发布过的所有游戏中,《俄罗斯方块》还被认为是仅有的一个能够真正吸引广泛人群的作品。
1.3定义
我们在设计过程中主要用到的控件有:
command控件,image控件,picture控件,label控件,timer控件,text控件,windowsmediaplayer控件等等。
1.4参考资料
无
1.5人员及分工
一人完成
2.总体设计
2.1需求概述
在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众的认可,因此开发此游戏软件可满足人们的一些娱乐的需求。
此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。
2.2程序结构
2.3程序功能
3.程序描述
游戏中玩家可以做的操作有:
1.以90度为单位旋转方每一格块。
2.以格子为单位左右移动方块,让方块加速落下。
3.方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的随机图形会出现在区域上方开始落下。
4.当区域中某一列横向格子全部由方块填满,则该列会自动消除并成为玩家的得分。
同时删除的列数越多,得分指数上升。
5.当固定的方块堆到区域最上方,则游戏结束。
3.1功能
暂停,开始游戏,提高降低级数。
3.3输入项目
主要实现的功能
我们开发的俄罗斯方块游戏,主要实现了以下几种功能:
1.可以灵活控制方块在图形框中运动。
2.游戏过程中方块可以自由旋转。
3.当某一行的方块排列满时,将自动将这一行方块消除,然后将上面所有方块向下移动,可以支持连续消行。
4.游戏前可以选择游戏的速度和游戏的等级,游戏速度既为方块下落速度,游戏等级为初始游戏时在基层随机生成一定行数的无规律方块,生成的行数由你来选择,每行至少产生5个以上的无规律方块,这样增加了游戏难度,对于游戏高手来说,无疑不是一个新的挑战。
5.游戏的得分支持积分,并且按照公式:
得分=原来分数+100*(2^同时消除的行数-1)
这样,你同一时间消除的行数越多,你的得分也就越高,当游戏积分到了一定时可以自动升级,这个升级指速度升级。
6.游戏中提供了一个漂亮的场景和动听的音乐,给你带来无限激情。
3.5算法
是俄罗斯方块的关键矩阵。
其中,第一维的18,前16个整数表示4*4的方块的形状,后两个变量,表示该形状所占的宽度和高度,以免方块出界了。
第二维中的4表示方块的4个方向的旋转。
第三维中的7表示方块的7中基本形状。
所有情况的方块写到一数组里,作为一常量,以备调用。
例如:
for(i=0;i<4;i++)
grid[height][i+colum]+=shape[shp][loop][i];
for(i=4;i<8;i++)
grid[height+1][i+colum-4]+=shape[shp][loop][i];
for(i=8;i<12;i++)
grid[height+2][i+colum-8]+=shape[shp][loop][i];
for(i=12;i<16;i++)
grid[height+3][i+colum-12]+=shape[shp][loop][i];
其中,grid[][],就是整个画面的情况,用0和1表示,1表示有格子,0表示没有格子,上述的程序段表示,在第height行colum列显示shape形状的方块。
方块的变形就是改变第一维的值了,方块的旋转就是改变第而维的值了。
【采用过程蓝图的ACSD/ALSD/AISD详细描述各个模块在概念、逻辑和实现三个不同抽象层次的算法过程模型】
项目开发总结报告
1引言
1.1编写目的
说明编写这份项目开发总结报告的目的,指出预期的阅读范围。
1.2背景
说明:
a.本项目的名称和所开发出来的软件系统的名称;
b.此软件的来源或任务提出者、开发者、用户及安装此软件的计算中心。
1.3定义
列出本文件中用到的专门术语的定义和外文首字母组词的原词组。
1.4参考资料
列出收集和用到的参考资料,如:
a.程序代码及文档的来源及出处;
b.为完成本项目所收集和自学的资料;
c.本文件中各处所引用的文件、资料,包括所要用到的软件开发标准。
列出这些文件的标题、文件编号、发表日期和出版单位,说明能够得到这些文件资料的来源。
2实际开发结果
2.1产品
说明最终制成的产品,包括:
a.程序系统中各个程序的名字,它们之间的层次关系,以千字节为单位的各个程序的程序量、存储媒体的形式和数量;
b.程序系统共有哪几个版本,各自的版本号及它们之间的区别;
c.每个文件的名称;
d.所建立的每个数据库。
如果开发中制订过配置管理计划,要同这个计划相比较。
2.2主要功能和性能
逐项列出本软件产品所实际具有的主要功能和性能,对照可行性研究报告、项目开发计划、功能需求说明书的有关内容,说明原定的开发目标是达到了、未完全达到、或超过了。
2.3基本流程
用图给出本程序系统实际的基本处理流程。
2.4研制过程与进度
详细描述开发程序的完整过程,包括开发的各个阶段、制品、活动,并画出开发流程图;列出原定计划进度与实际进度的对比,明确说明,实际进度是提前了、还是延迟了,分析主要原因。
2.5费用
列出原定计划费用与实际支出费用的对比,包括:
a.工时,以人月为单位,并按不同级别统计;
b.计算机的使用时间,区别CPU时间及其他设备时间;
c.物料消耗、出差费等其他支出。
明确说明,经费是超出了、还是节余了,分析其主要原因。
3开发工作评价
3.1对生产效率的评价
给出实际生产效率,包括:
a.程序的平均生产效率,即每人月生产的行数;
b.文件的平均生产效率,即每人月生产的千字数;
并列出原订计划数作为对比。
3.2对产品质量的评价
说明在测试中检查出来的程序编制中的错误发生率,即每干条指令(或语句)中的错误指令数(或语句数)。
如果开发中制订过质量保证计划或配置管理计划,要同这些计划相比较。
3.3对技术方法的评价
重点给出对在开发中所使用的模型驱动程序技术、方法、工具的效果评价。
3.4对主动学习的评价
给出为完成项目开展主动学习的内容、主动学习方法及学习效果评价。
3.5对团队合作的评价
给出为完成项目是如何开展团队合作的,合作时出现了什么问题,如何解决这些问题,以及采用的高效团队协作的做法、成功经验和效果评价。
3.6碰到的问题、解决方法及建议
给出对于开发中出现的各种主要问题、原因分析及其解决方法。
请重点给出使用蓝图工具时碰到些什么问题、解决问题的做法,以及工具完善改进的建议。
4收获与体会
列出从这项开发工作中所得到的最主要的收获和体会
实现层包Block;
//类定义
类MyTimer
{
//成员方法
公共的MyTimer(BlockmyBlock)
{
调用对象.myBlock赋值myBlock;
}
//成员方法
公共的空类型运行()
{
当(myBlock.启动Sign等于1)
尝试
{
//e
sleep((10减myBlock.speedMark加1)乘100);
myBlock.重复wn();
}
捕获(Interrupted异常e)
{
系统.输出.输出字符串并换行();
}
}
}
//类定义
公共的类moxing
{
//成员变量
公共的静态的整数类型blockNumber=1;
公共的静态的字符串butLab[]={"开始游戏","重新开始","降低级数","提高级数","游戏暂停","退出游戏"};
公共的静态的Buttonbut[]=新建对象按钮[6];
公共的静态的ButtonnoStop=新建对象按钮("取消暂停");
公共的静态的布尔类型downSign=假;
公共的静态的整数类型[]game_body[][]=新建对象整数类型[19][10];
公共的静态的整数类型[]game_sign_x[]=新建对象整数类型[4];
公共的静态的整数类型[]game_sign_y[]=新建对象整数类型[4];
公共的静态的整数类型gameScore=0;
公共的静态的ImageIconicon=新建对象图像Icon("resource/Block.jpg");
公共的静态的JDialogdlg_1;
公共的静态的JFramejf=新建对象嘉窗口();
公共的静态的JMenumenu0=新建对象J菜单("游戏");
公共的静态的JMenumenu1=新建对象J菜单("帮助");
公共的静态的JMenuBarmb=新建对象J菜单栏();
公共的静态的JMenuItemmi0=新建对象J菜单项("新游戏");
公共的静态的JMenuItemmi1=新建对象J菜单项("退出");
公共的静态的JMenuItemmi1_0=新建对象J菜单项("关于");
公共的静态的JTextAreadlg_1_text=新建对象JTextArea();
公共的静态的LabelinfoLab=新建对象Label("提示:
");
公共的静态的LabelinfoTex=新建对象Label("");
公共的静态的LabelscoreLab=新建对象Label("分数:
");
公共的静态的LabelscoreTex=新建对象Label("0");
公共的静态的LabelspeedLab=新建对象Label("级数:
");
公共的静态的LabelspeedTex=新建对象Label("1");
公共的静态的MyTimertimer;
公共的静态的整数类型speedMark=1;
公共的静态的整数类型startSign=0;
//成员方法
公共的空类型执行的动作(动作事件e)
{
如果(e.获取来源()等于but[0])
{
启动Sign赋值1;
infoTex.设置文本("游戏已经开始!
");
but[0].设置可用性(假);
but[1].设置可用性(真);
but[4].设置可用性(真);
timer.resume();
}
如果(e.获取来源()等于but[1]或e.获取来源()等于mi0)
{
启动Sign赋值0;
gameScore赋值0;
timer.suspend();
num_csh_re启动();
re绘制();
rand_block();
scoreTex.设置文本("0");
infoTex.设置文本("新游戏!
");
but[0].设置可用性(真);
but[1].设置可用性(假);
but[4].设置可用性(假);
}
如果(e.获取来源()等于but[2])
{
infoTex.设置文本("降低级数!
");
speedMark减减;
如果(speedMark小于等于1)
{
speedMark赋值1;
infoTex.设置文本("已经是最低级数!
");
}
speedTex.设置文本(speedMark加"");
}
如果(e.获取来源()等于but[3])
{
infoTex.设置文本("提高级数!
");
speedMark加加;
如果(speedMark大于等于9)
{
speedMark赋值9;
infoTex.设置文本("已经是最高级数!
");
}
speedTex.设置文本(speedMark加"");
}
如果(e.获取来源()等于but[4])
{
调用对象.add(noStop);
调用对象.remove(but[4]);
infoTex.设置文本("游戏暂停!
");
timer.suspend();
}
如果(e.获取来源()等于noStop)
{
调用对象.remove(noStop);
调用对象.add(but[4]);
infoTex.设置文本("继续游戏!
");
timer.resume();
}
如果(e.获取来源()等于but[5]或e.获取来源()等于mi1)
jf.dispose();
如果(e.获取来源()等于mi1_0)
{
dlg_1赋值新建对象JDialog(jf,"关于");
尝试
{
//a
文件输入流io赋值新建对象文件输入流("resource/guanyu.txt");
字节类型a[]赋值新建对象字节类型[io.available()];
io.读(a);
io.关闭();
字符串str赋值新建对象字符串(a);
dlg_1_text.设置文本(str);
}
捕获(异常g)
{
dlg_1_text.设置可编辑性(假);
dlg_1.add(dlg_1_text);
dlg_1.pack();
dlg_1.设置可变大小(假);
dlg_1.设置大小(200,120);
dlg_1.设置位置(400,240);
dlg_1.show();
}
}
}
//成员方法
公共的空类型block1()
{
game_body[0][4]赋值1;
game_body[1][4]赋值1;
game_body[2][4]赋值1;
game_body[3][4]赋值1;
}
//成员方法
公共的空类型block2()
{
game_body[3][4]赋值1;
game_body[2][4]赋值1;
game_body[3][5]赋值1;
game_body[2][5]赋值1;
}
//成员方法
公共的空类型block3()
{
game_body[1][4]赋值1;
game_body[2][4]赋值1;
game_body[3][4]赋值1;
game_body[3][5]赋值1;
}
//成员方法
公共的空类型block4()
{
game_body[1][4]赋值1;
game_body[2][4]赋值1;
game_body[3][4]赋值1;
game_body[2][5]赋值1;
}
//成员方法
公共的空类型block5()
{
game_body[1][4]赋值1;
game_body[2][4]赋值1;
game_body[3][4]赋值1;
game_body[1][5]赋值1;
}
//成员方法
公共的空类型block6()
{
game_body[1][5]赋值1;
game_body[2][5]赋值1;
game_body[2][4]赋值1;
game_body[3][4]赋值1;
}
//成员方法
公共的空类型block7()
{
game_body[1][4]赋值1;
game_body[2][4]赋值1;
game_body[2][5]赋值1;
game_body[3][5]赋值1;
}
//成员方法
公共的空类型cancelDW()
{
对于(整数类型k赋值0;k小于4;k加加)
{
game_sign_x[k]赋值0;
game_sign_y[k]赋值0;
}
}
//成员方法
公共的Voidchange_body(整数类型blockNumber)
{
dingwei();
如果(blockNumber等于1与重复wnSign等于假)
如果(game_sign_y[0]等于game_sign_y[1]与game_sign_y[3]小于等于16)
如果(game_body[game_sign_y[0]减1][game_sign_x[0]加1]不等于2与game_body[game_sign_y[3]加2][game_sign_x[3]减2]不等于2)
{
num_csh_game();
game_body[game_sign_y[0]减1][game_sign_x[0]加1]赋值1;
game_body[game_sign_y[1]][game_sign_x[1]]赋值1;
game_body[game_sign_y[2]加1][game_sign_x[2]减1]赋值1;
game_body[game_sign_y[3]加2][game_sign_x[3]减2]赋值1;
infoTex.设置文本("游戏进行中!
");
re绘制();
}
如果(game_sign_x[0]等于game_sign_x[1]与game_sign_x[0]大于等于1与game_sign_x[3]小于等于7)
如果(game_body[game_sign_y[0]加1][game_sign_x[0]减1]不等于2与game_body[game_sign_y[3]减2][game_sign_x[3]加2]不等于2)
{
num_csh_game();
game_body[game_sign_y[0]加1][game_sign_x[0]减1]赋值1;
game_body[game_sign_y[1]][game_sign_x[1]]赋值1;
game_body[game_sign_y[2]减1][game_sign_x[2]加1]赋值1;
game_body[game_sign_y[3]减2][game_sign_x[3]加2]赋值1;
infoTex.设置文本("游戏进行中!
");
re绘制();
}
如果(blockNumber等于3与重复wnSign等于假)
如果(game_sign_x[0]等于game_sign_x[1]与game_sign_x[0]等于game_sign_x[2]与game_sign_y[2]等于game_sign_y[3]与game_sign_x[0]大于等于1)
如果(game_body[game_sign_y[0]加1][game_sign_x[0]减1]不等于2与game_body[game_sign_y[2]减1][game_sign_x[2]加1]不等于2与game_body
[game_sign_y[3]减2][game_sign_x[3]]不等于2
)
{
num_csh_game();
game_body[game_sign_y[0]加1][game_sign_x[0]减1]赋值1;
game_body[game_sign_y[1]][game_sign_x[1]]赋值1;
game_body[game_sign_y[2]减1][game_sign_x[2]加1]赋值1;
game_body[game_sign_y[3]减2][game_sign_x[3]]赋值1;
infoTex.设置文本("游戏进行中!
");
re绘制();
}
如果(game_sign_y[1]等于game_sign_y[2]与game_sign_y[2]等于game_sign_y[3]与game_sign_x[0]等于game_sign_x[3]与game_sign_y[1]小于等于17)
如果(game_body[game_sign_y[0]][game_sign_x[0]减2]不等于2与game_body[game_sign_y[1]加1][game_sign_x[1]加1]不等于2与game_body[game_sign_y
[3]减1][game_sign_x[3]减1]不等于2
)
{
num_csh_game();
game_body[game_sign_y[0]][game_sign_x[0]减2]赋值1;
game_body[game_sign_y[1]加1][game_sign_x[1]加1]赋值1;
game_body[game_sign_y[2]][game_sign_x[2]]赋值1;
game_body[game_sign_y[3]减1][game_sign_x[3]减1]赋值1;
infoTex.设置文本("游戏进行中!
");
re绘制();
}
如果(game_sign_x[1]等于game_sign_x[2]与game_sign_x[1]等于game_sign_x[3]与game_sign_y[0]等于game_sign_y[1]与game_sign_x[3]小于等于8)
如果(game_body[game_sign_y[0]加2][game_sign_x[0]]不等于2与game_body[game_sign_y[1]加1][
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 过程 蓝图 文档
![提示](https://static.bdocx.com/images/bang_tan.gif)