您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 手机/mobile开发 > 基于Android系统的连连看详细设计说明书
基于Android系统的连连看详细设计说明书1、引言1.1、编写目的本文档用于说明本游戏开发的详细过程,使委托方了解软件的内部结构,从而对连连看有更深入的了解,便于后期的维护和修改工作。1.2、背景说明:a.待开发软件系统的名称:基于Android系统的连连看游戏设计b.本项目的任务提出者:学校开发者:游戏开发小组用户:喜欢玩游戏的人项目开发环境:eclipse、Android系统平台1.3、定义Android连连看详细设计1.4、参考资料《Android开发指南》2、程序系统的结构连连看游戏结构如下:连连看菜单设计界面设计算法设计消息响应设计游戏设置规则说明开始游戏结束游戏框架设计进度条设计消除算法设计画线设计鼠标响应时间响应绘图响应主要有四个大类:classGameView//游戏视类,处理游戏中的情况,包括界面生成,算法,一部分消息响应。classGameActivity//用于处理游戏中的消息提示classStartActivity//用于菜单的设计ClassSetActivity//用于菜单中游戏难度的设定3、菜单设计说明3.1、程序描述主要功能:用于为玩家提供操作提示,便于玩家了解游戏的规则。可扩展性:能够适应应用要求的变化和修改,具有灵活的可扩充性。3.2、功能主要有开始游戏、游戏设置、游戏规则、退出游戏等几个选项游戏设置的菜单3.3、性能当用户选择菜单时能够快速反应,以满足用户的要求。3.4、输人项用户点击按钮3.5、输出项五个菜单选项3.6、算法//定义菜单类,接口为OnClickListener,用于接收用户的单击消息。publicclassStartActivityextendsActivityimplementsView.OnClickListener//设计5个按钮用于接收按钮消息:privateButtonbtnStart;privateButtonbtnSet;privateButtonbtnRole;privateButtonbtnAbout;privateButtonbtnExit;//在OnCreate函数中将它们初始化://获取按钮btnStart=(Button)findViewById(R.id.btnStart);btnSet=(Button)findViewById(R.id.btnSet);btnRole=(Button)findViewById(R.id.btnRole);btnAbout=(Button)findViewById(R.id.btnAbout);btnExit=(Button)findViewById(R.id.btnExit);//注册点击事件btnStart.setOnClickListener(this);btnSet.setOnClickListener(this);btnRole.setOnClickListener(this);btnAbout.setOnClickListener(this);btnExit.setOnClickListener(this);在OnClick函数中对响应进行处理:setContentView(newGameView(this));//进入游戏,游戏在GameView类中进行了封装//说明游戏规则newAlertDialog.Builder(this).setMessage(1.将相同的两张图片用三根以内的直线连在一起就可以消除\n+2.每消除一次图片,都会使可用时间增加\n+3.每隔一段时间,当前的界面中的图片会进行重排列\n+4.在规定的时间里,当所有的图片都消除时,即为胜利\n+5.规定的时间内有图片未消去,即为失败\n).setPositiveButton(确定,null).show();//结束游戏this.finish();//进行游戏设置,设置游戏的难度,调用了SetActivity类intent.setClass(this,SetActivity.class);3.7、接口API函数3.8、限制条件无明显限制条件4、界面设计说明4.1、程序描述主要功能:用于为玩家提供可视化的游戏界面,增加了游戏的可玩性。可扩展性:能够适应应用要求的变化和修改,具有灵活的可扩充性。4.2、功能生成游戏界面,生成进度条。如下图:4.3、性能能够快速的随机生成符合用户需要的界面4.4、输人项无输入4.5、输出项游戏界面4.6、算法//定义游戏视图类publicclassGameViewextendsView//存储素材图片publicint[]imageType//保存所有小格子中的图片publicint[][]grid=newint[row][col];//初始化加载图片的类型publicvoidinitType(){//总共要加载的图片intsize=(row-2)*(col-2);//64//每类图片加载的次数(张数)要为偶数intcount=size/imageType.length;//imageType.length=16即,16种图片for(inti=0;iimageType.length;i++){for(intj=0;jcount;j++){type.add(imageType[i]);}}}//初始化网格的设计privatevoidinitGrid(){Randomr=newRandom();for(inti=0;irow;i++){for(intj=0;jcol;j++){if(i==0||i==row-1||j==0||j==col-1){grid[i][j]=0;//四周不设置图片}else{intindex=r.nextInt(type.size());grid[i][j]=type.get(index);type.remove(index);}}}}//设置位图的大小privatevoidititmBitmap(Contextcontext){inttypeLength=imageType.length;image=newBitmap[typeLength];//重新绘制for(inti=0;itypeLength;i++){//创建一个Bitmap的对象Bitmapbitmap=Bitmap.createBitmap((int)width,(int)height,Bitmap.Config.ARGB_8888);//对Bitmap进行绘制Canvascanvas=newCanvas(bitmap);Drawabledwr=context.getResources().getDrawable(imageType[i]);dwr.setBounds(1,1,30,30);dwr.draw(canvas);image[i]=bitmap;}}//在OnDraw函数中画出框格,每次进行重绘操作//设置背景颜色:PaintbackGround=newPaint();backGround.setColor(Color.WHITE);//画一个矩形canvas.drawRect(0,0,getWidth(),getHeight(),backGround);//设置网格线条的颜色Painthigth=newPaint();higth.setColor(Color.BLUE);//画网格for(inti=0;i10;i++){//画横线、纵线canvas.drawLine(0,height*i,getWidth(),height*i,higth);canvas.drawLine(width*i,0,width*i,getHeight(),higth);}//画image图片booleantest=true;//检测图片是否肖完for(inti=0;irow;i++){for(intj=0;jcol;j++){if(grid[i][j]!=0){canvas.drawBitmap(image[Arrays.binarySearch(imageType,grid[i][j])],i*width,j*height,null);test=false;////还有图片,说明未赢}}}4.7、接口API函数4.8、限制条件无明显限制条件5、主要算法设计说明5.1、程序描述主要功能:完成图片的消除功能,消除时画线功能,重新排列功能。可扩展性:能够适应应用要求的变化和修改,具有灵活的可扩充性。5.2、功能完成连连看游戏的核心算法。5.3、性能能够快速判断两图片是否能消除,并能在消除时进行画线操作。隔一段时间,能够打乱顺序进行重新排列。5.4、输人项用户点击、时间条5.5、输出项消除匹配的图片5.6、算法5.6.1、图片的连接判断对于选中的两个方块的销毁,它们必须符合下面3个条件:1、选中的两个方块图案相同。2、选中的两个方块之间没有障碍物阻碍的情况下,可以用若干个垂直的直线线段连接起来。3、这些将它们连接起来的直线线段的折点不超过两个(连接线由x轴和y轴的平行线组成)。我们进行分情况分析:无拐点、一个拐点、两个拐点,设置flag进行标记这三种情况。以下是相关代码://获得一个点可向上下左右走的范围publicint[]extend(Pointa){inti;int[]aLoc=newint[4];//向上for(i=a.y-1;i=0&&grid[a.x][i]==0;i--){}aLoc[0]=i+1;//向下for(i=a.y+1;irow&&grid[a.x][i]==0;i++){}aLoc[1]=i-1;//向左for(i=a.x-1;i=0&&grid[i][a.y]==0;i--){}aLoc[2]=i+1;//向右for(i=a.x+1;icol&&grid[i][a.y]==0;i++){}aLoc[3]=i-1;returnaLoc;}//用于判断水平方向是否连通privatebooleanhorizon(Pointa,Pointb){if(a.x==b.x&&a.y==b.y)//如果点击的是同一个图案,直接返回falsereturnfalse;intx_start=a.x=b.x?a.x:b.x;intx_end=a.x=b.x?b.x:a.x;for(intx=x_start+1;xx_end;x++)//只要一个不是-1,直接返回falseif(grid[x][a.y]!=0){returnfalse;}returntrue;}//用于判断垂直方向是否连通privatebooleanvertical(Pointa,Pointb){if(a.x==b.x&&a.y==b.y)returnfalse;inty_start=a.y=b.y?a.y:b.y;inty_end=a.y=b.y?b.y:a.y;for(inty=y_start+1;yy_end;y++)if(grid[a.x][y]!=0)returnfalse;returntrue;}//只有一个拐点的情况privatebooleanoneCorner(Pointa,Pointb){Pointc=newPoint(a.x,b.y);Pointd=newPoint(b.x,a.y);if(grid[c.x][c.y]==0){booleanmethod1=horizon(b,c)&&vertical(a,c);if(method1){corner=newPoint(c.x,c.y);}returnmethod1;}if(grid[d.x][d.y]==0){booleanmethod2=horizon(a,d)&&vertical(b,d);if(method2){corner=newPoint(d.x,d.y);}returnmethod2;}else{returnfalse;}}//有两个拐点的情况privatebooleantwoCorner(Pointa,Pointb){ll=sca
本文标题:基于Android系统的连连看详细设计说明书
链接地址:https://www.777doc.com/doc-5063096 .html