五子连珠报告.docx
- 文档编号:9346345
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:44
- 大小:78.47KB
五子连珠报告.docx
《五子连珠报告.docx》由会员分享,可在线阅读,更多相关《五子连珠报告.docx(44页珍藏版)》请在冰豆网上搜索。
五子连珠报告
高级语言程序设计报告
五子连珠
学号:
11070329
姓名:
段冰洋
指导老师:
杜永萍
2011年12月
1.需求分析……………………………………………………3
1.1功能与数据需求………………………………………………3
1.2界面需求………………………………………………………3
1.3开发与运行环境需求…………………………………………4
2.概要设计……………………………………………………5
2.1主要结构数据…………………………………………………5
2.2程序总体结构…………………………………………………5
3.详细设计……………………………………………………6
3.1.程序全代码与注释……………………………………………6
4.测试………………………………………………………16
5.用户手册…………………………………………………17
6.总结提高…………………………………………………19
6.1课程设计总结………………………………………………19
6.2对本课程意见与建议………………………………………19
7.附录:
源代码……………………………………………20
1需求分析
1.1功能与数据需求
1.1.1界面是900*600的视口。
1.1.2游戏区有一个15*15的方阵。
用户用鼠标点击一个球可以选中该球;用户选中一个小球后单击空白位置,可以把选中的小球移动到该位置。
1.1.3游戏开始阶段,点击“开始”开始游戏。
1.1.4规则:
球移动时,只有同色球五个相邻并组成一条直线(横向、竖向、斜向)的小球才可以消除并得分。
1.1.5每次移动球后,每消去1球,得1分。
1.1.6用户移动小球后,若消除小球,则系统自动生成与消除小球数量相同颜色相同的小球。
1.2界面需求
1.2.1游戏开始时直接显示初始界面,玩家点击开始后开始游戏。
1.2.2开始后,游戏随机生成三色棋子。
1.2.3游戏界面包括:
3种色小球、网格、当前得分、开始退出按钮。
1.3开发与运行环境需求
开发环境为MicrosoftVisualC++,操作系统windows98以上皆可。
2概要设计
2.1主要数据结构:
2.1.1结构体:
StructMOUSEMSG{
UINTuMsg;
boolmkCtrl;
boolmkshift;
boolmkLButton;
boolmkMButton;
boolmkRButton;
intx;
inty;
intscore;}
2.1.2数组:
str[15][15]
2.2程序总体结构:
2.2.2初始界面:
定义视口,画出表格;
2.2.3出球模块:
游戏开始阶段系统随机产生三种颜色的球和以后每次随机的五个球;
2.2.4鼠标相应模块:
判断所控制的球与退出等操作;(该函数中已经包括了对于竖排、横排、斜排消去小球的判断以及对分数的累加)
3详细设计
#include
#include
#include
#include
#include
#defineNUM110
#defineNUM210
intmain()//主函数
{
intc1=0;//定义参量
inta,b,c,e,f;
intc2=0;
intp=0;
intq=1;
intr=2;
inti,j,o,d,w=0,t=0,z=0,v=0,s=0,u=0,x1=0,x2=0;
intcol;
intstr[20][20]={0};
chars1[100];
intscore=0;
initgraph(900,600);
outtext("Welcome");
HRGNrgn=CreateRectRgn(60,60,511,511);//定义视口
setcliprgn(rgn);
for(i=2;i<20;i++)//生成棋盘
{
for(j=2;j<20;j++)
{
c1=i*30;
c2=j*30;
line(0,c1,700,c1);
line(c2,0,c2,600);
}
}
setcliprgn(NULL);
line(600,0,600,600);
line(600,200,1024,200);
line(600,400,1024,400);
outtextxy(610,10,"NowScore");
outtextxy(610,210,"Patten");
rectangle(700,250,820,280);
outtextxy(745,258,"开a始º?
");
rectangle(700,330,820,360);
outtextxy(745,340,"退ª?
出?
");
rectangle(700,90,820,120);
MOUSEMSGm=GetMouseMsg();//鼠标响应
while(true)//永真函数
{
if(MouseHit())
m=GetMouseMsg();
switch(m.uMsg)
{
caseWM_LBUTTONDOWN:
if(m.x>=700&&m.x<=820&&m.y>=330&&m.y<=360)//退出按钮
return0;
if(m.x>=700&&m.x<=820&&m.y>=250&&m.y<=280)//开始按钮
{
srand((unsigned)time(0));
for(i=0;i<4;i++)//随机生成棋子
{
for(j=0;j<4;j++)
{
a=rand()%15;
b=rand()%15;
str[a][b]=1;
c=rand()%15;
d=rand()%15;
str[c][d]=2;
e=rand()%15;
f=rand()%15;
str[e][f]=3;
setcolor(WHITE);
setfillstyle(RED);
circle(75+a*30,75+b*30,13);
floodfill(75+a*30,75+b*30,WHITE);
setcolor(WHITE);
setfillstyle(BLUE);
circle(75+c*30,75+d*30,13);
floodfill(75+c*30,75+d*30,WHITE);
setcolor(WHITE);
setfillstyle(GREEN);
circle(75+e*30,75+f*30,13);
floodfill(75+e*30,75+f*30,WHITE);
}
}
sprintf(s1,"%d",score);
outtextxy(750,100,s1);
}
for(i=0;i<20;i++)//移动棋子
{
for(j=0;j<20;j++)
{
if(m.x>=60+30*i&&m.x<=90+30*i&&m.y>=60+30*j&&m.y<=90+30*j)
{
if(str[i][j]!
=0)
{
col=str[i][j];
o=i;
p=j;
}
if(str[i][j]==0)
{
switch(col)
{
case1:
setcolor(WHITE);
setfillstyle(RED);
circle(75+i*30,75+j*30,13);
floodfill(75+i*30,75+j*30,WHITE);
setfillstyle(BLACK);
bar(61+30*o,61+30*p,89+30*o,89+30*p);
col=0;
str[i][j]=1;
str[o][p]=0;
break;
case2:
setcolor(WHITE);
setfillstyle(BLUE);
circle(75+i*30,75+j*30,13);
floodfill(75+i*30,75+j*30,WHITE);
setfillstyle(BLACK);
bar(61+30*o,61+30*p,89+30*o,89+30*p);
col=0;
str[i][j]=2;
str[o][p]=0;
break;
case3:
setcolor(WHITE);
setfillstyle(GREEN);
circle(75+i*30,75+j*30,13);
floodfill(75+i*30,75+j*30,WHITE);
setfillstyle(BLACK);
bar(61+30*o,61+30*p,89+30*o,89+30*p);
col=0;
str[i][j]=3;
str[o][p]=0;
break;
}
}
}
}
intk=0,t=0,w=0,a,b;//消去棋子
for(t=0;t<16;t++)
{
for(w=0;w<15;w++)
{
if(str[w][t]==str[w][t+1]&&str[w][t+1]==str[w][t+2]&&str[w][t+2]==str[w][t+3]&&str[w][t+3]==str[w][t+4]&&str[w][t+4]!
=0)
{
setfillstyle(BLACK);
bar(61+30*w,61+30*t,89+30*w,89+30*t);
bar(61+30*w,61+30*(t+1),89+30*w,89+30*(t+1));
bar(61+30*w,61+30*(t+2),89+30*w,89+30*(t+2));
bar(61+30*w,61+30*(t+3),89+30*w,89+30*(t+3));
bar(61+30*w,61+30*(t+4),89+30*w,89+30*(t+4));
if(str[w][t]==1)//判断消去颜色
{
while(k<5)//消去后生成棋子
{
a=rand()%15;
b=rand()%15;
if(str[a][b]==0)
{
setcolor(WHITE);
setfillstyle(RED);
circle(75+a*30,75+b*30,13);
floodfill(75+a*30,75+b*30,WHITE);
str[a][b]=1;
k=k+1;
score=score+1;
sprintf(s1,"%d",score);
outtextxy(750,100,s1);
}
}
}
if(str[w][t]==2)
{
while(k<5)
{
a=rand()%15;
b=rand()%15;
if(str[a][b]==0)
{
setcolor(WHITE);
setfillstyle(BLUE);
circle(75+a*30,75+b*30,13);
floodfill(75+a*30,75+b*30,WHITE);
str[a][b]=2;
k=k+1;
score=score+1;
sprintf(s1,"%d",score);
outtextxy(750,100,s1);
}
}
}
if(str[w][t]==3)
{
while(k<5)
{
a=rand()%15;
b=rand()%15;
if(str[a][b]==0)
{
setcolor(WHITE);
setfillstyle(GREEN);
circle(75+a*30,75+b*30,13);
floodfill(75+a*30,75+b*30,WHITE);
str[a][b]=3;
k=k+1;
score=score+1;
sprintf(s1,"%d",score);
outtextxy(750,100,s1);
}
}
}
str[w][t]=0;
str[w][t+1]=0;
str[w][t+2]=0;
str[w][t+3]=0;
str[w][t+4]=0;
}
}
}
intz=0,v=0;
for(z=0;z<14;z++)
{
for(v=0;v<16;v++)
{
if(str[z][v]==str[z+1][v]&&str[z+1][v]==str[z+2][v]&&str[z+2][v]==str[z+3][v]&&str[z+3][v]==str[z+4][v]&&str[z+4][v]!
=0)
{
setfillstyle(BLACK);
bar(61+30*z,61+30*v,89+30*z,89+30*v);
bar(61+30*(z+1),61+30*v,89+30*(z+1),89+30*v);
bar(61+30*(z+2),61+30*v,89+30*(z+2),89+30*v);
bar(61+30*(z+3),61+30*v,89+30*(z+3),89+30*v);
bar(61+30*(z+4),61+30*v,89+30*(z+4),89+30*v);
if(str[z][v]==1)
{
while(k<5)
{
a=rand()%15;
b=rand()%15;
if(str[a][b]==0)
{
setcolor(WHITE);
setfillstyle(RED);
circle(75+a*30,75+b*30,13);
floodfill(75+a*30,75+b*30,WHITE);
str[a][b]=1;
k=k+1;
score=score+1;
sprintf(s1,"%d",score);
outtextxy(750,100,s1);
}
}
}
if(str[z][v]==2)
{
while(k<5)
{
a=rand()%15;
b=rand()%15;
if(str[a][b]==0)
{
setcolor(WHITE);
setfillstyle(BLUE);
circle(75+a*30,75+b*30,13);
floodfill(75+a*30,75+b*30,WHITE);
str[a][b]=2;
k=k+1;
score=score+1;
sprintf(s1,"%d",score);
outtextxy(750,100,s1);
}
}
}
if(str[z][v]==3)
{
while(k<5)
{
a=rand()%15;
b=rand()%15;
if(str[a][b]==0)
{
setcolor(WHITE);
setfillstyle(GREEN);
circle(75+a*30,75+b*30,13);
floodfill(75+a*30,75+b*30,WHITE);
str[a][b]=3;
k=k+1;
score=score+1;
sprintf(s1,"%d",score);
outtextxy(750,100,s1);
}
}
}
str[z][v]=0;
str[z+1][v]=0;
str[z+2][v]=0;
str[z+3][v]=0;
str[z+4][v]=0;
}
}
}
ints=0,y=0;
for(s=0;s<14;s++)
{
for(u=0;u<15;u++)
{
if(str[s][u]==str[s+1][u-1]&&str[s+1][u-1]==str[s+2][u-2]&&str[s+2][u-2]==str[s+3][u-3]&&str[s+3][u-3]==str[s+4][u-4]&&str[s+4][u-4]!
=0)
{
setfillstyle(BLACK);
bar(61+30*s,61+30*u,89+30*s,89+30*u);
bar(61+30*(s+1),61+30*(u-1),89+30*(s+1),89+30*(u-1));
bar(61+30*(s+2),61+30*(u-2),89+30*(s+2),89+30*(u-2));
bar(61+30*(s+3),61+30*(u-3),89+30*(s+3),89+30*(u-3));
bar(61+30*(s+4),61+30*(u-4),89+30*(s+4),89+30*(u-4));
if(str[s][u]==1)
{
while(k<5)
{
a=rand()%15;
b=rand()%15;
if(str[a][b]==0)
{
setcolor(WHITE);
setfillstyle(RED);
circle(75+a*30,75+b*30,13);
floodfill(75+a*30,75+b*30,WHITE);
str[a][b]=1;
k=k+1;
score=score+1;
sprintf(s1,"%d",score);
outtextxy(750,100,s1);
}
}
}
if(str[s][u]==2)
{
while(k<5)
{
a=rand()%15;
b=rand()%15;
if(str[a][b]==0)
{
setcolor(WHITE);
setfillstyle(BLUE);
circle(75+a*30,75+b*30,13);
floodfill(75+a*30,75+b*30,WHITE);
str[a][b]=2;
k=k+1;
score=score+1;
sprintf(s1,"%d",score);
outtextxy(750,100,s1);
}
}
}
if(str[s][u]==3)
{
while(k<5)
{
a=rand()%15;
b=rand()%15;
if(str[a][b]==0)
{
setcolor(WHITE);
setfillstyle(GREEN);
circle(75+a*30,75+b*30,13);
floodfill(75+a*30,75+b*30,WHITE);
str[a][b]=3;
k=k+1;
score=score+1;
sprintf(s1,"%d",score);
outtextxy(750,100,s1);
}
}
}
str[s][u]=0;
str[s+1][u-1]=0;
str[s+2][u-2]=0;
str[s+3][u-3]=0;
str[s+4][u-4]=0;
}
}
}
intx1=0,x2=0;
for(x1=0;x1<14;x1++)
{
for(x2=0;x2<15;x2++)
{
if(str[x1][x2]==str[x1+1][x2+1]&&str[x1+1][x2+1]==str[x1+2][x2+2]&&str[x1+2][x2+2]==str[x1+3][x2+3]&&str[x1+3][x2+3]==str[x1+4][x2+4]&&str[x1+4][x2+4]!
=0)
{
setfillstyle(BLACK);
bar(61+30*x1,61+30*x2,89+30*x1,89+30*x2);
bar(61+30*(x1+1),61+30*(x2+1),89+30*(x1+1),89+30*(x2+1));
bar(61+30*(x1+2),61+30*(x2+2),89+30*(x1+2),89+30*(x2+2));
bar(6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 连珠 报告