0911090109江天成《打砖块游戏》.docx
- 文档编号:6787775
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:7
- 大小:28.24KB
0911090109江天成《打砖块游戏》.docx
《0911090109江天成《打砖块游戏》.docx》由会员分享,可在线阅读,更多相关《0911090109江天成《打砖块游戏》.docx(7页珍藏版)》请在冰豆网上搜索。
0911090109江天成《打砖块游戏》
一、题目(问题)描述
模拟打砖块游戏系统
二、功能分析
通过体验并分析后得出打砖块游戏主要功能包括:
1.可以实现游戏的基本功能,能调换方向,实现游戏的灵活性。
2.能自由进入和退出。
三、系统设计
1、程序总体结构
程序中由主模块负责协调各功能模块的工作。
进入程序后,根据输入操作,执行相应的左右移动、退出等功能。
图1打砖块的构图
2、界面设计
如图3,下面的表示通过选择左右移动等来进入各项功能,从而实现程序对信息的管理。
图3:
打砖块游戏界面
3.输入方式设计
此通讯录管理程序为dos下程序。
左右分别表示各项功能。
4.重要数据的数据结构设计
文件中函数的功能如下:
文件名
函数原形
函数功能
函数处理描述
打砖块游戏.c
voidSetmouse(int)
输入功能
设置游戏图形的移动范围
voidDraw(int)
绘图功能
利用此函数来完成界面绘图
intMsread(int)
读取功能
利用此函数来实现数据的读取
intMsinit()
初始化功能
用于完成数据的初始化
四、关键技术、难点及其解决方法
此程序的关键是是否有左右移动功能,打掉砖块,砖块消失。
五、测试方法
1.按键测试。
检查正确的输入时,是否界面正确表现;错误输入时,是否无效。
2.程序运行测试。
正确运行,观察是否异常;运行时中断,程序是否正确退出。
六、总结
通过此次课程设计的学习,我对知识有了深一层次的理解。
也体会到C语言编程所具有的独特魅力,它让我体会到了其中的乐趣。
在编写,调试,更改的过程中我深深体会到函数模块化设计的优越性、重要性。
在这次的课程设计中,让我深深地体现到进行软件开发不是一件简单的事情,它需要设计者具有全面的专业知识、缜密的思维、严谨的工作态度以及较高的分析问题、解决问题的能力。
也体会到C语言编程所具有的独特魅力,它让我体会到了其中的乐趣。
附1、功能说明.
此程序分为3个选项,向左移动、向右移动、退出等几个部分。
知道把所有砖块打下来,游戏结束。
附2、代码清单
#include
#include
#include
#include
unionREGSregs;
unsignedintzhuan[5];
intMsinit();
voidSetmouse(intleft,intright,inttop,intbuttom);
intMsread(int*xp,int*yp,int*bup);
voidDraw(intx,inty,intsizex,intsizey);
main()
{intmode=VGAHI,driver=VGA;
unsignedintl;
inti,gi,gj,j,flag=1;/*i,j是循环变量,flag是标记变量,-1:
向x负半轴移动,+1:
向x正半轴移动*/
doubleqx,qy,k,b=0.0,speech=0.4,x,y;
doubler=2.0,bx=60.0,byy=270.0;
doublepianx=100.0,piany=100.0,tx=20.0,ty=10.0,jx=2.0,jy=2.0;
intmx=0,my=0,mb,sum;/*sum纪录砖块的数目*/
FILE*p;
if((p=fopen("xia.txt","r"))==NULL)
{printf("Thefilecannotopen!
\n");
exit
(1);}
initgraph(&driver,&mode,"\\tc\\BGI");
Msinit();
Setmouse((int)(pianx+1+bx/2),(int)((tx+jx)*8+pianx-1-bx/2),(int)byy+piany,(int)byy+piany);
star:
cleardevice();/*程序重载的介入点*/
sum=0;
qx=100.0+pianx-10;qy=180.0+pianx-10;k=0.33;
setcolor(7);
rectangle((int)(pianx-2),(int)(piany-2),(int)((tx+jx)*8+2+pianx),302+piany);
setcolor
(1);
rectangle((int)(pianx-1),(int)(piany-1),(int)((tx+jx)*8+1+pianx),301+piany);
/*读取盘面情况*/
for(i=0;i<5;i++)
fscanf(p,"%x",&zhuan[i]);
/*画砖块*/
for(i=0;i<5;i++)
{l=1;
for(j=0;j<16;j++)
{if((zhuan[i]&l)==0)
{Draw((int)((jx+tx)*((16*i+j)%8)+pianx+jx),(int)((jy+ty)*((int)((16*i+j)/8))+piany+jy),
(int)tx,(int)ty);
sum+=1;
}
l=l*2;
}
}
for(;;)
{setfillstyle(1,0);
bar(mx-bx/2,my,mx+bx/2,my+5);
Msread(&mx,&my,&mb);
Draw(mx-bx/2,my,bx,5);
setcolor(0);
circle(qx,qy,r);
/*判断求是否反弹*/
if(qx-r<=pianx+1||qx+r>=(tx+jx)*8+pianx-1){flag=-flag;k=-k;}
if(qy-r<=piany+1)k=-k;
for(gi=0;gi<5;gi++)
{l=1;
for(gj=0;gj<16;gj++)
{
if((zhuan[gi]&l)==0)
{j=(16*gi+gj)/8;
i=(16*gi+gj)%8;
x=(jx+tx)*i+jx+tx/2+pianx;
y=(jy+ty)*j+jy+ty/2+piany;
/*边判断1*/
if(qy>=y-ty/2&&qy<=y+ty/2&&(pow(qx+r-x+tx/2,2)<1||pow(qx-r-x-tx/2,2)<1))
{flag=-flag;k=-k;
zhuan[gi]=zhuan[gi]|l;
sum-=1;
if(sum==0){printf("Win!
\n");getch();gotostar;}
setfillstyle(1,0);
bar((jx+tx)*i+pianx+jx,(jy+ty)*j+piany+jy,(jx+tx)*i+pianx+jx+tx,(jy+ty)
*j+piany+jy+ty);
}
else
/*边判断2*/
if(qx>
;=x-tx/2&&qx<=x+tx/2&&(pow(qy+r-y+ty/2,2)<1||pow(qy-r-y-ty/2,2)<1))
{k=-k;
zhuan[gi]=zhuan[gi]|l;
sum-=1;
if(sum==0){printf("Win!
\n");getch();gotostar;}
setfillstyle(1,0);
bar((jx+tx)*i+pianx+jx,(jy+ty)*j+piany+jy,(jx+tx)*i+pianx+jx+tx,(jy+ty)
*j+piany+jy+ty);
}
else
/*角判断*/
if(pow(qx-x+tx/2,2)+pow(qy-y+ty/2,2)<=r*r||pow(qx-x-tx/2,2)+pow(qy-y+ty/2,2)<=r*r||
pow(qx-x+tx/2,2)+pow(qy-y-ty/2,2)<=r*r||pow(qx-x-tx/2,2)+pow(qy-y-ty/2,2)<=r*r)
{flag=-flag;
zhuan[gi]=zhuan[gi]|l;
sum-=1;
if(sum==0){printf("Win!
\n");getch();gotostar;}
setfillstyle(1,0);
bar((jx+tx)*i+pianx+jx,(jy+ty)*j+piany+jy,(jx+tx)*i+pianx+jx+tx,(jy+ty)
*j+piany+jy+ty);
}
}l=l*2;}}
/*棍棒的反弹*/
if(qx<=mx+bx/2&&qx>=mx-bx/2&&pow(qy+r-my,2)<1){k=-(k/pow(k*k,0.5))*(0.3*bx/(pow(pow
(qx-mx,2),0.5)+0.000001));}
if((int)(qy+r)>my+0.5){printf("DEAD!
");Setmouse(0,0,640,480);getch();exit
(1);}
b=qy-qx*k;
if(flag==1)qx=qx+speech/pow(1.0+k*k,0.5);
if(flag==-1)qx=qx-speech/pow(1.0+k*k,0.5);
qy=qx*k+b;/*计算球心坐标*/
setcolor(14);
circle((int)qx,(int)qy,r);
delay
(1);
if(mb==1){Setmouse(0,0,640,480);exit
(1);}
}
}
/*这个函数用于实现鼠标的初始化*/
intMsinit()
{intrecored;
regs.x.ax=0;
int86(0x33,®s,®s);
recored=regs.x.ax;
if(recored==0)
{printf("MousenotfounddorMousedrivernotinstalled.\n");
return0;
}
else
returnrecored;
}
/*下面的函数用于实现设置鼠标的移动范围*/
voidSetmouse(intleft,intright,inttop,intbuttom)
{
regs.x.ax=7;
regs.x.cx=left;
regs.x.dx=right;
int86(0x33,®s,®s);
regs.x.ax=8;
regs.x.cx=top;
regs.x.dx=buttom;
int86(0x33,®s,®s);
}
/*下面这个函数用于实现鼠标的读取*/
intMsread(int*xp,int*yp,int*bup)
{intxnew,ynew,ch;
if(kbhit())returngetch();
regs.x.ax=3;
int86(0x33,®s,®s);
xnew=regs.x.cx;
ynew=regs.x.dx;
*bup=regs.x.bx;
*xp=xnew;
*yp=ynew;
return-1;
}
/*下面这个子程序是完成描绘一个按钮*/
voidDraw(intx,inty,intsizex,intsizey)/*x,y为左上角坐标sizex,sizey为长和宽*/
{intsizx=sizex-1;
intsizy=sizey-1;
setcolor(15);/*这里最好用白色*/
line(x,y,x+sizx-1,y);
line(x,y+1,x+sizx-2,y+1);
line(x,y,x,y+sizy-1);
line(x+1,y,x+1,y+sizy-2);
setcolor(8);/*这里最好用深灰色*/
line(x+1,y+sizy,x+sizx,y+sizy);
line(x+2,y+sizy-1,x+sizx,y+sizy-1);
line(x+sizx-1,y+1,x+sizx-1,y+sizy);
line(x+sizx,y+2,x+sizx,y+sizy);
setcolor(7);/*这里最好用灰色*/
putpixel(x,y+sizy,3);
putpixel(x+1,y+sizy-1,3);
putpixel(x+sizx,y,3);
putpixel(x+sizx-1,y+1,3);
setfillstyle(1,7);/*这里最好用灰色,设置填充模式*/
bar(x+2,y+2,x+sizx-2,y+sizy-2);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 打砖块游戏 0911090109 江天 砖块 游戏