连连看程序设计报告.docx
《连连看程序设计报告.docx》由会员分享,可在线阅读,更多相关《连连看程序设计报告.docx(20页珍藏版)》请在冰豆网上搜索。
连连看程序设计报告
《计算机应用基础与程序设计》
三级项目设计报告
项目名称:
连连看
班
级:
2014级软件工程8班
学
号:
140120010226
姓
名:
郭鹏飞
日
期:
2014年12月31日
说明:
报告内容可以根据自己的设计实践自行拟定和修改,内容尽量翔实,页数不够可以加页,内容过于单薄将影响得分。
建议写报告之前自己上网或在图书馆查阅相关资料进行报告书写方法的自学。
一、项目分析
项目分析简要说明项目主要用户需求、设计思路及模块划分。
1、用户需求分析
在当今社会,人们的生活压力越来越大,也没有太多时间去玩大型的游戏,所以需要一些简单的小游戏来缓解大家的工作和学习压力。
而连连看
是一款简单,容易理解,大多数人都会玩的小游戏,耗费时间也不是太长,所以特意设计此款游戏来满足用户放松心情的需求。
2、系统设计思路
(1)必须先导入图片,当俩张图片一样时,便可以消除;
(2)窗体基本的菜单栏必须有;
(3)有时间轴控制时间,确定输赢;
(4)当时间到时,不能继续游戏;赢了的话,要保存游戏者姓名和判断胜负的时间;
(5)最好有历史记录,记录下来用户每一次的得分情况。
3、系统模块划分
板块一:
图片导入。
连连看应该有用来点击的图片,使用户避免因为只有数字而感到无聊。
板块二:
图片标记。
连连看需要点击俩次图片,所以必须记录第一次点击的图片是哪一个。
板块三:
图片连线。
该过程是整个游戏的核心过程,是最重要的一个过程,也是耗时最长的一个过程。
连线方式主要分为三种方式,即直线连接、一个折点连接、俩个折点连接。
如果用户前后点击的图片可以通过三种方式中的任意一种连接,并且图片完全一样,贝U达到消除图片的效果。
板块四:
判断成功。
通过判断图片是否完全消除,判断游戏是否胜利
板块五:
判断失败。
如果时间到的话,用户失败,增加了游戏的竞争性。
板块六:
重新开始。
但用户游戏结束或想要重新开始时,可以重新开始新的游戏。
板块七:
游戏暂停。
通过游戏暂停,使用户有事时可以暂停游戏,之后可以继续游戏。
板块八:
游戏难度。
满足不同程度的用户的不同需求,共分为“简单”、“一般”、“复杂”三个难度,享受不同的挑战难度。
板块九:
历史记录。
将用户玩过的记录保存下来,同时可以使用户名和游戏时间都保存下来,并且和游戏难度对应。
板块十:
背景音乐。
为了使用户在游戏过程中更加享受,增加背景音乐和消除音乐,并且任何时候可以控制音乐的开始和结束。
二、项目设计
详细介绍项目各个子模块的设计方法及设计核心技术。
1、各个子模块的设计方法
板块一:
图片导入。
图片的导入有很多种方法,在该游戏中我采用了ImageList的方法。
添加一个ImageList控件,Name为ImageListl,在其Image的属性中添加图片,之后再将图片导入窗口。
同时,为了设计简单,我使用了二维Button来承载图片,在i,j的循环中添加代码,具体代码如下:
MyButton[i,j].Name=i.ToString();//为了判断图片是否相同
MyButton[i,j].ImageList=imageListl;
MyButton[i,j].lmagelndex=i-1;
板块二:
图片标记。
首先判断是否已有图片选中,如果有则判断是否满足条件;如果没有,贝U该图片被选中,同时做出标记,我的方法是使背景变为红色,所以在导入图片时没有使图片放大。
具体代码如下:
J
Buttonbutton=(Button)sender;
button.BackColor=Color.Red;
if(BeforeButton==null)
BeforeButton=button;
button=
null;
}
else
{
if(button==BeforeButton)//如果前后选择图片为图一张,则取消选
择
{
BeforeButton=null;
button.BackColor=this.BackColor;
}
else
//判断是否可以消除
板块三:
图片连线。
连线时游戏的核心代码。
首先判断直连,如果俩张相同的图片中间没有别的图片则满足条件可以消除。
此处通过网上查阅资料,用到了返回值。
具体代码如下:
//竖直方向的连线
boolY_line(intY1,intY2,intx)
{
if(Y1>Y2)//保证Y1{
intt=Y1;
Y1=Y2;
Y2=t;
}
for(intm=Y1+1;m<=Y2;m++)
{
if(m==Y2)break;
if(MyButton[x,m].Visible!
=false)
{1
returnfalse;
}
returntrue;
//水平方向的连线
boolX_line(intX1,intX2,inty)
{
//保证X1{
if
(X1>X2)
}
intt=X1;X1=X2;X2=t;
for(intm=X1+1;m<=X2;m++)
{
if(m==X2)
break;
if(MyButton[m,y].Visible!
=false)
returnfalse;
}
returntrue;
}
然后是一个折点,需要判断被选中的俩个图片的相对位置,此处直接应
用了直连的部分代码:
boolOneCorner(intX1,intY1,intX2,intY2)
{
if(Y1>Y2)
{
intt=Y1;Y1=Y2;Y2=t;
t=X1;X1=X2;X2=t;
}
if(Y1{
if(X1{
if(MyButton[X1,Y2].Visible==false)//左下
{
if(X_line(X1,X2,Y2)==true)
if(Y_line(Y1,Y2,X1)==
{
true)
zl.X=MyButton[X1,Y2].Left+length/2;
zl.Y=MyButton[X1,Y2].Top+length/2;
returntrue;
}
}
}
if(MyButton[X2,Y1].Visible==
false)//右上
{
{
if(X_line(X1,X2,Y1)==true)
if(Y_line(Y1,Y2,X2)==
{
true)
z1.X=MyButton[X2,Y1].Left+length/2;
z1.Y=MyButton[X2,Y1].Top+length/2;
returntrue;
}
}
}
}
if(X1>X2)
{
if(MyButton[X1,Y2].Visible==
false)//右下
{
生变化
if(Xline(X2,X1,Y2)==true)//经过直连后X1X2
{
if(Y_line(Y1,Y2,X1)==
true)
{
z1.X=MyButton[X1,Y2].Left+length/2;
z1.Y=MyButton[X1,Y2].Top+length/2;
{
returntrue;
大小发
}
if(MyButton[X2,Y1].Visible==false)//左上{
if(X_line(X2,X1,Y1)==true)
{
if(Y_line(Y1,Y2,X2)==true)
{
zl.X=MyButton[X2,Y1].Left+length/2;
zl.Y=MyButton[X2,Y1].Top+length/2;
returntrue;
}
}
}
}
}
returnfalse;
}
其代码如
接着是俩个折点的代码,首先先通过上下左右四个方向分开论述,
下:
//二折连右
boolright(intX1,
ntX2,intY1,intY2)
{
for(intx=X1+1;x<=Horizontal+1;x++)
{
false)
if(X_line(X1,x,Y1)==true&&MyButton[x,Y1].Visible==
{
if(OneCorner(x,Y1,X2,Y2)==true)
{
z1.X=MyButton[x,Y1].Left+length/2;|
z1.Y=MyButton[x,Y1].Top+length/2;
z2.X=MyButton[x,Y2].Left+length/2;
z2.Y=MyButton[x,Y2].Top+length/2;|
returntrue;
}
true)
if(X_line(X1,Horizontal+1,Y1)==
if(X_line(X2,Horizontal+1,Y2)==true)
{
zl.X=MyButton[Horizontal+1,Y1].Left+length/2;
zl.Y=MyButton[Horizontal+1,Y1].Top+length/2;
z2.X=MyButton[Horizontal+1,Y2].Left+length/2;
z2.Y=MyButton[Horizontal+1,Y2].Top+length/2;
returntrue;
}
}
}
returnfalse;
}
//二折连左
boolleft(intX1,intX2,intY1,intY2)
{
for(intx=X1-1;x>=0;x--)
{
false)
if(X_line(X1,x,Y1)==true&&MyButtton[:
x,Y1].Visible==
{
if(OneCorner(x,Y1,X2,Y2)==true)
{
z1.X=MyButton[x,Y1].Left+length/2;|
z1.Y=MyButton[x,Y1].Top+length/2;
z2.X=MyButton[x,Y2].Left+length/2;
z2.Y=MyButton[x,Y2].Top+length/2;
returntrue;
}
}
}
if(X_line(X1,