SAOLEI 课程设计报告范文文档格式.docx
- 文档编号:18671043
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:55
- 大小:201KB
SAOLEI 课程设计报告范文文档格式.docx
《SAOLEI 课程设计报告范文文档格式.docx》由会员分享,可在线阅读,更多相关《SAOLEI 课程设计报告范文文档格式.docx(55页珍藏版)》请在冰豆网上搜索。
根据此设计题目要求我们意识到在此程序中应会有一些关于画图的程序,声音程序,鼠标的设置程序.对于排行榜还应有一些数组、文件方面的知识.所以我们需要查一下这些方面的知识。
我们的老师除了要我们做这个游戏程序以外还要求我们每个人都有自己的音乐和动画。
.
二软件需求分析
对于我们的软件系统-----扫雷游戏,我们应该把界面弄得尽量美观,因为只有美观玩的人才能有兴趣往下玩,所以在画界面时应该往美观与整洁方面努力.同时我们还应该把排行榜弄好,因为具有排行榜才能使玩家更有兴趣去玩.我们还应该设一些难度选择,以供提高玩者欲望.对于那个鼠标的控制应该设置的灵活,只有这样别人才会选你的软件。
另外,在游戏成功与失败时分别有不同的音乐与动画,使玩者心情舒畅,想继续挑战下一难度级别的扫雷。
三总体方案设计
扫雷游戏是供人玩的游戏,所以界面尽量美观,有难度选择和排行榜。
特点:
功能的模块化设计,
方便对其系统的完善,
提高了程序的可读性。
整体框图如下:
四详细设计*
这是我设计的动画部分和音乐,动画(另一部分在那里)是我和共同完成,音乐为真心英雄,三朵小花代表我和两个组员,主要表现了不经历风雨,如何见彩虹的理念。
接下来是进入登陆界面,首先输入密码,密码为abc(可以改成任意9个字符),有三次输入机会,输入正确时继续输入姓名,输入错误密码时退出该系统,未完待续……
我的程序部分代码:
voidinterrupt(*handler)();
voidinterruptmusic();
intfr[]={262,262,262,262,294,330,440,392,330,392,392,392,\
523,523,523,523,523,523,330,330,392,523,523,523,523,523,\
392,392,392,330,330,294,262,294,294,294,294,294,294,294,330,294,262,294,\
262,262,262,262,294,330,440,392,330,392,392,523,523,523,523,523,\
523,330,440,392,392,523,523,523,523,523,440,392,392,440,330,\
330,294,262,262,294,294,294,330,330,392,294,330,262,262};
inttim[]={4,4,4,4,4,4,4,4,4,8,2,2,2,2,2,2,4,4,4,4,12,4,4,4,4,8,\
4,4,4,4,2,6,2,2,2,2,2,2,4,2,2,4,12,4,4,4,4,4,4,4,4,4,8,4,2,2,2,2,2,2,4,\
4,4,4,12,4,4,2,2,8,4,4,4,2,2,2,2,4,2,2,4,4,2,2,4,4,2,2,12,12};
/*此音乐为真心英雄*/
voidinterruptmusic()/*音乐中断函数*/
{staticintflag=0,note=0,fre,dur;
if(flag>
=(int)(dur*2))
{flag=0;
nosound();
fre=fr[note];
dur=tim[note];
sound(fre);
note++;
if(note>
=88)note=0;
}
handler();
flag++;
}
voiddonghua()
{intgdriver=DETECT,gmode,i=0,j,k,k1,x,s,en,r,x1,y1;
initgraph(&
gdriver,&
gmode,"
c:
\\win-tc\\projects"
);
handler=getvect(0x1c);
/*调用中断函数,来实现音乐与动画同步*/
setvect(0x1c,music);
setcolor(RED);
setfillstyle(SOLID_FILL,4);
/*绘画太阳与云朵*/
circle(90,90,40);
floodfill(89,89,4);
setcolor(15);
setfillstyle(SOLID_FILL,15);
fillellipse(210,90,28,48);
fillellipse(190,90,80,24);
floodfill(200,95,15);
for(j=160;
j<
=480;
j+=160)/*绘画小花的茎和叶子*/
{setcolor(GREEN);
line(j-1,380,j-1,480);
line(j,380,j,480);
line(j+1,380,j+1,480);
setfillstyle(SOLID_FILL,GREEN);
fillellipse(j-30,450,30,15);
setcolor(BROWN);
line(j-60,450,j,450);
for(k=0;
k<
=3;
k++)/*此部分为绘画小花,通过循环控制颜色变化,来实现动画*/
for(i=0;
i<
=10;
i++)
j+=160)
{setcolor(i%16);
setfillstyle(SOLID_FILL,(i+7)%16);
circle(j,378,17);
floodfill(j,378,i%16);
setfillstyle(SOLID_FILL,(i+1)%16);
circle(j,339,21);
floodfill(j,339,i%16);
setfillstyle(SOLID_FILL,(i+2)%16);
circle(j-34,365,21);
floodfill(j-34,365,i%16);
setfillstyle(SOLID_FILL,(i+5)%16);
circle(j+34,365,21);
floodfill(j+34,365,i%16);
setfillstyle(SOLID_FILL,(i+3)%16);
circle(j-24,406,21);
floodfill(j-24,406,i%16);
setfillstyle(SOLID_FILL,(i+4)%16);
circle(j+24,406,21);
floodfill(j+24,406,i%16);
settextstyle(0,0,4);
/*为图形输出设置当前的文本属性横向和竖向,0为横向排列,1为竖向排列。
size为字体大小:
可用interger做参数*/
setcolor(7);
outtextxy(120,180,"
Welcometoplay"
/*在指定位置显示一字符串*/
setcolor(14);
outtextxy(118,178,"
/*输出Welcometoplayourgame!
!
*/
outtextxy(140,240,"
ourgame!
"
outtextxy(138,238,"
delay(800000);
setvect(0x1c,handler);
/*停止音乐*/
closegraph();
/*关闭图形模式,以便进入文本模式输入文本*/
voiddeng_lu()/*此函数为登陆界面函数,在开始动画音乐结束时出现,输入密码为abc,有三次输入机会,输入正确时继续输入姓名,输入错误密码时退出该系统*/
{charq[10],qq[10]="
abc"
;
inti,ii=1,j,k;
textcolor(YELLOW);
for(j=0;
3;
j++)
{cprintf("
\r\n\r\n\r\nPleaseinputpassword:
(q[i]=getch())!
='
\r'
{if(i==9)
break;
else
printf("
*"
qq[k]!
\0'
k++)
{if(q[k]!
=qq[k])
\r\nYourpasswordiswrong!
elseii=0;
if(ii==0)break;
textcolor(LIGHTCYAN);
if(ii==0)
\r\n\r\n\r\nPleaseinputyourname:
gets(p);
\r\n\r\nSORRY!
YOUMUSTEXIT!
getch();
exit(0);
voidbreak_score()/*此函数为当游戏胜利时判断是否打破记录,如果打破记录,将姓名和分数存入磁盘中,以便下次点击排行榜时输出,如果没打破纪录,也同样有提示输出此函数在win函数中调用,另外在initmap()地图初始化函数中有first=time(NULL);
语句和在win()函数中有second=time(NULL);
语句,以便调用difftime()函数*/
{inti;
if(peo[nn].time>
difftime(second,first))/*打破记录情况*/
{peo[nn].time=difftime(second,first);
gotoxy(40,22);
Youbreakthecorse!
p[i]!
peo[nn].name[i]=p[i];
peo[nn].name[i]='
if(nn==0)/*nn=0表示为易,nn=1表示为中,nn=2表示为难*/
fp=fopen("
filea"
"
wb"
elseif(nn==1)
fileb"
elseif(nn==2)
filec"
fwrite(&
peo[nn],sizeof(structpeople),1,fp);
/*读入文件,存入磁盘*/
fclose(fp);
else/*没打破纪录情况*/
{gotoxy(40,23);
Youdon'
tbreakthecorse~~~"
voidfopenfp()/*点击排行榜时打开文件,输出姓名与分数,此函数在full_window函数中调用*/
{fp=fopen("
rb"
/*打开文件进行读写*/
fread(&
peo[0],sizeof(structpeople),1,fp);
gotoxy(15,4);
/*将光标移到该位置*/
%-20s"
peo[0].name);
/*从文件中调用结构体*/
%.0f"
peo[0].time);
close(fp);
/*关闭文件*/
peo[1],sizeof(structpeople),1,fp);
gotoxy(15,5);
peo[1].name);
peo[1].time);
peo[2],sizeof(structpeople),1,fp);
gotoxy(15,6);
peo[2].name);
peo[2].time);
voidha_mouse()/*此函数为鼠标函数,通过获取鼠标位置来判断点击功能选择的哪一部分,然后执行各个功能*/
{inti,j,k,x=-1,y=-1,flag=0,color;
inttx1,ty1,tx2,ty2,tbx;
intnew_x=ha_x,new_y=ha_y;
unionREGSinregs,outregs,regs2;
/*执行intr_num号中断,用户定义的寄存器值存于结构inregs中,执行完后将返回的寄存器值存于结构outregs中*/
inregs.x.ax=0x03;
/*获取鼠标位置和状态也可以用3*/
while(!
bioskey
(1))/*直接使用BIOS服务的键盘接口*/
{int86(0x33,&
inregs,&
outregs);
/*调用鼠标中断,通用8086软中断接口*/
regs2.x.ax=0x06;
regs2.x.bx=0x00;
int86(0x33,&
regs2,&
regs2);
/*CX=水平位置(最后释放时),DX=垂直位置(最后释放时)*/
tx2=regs2.x.cx;
/*cx寄存器中存的是横坐标*/
ty2=regs2.x.dx;
/*dx寄存器中存的是列坐标*/
if(x!
=outregs.x.cx||y!
=outregs.x.dx||tbx!
=outregs.x.bx)
{if(flag)
{for(j=0;
10;
j++)/*恢复上次鼠标一定范围内的像素颜色*/
6;
putpixel(x+i,y+j,re[j][i]);
/*在指定位置画一像素*/
flag=1;
/*====================================================================================================================扩充功能部分*/
if(outregs.x.bx&
0x01){/*鼠标左键按下------------------------鼠标点击判断*/
if(outregs.x.cx>
=639-19&
&
outregs.x.cx<
=638&
outregs.x.dx>
=1&
outregs.x.dx<
=18)exit(0);
/*关闭按钮判断鼠标在此坐标范围内退出*/
elseif(outregs.x.cx>
=32&
=21&
=38)/*主菜单-游戏*/
{if(n1==-1)m_save();
/*调用函数*/
elseif(n1==1)m_load();
n1=0;
n2=-1;
menu_window();
=33&
=64&
=38)/*主菜单-难度*/
{if(n1==-1)m_save();
elseif(n1==0)m_load();
n1=1;
=65&
=96&
=38){/*主菜单-排行榜*/
if(n1==-1)m_save();
elseif(n1==2)m_load();
n1=2;
elseif(n1==0&
n2==1)
/*开局*/
elseif((n1==0&
n2==0)||(outregs.x.cx>
=(ha_x+ha_x+2+mx*10)/2-16&
outregs.x.cx<
=(ha_x+ha_x+2+mx*10)/2+16&
outregs.x.dx>
=(ha_y+ha_y-30)/2-9&
=(ha_y+ha_y-30)/2+8)){/*开局*/
dead=0;
/*生*/
n1=-1;
m_load();
initmap();
elseif(n1==1&
n2==0){/*易*/
hard=0;
n2==1){/*中*/
hard=1;
n2==2){/*难*/
hard=2;
/*elseif(outregs.x.cx>
=new_x&
=new_x+1+mx*10+1&
+new_y-30&
=new_y)
{/*拖动扫雷图标扫雷*/
if(tg==0){扫雷部分存储
tg++;
=1+my*10+1+30;
=mx*10+2;
tgraph[j][i]=getpixel(ha_x+i,ha_y+j-30);
if(tbx&
1&
x>
x<
y>
=new_y-30&
y<
{
setcolor(YELLOW);
rectangle(new_x,new_y-29,new_x+1+mx*10,new_y+1+my*10);
/*画一个矩形,voidfarrectangle(intleft,inttop,intright,intbottom);
*/
rectangle(new_x,new_y-30,new_x+1+mx*10+1,new_y+1+my*10+1);
new_x+=outregs.x.cx-x;
new_y+=outregs.x.dx-y;
tg=2;
elseif(tg=2&
=new_y){
tg=0;
ha_x=new_x;
ha_y=new_y;
putpixel(ha_x+i,ha_y+j-30,tgraph[j][i]);
}*/
else{/*没有点击到按钮*/
if(n1!
=-1)m_load();
n1=n2=-1;
if(n1==0&
outregs.x.cx>
=2&
=31&
=40&
=75){/*游戏下级菜单操作*/
n2=(outregs.x.dx-40)/18;
if(n1==1&
=34&
=52&
=93){/*难度下级菜单操作*/
if(n1==2&
=93&
=111){/*排行榜下级菜单操作*/
/*-----------------------------左键点击控制部分*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SAOLEI 课程设计报告范文 课程设计 报告 范文