基于Android系统的连连看详细设计说明书.docx
- 文档编号:23379374
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:24
- 大小:723.21KB
基于Android系统的连连看详细设计说明书.docx
《基于Android系统的连连看详细设计说明书.docx》由会员分享,可在线阅读,更多相关《基于Android系统的连连看详细设计说明书.docx(24页珍藏版)》请在冰豆网上搜索。
基于Android系统的连连看详细设计说明书
基于Android系统的连连看
详细设计说明书
引言
1.1、编写目的
本文档用于说明本游戏开发的详细过程,使委托方了解软件的内部结构,从而对连连看有更深入的了解,便于后期的维护和修改工作。
1.2、背景说明:
a.待开发软件系统的名称:
基于Android系统的连连看游戏设计
b.本项目的任务提出者:
学校
开发者:
游戏开发小组
用户:
喜欢玩游戏的人
项目开发环境:
eclipse、Android系统平台
1.3、定义
Android连连看详细设计
1.4、参考资料
《Android开发指南》
Eoeandroid开发论坛
2、程序系统的结构
连连看游戏结构如下:
主要有四个大类:
classGameView//游戏视类,搭建游戏基框架
ClassBoardView//游戏视类处理游戏中的情况,包括界面生成,算法,一部分消息响应。
ClassSoundPlay//用于处理游戏中的音乐播放
classDotaActivity//用于处理游戏中的消息提示
classGameSetDialog//用于菜单的设计,游戏难度的设定等
ClassDotaDialog//处理游戏结束对话框事件
3、菜单设计说明
3.1、程序描述
主要功能:
用于为玩家提供操作提示,便于玩家了解游戏的规则。
可扩展性:
能够适应应用要求的变化和修改,具有灵活的可扩充性。
3.2、功能
开始界面,有开始游戏,设置游戏难度功能
游戏设置框
3.3、性能
当用户选择菜单时能够快速反应,以满足用户的要求。
3.4、输人项
用户点击按钮
3.5、输出项
4个菜单选项
3.6、算法
//定义菜单类,接口为OnClickListener,用于接收用户的单击消息。
publicclassGameSetDialogextendsDialogimplementsOnClickListener{
privateGameViewgameview;
privateContextcontext;
privateRadioButtonradioButton_pt;
privateRadioButtonradioButton_yg;
privateRadioButtonradioButton_hs;
privateRadioButtonradioButton_music;
privateButtonbutton_ok;
privateButtonbutton_cancle;
privateTextViewtextView;
privatebooleanmusic_set=true;
publicGameSetDialog(Contextcontext,GameViewgameview){
super(context);
this.gameview=gameview;
this.context=context;
this.setContentView(R.layout.game_set);
radioButton_pt=(RadioButton)findViewById(R.id.RadioButton_PT);//普通难度
radioButton_yg=(RadioButton)findViewById(R.id.RadioButton_YG);//中等难度
radioButton_hs=(RadioButton)findViewById(R.id.RadioButton_HS);//苦难难度
radioButton_music=(RadioButton)findViewById(R.id.RadioButton_Music);//音乐状态
button_ok=(Button)findViewById(R.id.set_ok);
button_cancle=(Button)findViewById(R.id.set_cancle);
textView=(TextView)findViewById(R.id.text_message);
radioButton_pt.setOnClickListener(this);
radioButton_yg.setOnClickListener(this);
radioButton_hs.setOnClickListener(this);
radioButton_music.setOnClickListener(this);
button_ok.setOnClickListener(this);
button_cancle.setOnClickListener(this);
this.setCancelable(false);
}
@Override
publicvoidonClick(Viewv){
//this.dismiss();
switch(v.getId()){
caseR.id.RadioButton_PT:
if(radioButton_pt.isChecked()){
textView.setText("当前难度你有3次帮助机会");
}
break;
caseR.id.RadioButton_YG:
if(radioButton_yg.isChecked()){
textView.setText("当前难度你有1次帮助机会");
}
break;
caseR.id.RadioButton_HS:
if(radioButton_hs.isChecked()){
textView.setText("当前难度你有0次帮助机会");
}
break;
caseR.id.RadioButton_Music:
if(radioButton_music.isChecked()&&music_set==true){
radioButton_music.setText("音乐状态(关闭)");
music_set=false;
}elseif(music_set==false&&radioButton_music.isChecked()){
radioButton_music.setText("音乐状态(开启)");
music_set=true;
}
break;
caseR.id.set_cancle:
this.dismiss();
return;
caseR.id.set_ok:
if(radioButton_pt.isChecked()){
//Toast.makeText(context,"pt",Toast.LENGTH_SHORT).show();
gameview.setHelpTimes(3);
}elseif(radioButton_yg.isChecked()){
//Toast.makeText(context,"yao",Toast.LENGTH_SHORT).show();
gameview.setHelpTimes
(1);
}elseif(radioButton_hs.isChecked()){
gameview.setHelpTimes(0);
Toast.makeText(context,"hs",Toast.LENGTH_SHORT).show();
}
gameview.setMusicOpen(music_set);
this.dismiss();
break;
}
}
}
3.7、接口
API函数
3.8、限制条件
无明显限制条件
4、界面设计说明
4.1、程序描述
主要功能:
用于为玩家提供可视化的游戏界面,增加了游戏的可玩性。
可扩展性:
能够适应应用要求的变化和修改,具有灵活的可扩充性。
4.2、功能
生成游戏界面,生成进度条。
如下图:
4.3、性能
能够快速的随机生成符合用户需要的界面
4.4、输人项
无输入
4.5、输出项
游戏界面
4.6、算法
/**
*产生随机的图片下标,用于每次产生随机的图片
*/
privatevoidRandomNum(){
random=newRandom();
inti=0;
intt;
intj;
intflag=0;
for(j=0;j tmp[j]=1000000; } while(true){ t=random.nextInt(totalIcon); for(j=0;j if(t! =tmp[j]){ continue; }else{ flag=1; } } if(flag==1){ flag=0; continue; } tmp[i]=t; i++; if(i==(iconCounts)) break; } } publicBoardView(Contextcontext,AttributeSetatts){ super(context,atts); calIconSize(); inti; Resourcesr=getResources(); for(i=0;i myIcon[i]=R.drawable.dota_face1+i; } RandomNum(); for(i=0;i //loadBitmaps(i,r.getDrawable(reArray[tmp[i]])); loadBitmaps(i,r.getDrawable(myIcon[tmp[i]])); } } /** * *重新排列 */ publicvoidreSetBoardView(){ Resourcesr=getResources(); RandomNum(); inti; for(i=1;i loadBitmaps(i,r.getDrawable(myIcon[tmp[i]])); } } /** * *计算图标的长宽 */ privatevoidcalIconSize(){ DisplayMetricsdm=newDisplayMetrics(); ((Activity)this.getContext()).getWindowManager().getDefaultDisplay() .getMetrics(dm); iconSize=dm.widthPixels/(xCount); }4.7、接口 API函数 4.8、限制条件 无明显限制条件 5、主要算法设计说明 5.1、程序描述 主要功能: 完成图片的消除功能,消除时画线功能,重新排列功能。 可扩展性: 能够适应应用要求的变化和修改,具有灵活的可扩充性。 5.2、功能 完成连连看游戏的核心算法。 5.3、性能 能够快速判断两图片是否能消除,并能在消除时进行画线操作。 隔一段时间,能够打乱顺序进行重新排列。 5.4、输人项 用户点击、时间条 5.5、输出项 消除匹配的图片 5.6、算法 List List privatebooleanlink(Pointp1,Pointp2){ if(p1.equals(p2)){ returnfalse; } path.clear(); if(map[p1.x][p1.y]==map[p2.x][p2.y]){ if(linkD(p1,p2)){ path.add(p1); path.add(p2); returntrue; } Pointp=newPoint(p1.x,p2.y); if(map[p.x][p.y]==0){ if(linkD(p1,p)&&linkD(p,p2)){ path.add(p1); path.add(p); path.add(p2); returntrue; } } p=newPoint(p2.x,p1.y); if(map[p.x][p.y]==0){ if(linkD(p1,p)&&linkD(p,p2)){ path.add(p1); path.add(p); path.add(p2); returntrue; } } expandX(p1,p1E); expandX(p2,p2E); for(Pointpt1: p1E){ for(Pointpt2: p2E){ if(pt1.x==pt2.x){ if(linkD(pt1,pt2)){ path.add(p1); path.add(pt1); path.add(pt2); path.add(p2); returntrue; } } } } expandY(p1,p1E); expandY(p2,p2E); for(Pointpt1: p1E){ for(Pointpt2: p2E){ if(pt1.y==pt2.y){ if(linkD(pt1,pt2)){ path.add(p1); path.add(pt1); path.add(pt2); path.add(p2); returntrue; } } } } returnfalse; } returnfalse; } privatebooleanlinkD(Pointp1,Pointp2){ if(p1.x==p2.x){ inty1=Math.min(p1.y,p2.y); inty2=Math.max(p1.y,p2.y); booleanflag=true; for(inty=y1+1;y if(map[p1.x][y]! =0){ flag=false; break; } } if(flag){ returntrue; } } if(p1.y==p2.y){ intx1=Math.min(p1.x,p2.x); intx2=Math.max(p1.x,p2.x); booleanflag=true; for(intx=x1+1;x if(map[x][p1.y]! =0){ flag=false; break; } } if(flag){ returntrue; } } returnfalse; } privatevoidexpandX(Pointp,List l.clear(); for(intx=p.x+1;x if(map[x][p.y]! =0){ break; } l.add(newPoint(x,p.y)); } for(intx=p.x-1;x>=0;x--){ if(map[x][p.y]! =0){ break; } l.add(newPoint(x,p.y)); } } privatevoidexpandY(Pointp,List l.clear(); for(inty=p.y+1;y if(map[p.x][y]! =0){ break; } l.add(newPoint(p.x,y)); } for(inty=p.y-1;y>=0;y--){ if(map[p.x][y]! =0){ break; } l.add(newPoint(p.x,y)); } }5.6.2、图片消除的画线 @Override protectedvoidonDraw(Canvascanvas){ /** *绘制连通路径,然后将路径以及两个图标清除 */ if(path! =null&&path.length>=2){ for(inti=0;i Paintpaint=newPaint(); paint.setColor(Color.CYAN); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(3); Pointp1=indextoScreen(path[i].x,path[i].y); Pointp2=indextoScreen(path[i+1].x,path[i+1].y); canvas.drawLine(p1.x+iconSize/2,p1.y+iconSize/2,p2.x +iconSize/2,p2.y+iconSize/2,paint); } Pointp=path[0]; map[p.x][p.y]=0; p=path[path.length-1]; map[p.x][p.y]=0; selected.clear(); path=null; } /** *绘制棋盘的所有图标当这个坐标内的值大于0时绘制 */ for(intx=1;x for(inty=0;y
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Android 系统 连连 详细 设计 说明书