人机界面交互大作业.docx
- 文档编号:11002091
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:14
- 大小:470.80KB
人机界面交互大作业.docx
《人机界面交互大作业.docx》由会员分享,可在线阅读,更多相关《人机界面交互大作业.docx(14页珍藏版)》请在冰豆网上搜索。
人机界面交互大作业
第一章系统需求分析
1.1 系统需求
宝石探秘是—款锻炼眼力的宝石交换消除游戏。
游戏画面会出现各种各样、不同颜色的宝石,游戏的规则就是通过交换相邻的两块宝石,使3个同一颜色的宝石连在一起,就可以消去他们。
只能交换横向、纵向,不能是斜向的。
在游戏的主程序中,最重要的两项数据是一个记录每个图形的类型的二维数组和一个记录每个图形状态的二维数组。
每个图形的类型由电脑随机产生。
每种图形的颜色记录在一个数组中。
用三个整型变量分别记录玩家的关数、生命值、得分。
用两个整型变量记录光标的位置。
用两个长型变量记录起始时间和停止时间。
1.2 功能需求
设计一款简单C语言游戏,游戏的主要功能是在游戏区随机填满四种图形(圆形、三角形、正方形和菱形),但开始时横向和纵向都不能有三个或三个以上相同的图形相连。
通过交换相邻位置的图形使尽可能多的图形相连,即可消去相连图形(清除前图形会闪烁),得分为消去相连图形的个数。
直到限定时间到,结束一局。
程序支持键盘操作,不支持鼠标操作。
在初始界面下按F2可以开始游戏。
按F3进入选项菜单,在选项菜单中用户可以选择要玩的等级(7X7或8X9),并分别选择四种图形的颜色。
按ESC可以随时退出游戏。
游戏开始后用户可以通过上下左右键来控制光标的位置。
按ENTER键可以选中一个未选中的图形,再将光标移动到选中图形的上下或左右图形上,再按ENTER键,即可实现相邻图形的交换。
如果光标指向的图形已选中,再按ENTER键可以取消图案被选中的状态。
按F4键可以暂停游戏。
限定时间到用户未成功过关则生命值减一,生命值为零时,游戏结束。
每局结束,都有文字提示。
用户过关会显示“welldone”,本局失败显示“tryagain”,游戏结束显示“gameover”。
1.3 性能需求
1.硬件环境
本程序是用TurboC3.0开发的,在xp环境下运行。
在Vista操作系统下不可运行。
● 处理器:
IntelPentium4 3.06GX 或更高
● 内存:
256M(推荐)
● 硬盘空间:
40GB
● 显卡:
SVGA显示适配器
2.软件环境
● 操作系统:
Windows2000/XP
● 开发软件:
MicrosoftVisualStudio.NET2008
● 数据库:
MicrosoftSQLServer2005
第二章概要设计
2.1局部数据结构
利用二维数组记录每个图形的类型和状态。
每次交换、清除、重新填入图形,都要改变数组
元素的値。
并重新绘制图形。
main()函数运行后,如果用户按F3选择SETTING选项后,调用函数setting(),进行用户设定,改变参数的值。
当用户按F2选择START选项后,调用函数start(),游戏开始。
结构体:
structDiamond{
intx;
inty;
intlife;
inttype;
}diamond[9][9];//用于钻石坐标定位,判断消除和类型分配。
全局数组:
charscoreup[3]={0};//记录分数时所用各位数数组
全局变量:
intLife1,time1,person;//消去宝石累加之和,生命条数,时间计数,剩余人数
intupnum,downnum,leftnum,rightnum;//上下左右键盘响应次数记录
intdiamondnum=3;//初始化宝石数量
intxselect,yselect;//ENTER后位置
intx1select,y1select;//前一次ENTER后位置
intflagE=0;//判断是否响应ENTER
intmoveselect=0;//判断是否移动光标
intLevel=0;//等级标志
inti1,j1,k1,k2;//选择模式参数
intPm=0,Pn=0,Pfm=0,Pfn=0,score=0;//记录光标移动所在宝石的位置
time_tStart,End;//时间始末参数
2.2全局结构
2.3函数模块分析
Voidsetting()用于设置游戏关卡和各种图形的颜色
Voidstart()用于开始游戏,
Voiddeal()在初始化图形时,保证最初的图形不会出现三个或三个以上相同图形相连。
Voidkeys()用于start()中的键盘响应,按上下左右键移动光标,按ENTER键选中图形。
Voidgame()用于判断是否超过限定时间,结束游戏。
Intchange()用于检测两个位置的图形交换后是否出现三个或三个以上相同图形相连,若有,则记录应该清除的图形位置,并返回1,表示可以交换。
Voidcheck()用于清除相连的图形,闪烁,并完成图形的下落和重新生成,并检查图形下落后是否有新的相连图形,若有则记录应清除的图形,进行下一次清除。
Voidsan()用于绘制三角形并填充颜色。
Voidju()用于绘制正方形并填充颜色。
Voidling()用于绘制菱形并填充颜色。
Voidyuan()用于绘制圆形并填充颜色。
Voiddraw()用于根据二维数组元素的值在相应位置绘制相应图形。
Voidshow()显示初始界面。
第三章详细设计及代码编写
3.1功能函数设计
Ø Voidsetting()函数进行游戏设定,通过改变变量level的值改变关卡,通过给记录颜色的数组的每个元素的值来改变每种图形的颜色。
Ø Voidstart()函数,开始游戏。
根据level的值确定行列数,画出网格,调用random()函数给记录图形类型的二维数组每个元素赋值,并调用deal()函数使初始画面中没有三个或三个以上相同图形相连的情况。
根据每个数组的值,画出相应位置的图形。
用time()函数记录开始时间。
做一个循环。
若有键盘输入则调用keys()函数键盘响应。
每次按回车后重新输出分数。
若分数已达到过关的分数则开启下一关。
再次调用time()函数记录当前时间。
用两次时间的差值计算剩余时间,并用bar()函数画出时间进度条。
Ø Voiddeal()利用循环扫描是否有三个或三个以上图形相连,若有则把重新生成此位置对应数组元素的值,并用递归方式调用deal(),初始化图形。
Ø Voidkeys()首先判断是否有键盘输入,若有则接受键盘扫描码,若是方向键则吧当前光标位置画绿色矩形框,并把移动后所在位置画洋红色矩形框,表示光标移动。
若是ESC键则调用exit(0)函数结束程序。
若是ENTER键则改变变量et的值。
et为记录是否已选中其他图形的变量。
若et为1,则调用change()函数。
若change()返回值为1,则调用check()清除相连的图形,并完成图形下落。
Ø Voidgame()调用time()函数,获得当前时间,与初始时间相减判断限定时间是否已经到达。
若已到达限定时间则结束一局。
若生命值减一,若生命值变为一则游戏结束。
Ø Voidchange()扫描是否有相连的图形,若有则把对应的记录状态的数组元素值改为1,并返回1,并把交换的两个图形对应数组元素的值交换,并重新画出两个位置的图形,完成交换。
Ø Voidcheck()清除的状态数组元素为1的对应图形,每清除一个图形分数加一,重新绘制图形,再清除,完成闪烁。
利用循环,把每列的图形对应数组元素由下向获得上面状态数组元素为0类型的值,若首行的元素也被清除则重新随机生成。
从而完成图形的下落。
此函数中,用循环函数判断上面有多少被清除的图形,判断该获得哪个元素的值。
重新利用循环扫描是否有相连图形。
Ø Voidsan()、voidling()用直线画出密封图形,并有floodfill()函数填充图形颜色
Ø Voidyuan()、voidju()用circle()和rectangle()函数画图并用floodfill()函数填充颜色。
Ø Voiddraw()用switch()语句根据数组元素的值画出相应的图形,避免其他函数中需要重新画图时,书写的语句过长。
Ø Voidshow()输出初始界面。
3.2游戏欢迎模块
核心代码部分:
voidinstruction()
{intkeycode;
hua(480,90);
setcolor(10);
rectangle(0,0,639,479);
setcolor(4);
settextstyle(0,0,2);
outtextxy(100,10,"Instructrion!
");
setcolor(15);
settextstyle(3,0,2);
outtextxy(5,40,"1:
YougonnaplayBejeweled,ifyoudon't");
outtextxy(5,65,"wannacontinue,pressEsc.");
outtextxy(5,100,"2:
Youwillfirstchose7X7modeor");
outtextxy(5,125,"8X9mode,useArrowkeytoselect.");
outtextxy(5,160,"3:
Whilegamestarts,youneedhurryto");
outtextxy(5,185,"findandexchange2diamondstomake");
outtextxy(5,210,"3samediamondslineup,thenscoreup");
outtextxy(5,245,"4:
UseEntertoselect,Arrowkeytomove");
outtextxy(5,270,"Esctoquitgame!
");
outtextxy(5,305,"5:
Aslevelup,difficultylevelwillup,more");
outtextxy(5,330,"diamondswilljoinin.");
outtextxy(5,365,"6:
Useyourwisdomandhaveagoodtime!
");
settextstyle(3,0,4);
setcolor(RED);
outtextxy(100,400,"PressEntertocontinue!
");
do{keycode=all_key();}
while(keycode!
=ENTER&&keycode!
=ESC);
if(keycode==ESC)
closegraph();
}
3.3游戏选择模块
核心代码部分:
intselectmode()
{intkeycode;
intflag=0;
do{
setcolor(9);
keycode=all_key();
if(keycode==ESC)
break;
if(keycode==DOWN){
fire(110,235,4,15);
fire(110,235,12,10);
fire(110,235,14,5);
fire(110,175,0,15);
flag=1;
}
if(keycode==UP){
fire(110,175,4,15);
fire(110,175,12,10);
fire(110,175,14,5);
fire(110,235,0,15);
flag=0;
}
}while(keycode!
=ENTER);
if(flag==1)
return1;
if(flag==0)
return0;
}
3.4游戏通关模块
核心代码部分:
voidfire(intx,inty,intcolor,intsize)
{setcolor(color);
setfillstyle(1,color);
fillellipse(x+15,y+15,size,size);}
3.5游戏运行模块
核心代码部分:
voidspread()
{intx;
setcolor(0);
setfillstyle(1,0);
for(x=0;x<=150;x++){
bar(318-x*2,5,320-x*2,475);
bar(320+x*2,5,332+x*2,475);
}}
voiddiamond1(intx,inty)
{setcolor(4);
setfillstyle(1,5);
fillellipse(x+25,y+25,20,8);
fillellipse(x+25,y+25,8,20);
setcolor
(2);
setfillstyle(1,14);
fillellipse(x+25,y+25,8,8);
}
3.6游戏结束模块
核心代码部分:
voidgameover()
{setcolor(0);
setfillstyle(1,0);
bar(1,1,639,479);
intkeycode;
setcolor(RED);
settextstyle(0,0,7);
outtextxy(50,220,"GAMEOVER");
while(all_key()!
=ESC);
closegraph();
}
第四章测试设计
4.1测试设计内容
在开发这个软件系统的过程中,面对着极其错综复杂的问题,人的主观认识不可能完全符合客观现实,在本次设计过程中,我采用循环测试法,力求在每个阶段结束之前通过严格技术审查,即每完成一个功能,就进行测试,尽可能早的发现并纠正差错,完成模块测试之后再进行系统测试。
在该设计中,我偏重考虑了当用户输入的信息出错时,系统就会出现提示,以便让用户知道出错的原因,并能及时做出修改,所以我站在用户的角度考虑,尽可能设想各种边界条件,如记录为空,输入为空,输入出错等,以此来发现错误,纠正错误,取得了一定的效果。
综上所述,程序在windowsXP下运行正常。
清除横向纵向以及横纵相连等特殊情况均可正常清除,并正确的下落图形。
靠近边界的相连图形可以正常清除和下落。
4.2用户手册
这是一款简单C语言游戏,可以在dos、windowsxp、windows2000等操作系统上运行。
无需安装,即可使用。
游戏的主要功能是在游戏区随机填满四种图形(圆形、三角形、正方形和菱形),但开始时横向和纵向都不能有三个或三个以上相同的图形相连。
通过交换相邻位置的图形使尽可能多的图形相连,即可消去相连图形(清除前图形会闪烁,清除后会发出声音),得分为消去相连图形的个数。
直到限定时间到,结束一局。
程序支持键盘操作,不支持鼠标操作。
在初始界面下按F2可以开始游戏。
按F3进入选项菜单,在选项菜单中用户可以选择要玩的等级(7X7或8X9),并分别选择四种图形的颜色。
按ESC可以随时退出游戏。
游戏开始后用户可以通过上下左右键来控制光标的位置。
按ENTER键可以选中一个未选中的图形,再将光标移动到选中图形的上下或左右图形上,再按ENTER键,即可实现相邻图形的交换。
如果光标指向的图形已选中,再按ENTER键可以取消图案被选中的状态。
按F4键可以暂停游戏。
限定时间到用户未成功过关则生命值减一,生命值为零时,游戏结束。
每局结束,都有文字提示。
用户过关会显示“welldone”,本局失败显示“tryagain”,游戏结束显示“gameover”。
第五章总结
终于到了总结的部分,好开心哦。
看着运行正常的程序,心里涌出一股强烈的成就感。
这是第一次真正意义上的独立设计程序,最重要的是,它达到了我预期的效果,甚至可以毫不客气的说,它完成的比我期望的要更好。
总算没有白白辜负这一个多星期以来的期待,虽然真的是让我头疼到晚上都没睡好。
接下来,谈谈我的程序从开始到现在的完美蜕变历程吧。
最开始心中充满疑问,对自己的实力颇为怀疑,对这种图形的处理没有信心。
以前只编过一些比较简单的字符处理程序,编这样一个比较难的程序,出现了很多错误,有时为了一个错误调试几天几夜,但是只要不放弃,最终还是成功了。
一步一步地完成了程序的一些功能,最后终于做出了符合要求的程序。
这次课设锻炼了我的自学能力。
我有时对函数的理解是错误的导致了程序的错误,在老师的指导下我改正了错误,加深了理解。
这次课设也是对这一学期的C语言的一次很好的复习,也加深了我对数组、变量、循环等内容的理解,提高了我的逻辑思维和设计算法的能力。
在程序编写中,我认识到软件要有简便的界面,良好的程序风格。
拥有这些条件,程序的可读性才会好,开发的复杂度才能大大减少,修改代码时更加容易下手。
我认为,所谓友好的界面,就是用户需要的界面,力求简单全面。
所以设计一个界面时,开发人员必须要了解用户的想法,从用户的角度去设计。
在编码中,良好的编程风格与习惯是提高工作效率的一个重要方面,而且良好的编程风格与习惯也是使软件便于维护的基础。
那如何是良好的编程风格与习惯呢?
我认为主要是程序的模块化、必要的注释。
所谓模块化就是使程序的功能实现分成多个单独的功能模块,而不能在一大段代码中实现多个功能,如果这样做,别的人是非常难读懂你的程序。
必要的注释,显而易见是要在程序的编写中加入对程序的说明,原因就是为了别人能读懂你的程序,过一段时间后你自己还能读懂自己的程序。
最后说明下这次课程设计给我感受最深的有三点:
1.进行软件开发这样的工作,要有恒心,要能静下心来做,不能浮躁。
2.要善于利用网络资源,获取各种有用的信息。
3.要亲自动手编程,调试,记录错误的原因及方法,这样有助于更顺利地开发项目。
参考文献
[1]《高效掌握ADO.NET—C#编程篇》KoureshArdestani著,张哲峰译清华大学出版社
[2]《ASP.NET企业级开发案例精解(C#)》中国林业出版社
[3]《SQLServer数据库开发入门与范例解析》夏邦贵著,北京机械工业出版社
[4]《VisualC#2005技术内幕》(美)马歇尔著许华杰/刘光惠译
[5]《大话数据库》邹茂扬,田洪川著,清华大学出版社
[6]《SQLServer使用教程(第三版)》郑阿奇著,电子工业出版社
[7]《ADO.NET数据库应用开发》张骏著,北京机械工业出版社
[8]《数据库系统概论(第四版)》王珊著,高等教育出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人机界面 交互 作业