五子连珠报告Word文档下载推荐.docx
《五子连珠报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《五子连珠报告Word文档下载推荐.docx(44页珍藏版)》请在冰豆网上搜索。
用户选中一个小球后单击空白位置,可以把选中的小球移动到该位置。
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<
stdio.h>
//函数头
windows.h>
time.h>
conio.h>
graphics.h>
#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<
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>
=250&
=280)//开始按钮
{
srand((unsigned)time(0));
for(i=0;
4;
i++)//随机生成棋子
for(j=0;
{
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);
setfillstyle(BLUE);
circle(75+c*30,75+d*30,13);
floodfill(75+c*30,75+d*30,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++)//移动棋子
for(j=0;
if(m.x>
=60+30*i&
=90+30*i&
=60+30*j&
=90+30*j)
if(str[i][j]!
=0)
col=str[i][j];
o=i;
p=j;
if(str[i][j]==0)
switch(col)
case1:
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);
str[i][j]=2;
break;
case3:
str[i][j]=3;
}
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]!
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)//消去后生成棋子
if(str[a][b]==0)
{
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,"
outtextxy(750,100,s1);
if(str[w][t]==2)
5)
setfillstyle(BLUE);
str[a][b]=2;
if(str[w][t]==3)
setfillstyle(GREEN);
str[a][b]=3;
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<
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]!
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)
if(str[z][v]==2)
if(str[z][v]==3)
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<
s++)
for(u=0;
u<
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]!
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)
if(str[s][u]==2)
if(str[s][u]==3)
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<
x1++)
for(x2=0;
x2<
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]!
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