版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、长春大学课程设计纸共11页第 #页共11页第 页基于Android系统的连连看1、引言1.1、编写目的本文档用于说明手机连连看游戏开发的详细过程,使了解软件的内部结构,从而对连连看有更深入的了解,便于后期的维护和更改工作。1.2、背景说明待开发软件系统的名称:基于Android系统的连连看游戏设计本项目提出者:长春大学软件学院开发者:刘博群用户:暂无项目开发环境:eclipse、Android系统平台1.3、定义Android连连看详细设计1.4、参加资料Android开发指南2、程序系统的结构连连看游戏结构如下:连连看菜单设计界面设计算法设计消息响应设计!订线绘图响应主要有四大类:Class
2、GameView/游戏视类,处理游戏中的情况,包括界面生成,算法,一部分消息响应ClassGameActivity/用于处理游戏中的消息提示ClassStartActivity/用于菜单的设计ClassSetActivity/用于菜单中游戏难度的设定3、菜单设计说明3.1、程序描述主要功能:用于为玩家提供操作提示,便于玩家了解游戏的规则可扩展性:能够适应应用要求的变化和修改,遇有灵活的可扩展性3.2、功能长春大学课程设计纸共11页第 页共11页第 #页长春大学课程设计纸共11页第 #页共11页第 #页rriii3137pm主要有开始游戏,游戏设置,游戏规则,关于游戏,退出游戏等几个选项长春大学
3、课程设计纸共11页第 #页共11页第 #页长春大学课程设计纸共11页第 页共11页第 页3.3、性能当用户选择菜单时,系统能够快速反应,以满足用户的需求3.4、输入项用户点击按钮3.5、输出项五个菜单选项3.6、算法定义菜单类,接口为OnClickListener,用于接收用户的单击消息PublicclassStartActivityextendsActivityimplementsView.OnClickListener/设计5个按钮用于接收按钮消息!privateButtonbtnStart;privateButtonbtnSet;!privateButtonbtnRole;private
4、ButtonbtnAbout;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.setOnC
5、lickListener(this);装btnSet.setOnClickListener(this);IbtnRole.setOnClickListener(this);btnAbout.setOnClickListener(this);IbtnExit.setOnClickListener(this);在OnClick函数中对响应进行处理:setContentView(newGameView(this);/进入游戏,游戏在GameView类中进行了封装订/说明游戏规则NewAlertDialog.Builder(this).setMessage(“l.将相同的两张图片用三根以内的直线连在一
6、起就可以消除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、程序描述主要
7、功能:用于为玩家提供可视化的游戏界面,增加了游戏的可玩性可扩展性:能够适应应用要求的变化和修改,具有灵活的可扩充性4.2、功能生成游戏界面,生成进度条。如下图:hllJ3:39pm4.3、性能e9曾o轲oe6eOiiFF厨oeA8eOOs忖o能够快速的随机生成符合用户需求的界面4.4、输入项无输入4.5、输出项游戏界面4.6、算法/定义游戏视图类publicclassGameViewextendsView/存储素材图片publicintimageType/保存所有小格子中的图片publicintgrid=newintrowcol;/初始化加载图片的类型publicvoidinitType()/
8、总共要加载的图片intsize=(row2)*(col2);/64/每类图片加载的次数(张数)要为偶数intcount二size/imageType.length;/imageType.length=16for(inti=0;iimageType.length;i+)for(intj=0;jcount;j+)type.add(imageTypei);/初始化网格的设计privatevoidinitGrid()Randomr=newRandom();for(inti=0;irow;i+)for(intj=0;jcol;j+)if(i=0|i=row-1|j=0|j=col-1)gridij=0;
9、/四周不设置图片elseIntindex=r.nextInt(type.size();gridij=type.get(index);type.remove(index);丨丨丨丨|/设置位图的大小privatevoidititmBitmap(Contextcontext)IinttypeLength二imageType.length;image=newBitmaptypeLength;II/重新绘制for(inti=0;itypeLength;i+)/创建一个Bitmap的对象Bitmapbitmap=Bitmap.createBitmap(int)width,(int)height,装Bit
10、map.Config.ARGB_8888);/对Bitmap进行绘制Canvascanvas=newCanvas(bitmap);Drawabledwr=context.getResources().getDrawable(imageTypei);dwr.setBounds(1,1,30,30);dwr.draw(canvas);订imagei=bitmap;/在OnDraw函数中画出框格,每次进行重绘操作/设置背景颜色:PaintbackGround=newPaint();线backGround.setColor(Color.WHITE);/画一个矩形canvas.drawRect(0,0,
11、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;j=0&
12、grida.xi=0;i-)aLoc0=i+1;/向下for(i=a.y+1;i=0&gridia.y=0;i-)装111111111111111111aLoc2=i+1;/向右for(i=a.x+1;icol&gridia.y=0;i+)aLoc3=i-1;订11111111111111111111returnaLoc;/用于判断水平方向是否连通privatebooleanhorizon(Pointa,Pointb)if(a.x=b.x&a.y=b.y)/如果点击的是同一个图案,直接返回falsereturnfalse;intx_start=a.x=b.x?a.x:b.x;线11111111
13、11111111111111111111111111111111111111111111intx_end=a.x=b.x?b.x:a.x;for(intx=x_start+1;xx_end;x+)/只要一个不是T,直接返回falseif(gridxa.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_st
14、art+1;yy_end;y+)if(grida.xy!=0)returnfalse;returntrue;/只有一个拐点的情况长春大学课程设计纸长春大学课程设计纸共11页第 页共11页第 页privatebooleanoneCorner(Pointa,Pointb)Pointc=newPoint(a.x,b.y);Pointd=newPoint(b.x,a.y);if(gridc.xc.y=0)booleanmethod1=horizon(b,c)&vertical(a,c);if(method1)corner=newPoint(c.x,c.y);Ireturnmethodl;Iif(gri
15、dd.xd.y=0)booleanmethod2=horizon(a,d)&vertical(b,d);if(method2)corner=newPoint(d.x,d.y);TOC o 1-5 h zreturnmethod2;elsereturnfalse;装/有两个拐点的情况privatebooleantwoCorner(Pointa,Pointb)ll=scan(a,b);if(ll.isEmpty()returnfalse;订for(intindex=0;indexll.size();index+)Lineline=(Line)ll.get(index);if(line.direct
16、=1)if(horizon(a,line.a)&horizon(b,line.b)corner=newPoint(line.a);corner2=newPoint(line.b);线returntrue;elseif(vertical(a,line.a)&vertical(b,line.b)corner=newPoint(line.a);corner2=newPoint(line.b);returntrue;TOC o 1-5 h zreturnfalse;/上面设计了一个类来判断两个拐点的情况/类的定义,构造函数如下classLinepublicPointa;publicPointb;pub
17、licintdirect;publicLine()a=newPoint();b=newPoint();publicLine(intdirect,Pointa,Pointb)this.direct=direct;this.a=a;this.b=b;丨丨丨/对两个拐点的情况进行扫描,将扫描线放入Line类型的数组中privateLinkedListscan(Pointa,Pointb)Ill=newLinkedListLine();/Pointc=newPoint(a.x,b.y);/Pointd=newPoint(b.x,a.y);for(inty=a.y;y=0;y-)if(grida.xy=
18、0&gridb.xy=0&horizon(newPoint(a.x,y),newPoint(b.x,y)ll.add(newLine(0,newPoint(a.x,y),newPoint(b.x,y);装for(inty=a.y;yrow;y+)if(grida.xy=0&gridb.xy=0&horizon(newPoint(a.x,y),newPoint(b.x,y)ll.add(newLine(0,newPoint(a.x,y),newPoint(b.x,y);for(intx=a.x;x=0;x-)if(gridxa.y=0&gridxb.y=0&vertical(newPoint(x
19、,订a.y),newPoint(x,b.y)ll.add(newLine(1,newPoint(x,a.y),newPoint(x,b.y);for(intx=a.x;xcol;x+)if(gridxa.y=0&gridxb.y=0&vertical(newPoint(x,a.y),newPoint(x,b.y)ll.add(newLine(1,newPoint(x,a.y),newPoint(x,b.y);线returnll;/最后做总体判断,flag表示拐点的数目publicbooleancheckLink(Pointa,Pointb)if(grida.xa.y!=gridb.xb.y)/
20、如果图案不同,直接为falsereturnfalse;if(a.y=b.y&horizon(a,b)flag=0;returntrue;TOC o 1-5 h zif(a.x=b.x&vertical(a,b)flag=0;returntrue;if(oneCorner(a,b)flag=1;returntrue;if(twoCorner(a,b)flag=2;returntrue;elsereturnfalse;5.6.2、图片消除的画线根据flag的值分情况分析:IFlag=0时,从起点到终点画一条线即可丨Flag=l时,从起点到拐点,从拐点到终点画两条线IFlag=2时,从起点到拐点,从
21、拐点到拐点,从拐点到终点画三条线I在做连接判断时就将路径保存下来I/画线操作写在OnDraw函数中,corner、corner2保存拐点坐标函数中I/每次都sleep(50)后重绘Iswitch(flag)Icase0:Icanvas.drawLine(width*(former.x+0.5f),height*(former.y+0.5f),Iwidth*(current.x+0.5f),height*(current.y+0.5f),Ip);Iflag=-1;ISystemClock.sleep(50);装invalidate();Ibreak;Icase1:Icanvas.drawLine
22、(width*(former.x+0.5f),height*(former.y+0.5f),Iwidth*(corner.x+0.5f),height*(corner.y+0.5f),p);Icanvas.drawLine(width*(corner.x+0.5f),height*(corner.y+0.5f),订width*(current.x+0.5f),height*(current.y+0.5f),p);Iflag=-1;ISystemClock.sleep(50);Iinvalidate();Ibreak;Icase2:线canvas.drawLine(width*(former.x+0.5f),height*(former.y+0.5f),Iwidth*(corner.x+0.5f),height*(corner.y+0.5f),p);Icanvas.drawLine(width*(corner.x+0.5f),height*(corner.y+0.5f),Iwidth*(corner2.x+0.5f),height*(corne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026河南安阳市滑县农业农村局招募特聘农技(防疫)员35人备考题库附答案详解(突破训练)
- 2026上海交通大学中银科技金融学院产教融合发展中心招聘1名模拟试卷附答案详解【培优B卷】
- 2026湖北恩施州咸丰县残疾人联合会公益性岗位招聘1人备考题库(重点)附答案详解
- 2026上海市伤骨科研究所工作人员公开招聘笔试题库及答案详解【全优】
- 2026四川成都市第二人民医院医疗卫生辅助岗位第二轮招募20人考前冲刺密卷及参考答案详解【研优卷】
- 2026广东中山大学附属口腔医院会计人员招聘1人备考题库及参考答案详解【达标题】
- 2026下半年北京市房山区事业单位招聘33人考前冲刺密卷及参考答案详解(能力提升)
- 2026甘肃金昌市托育综合服务中心招聘聘任制工作人员15人模拟试卷带答案详解(精练)
- 2026北方工业大学国际合作与交流处管理岗位工作人员招聘1人模拟试卷带答案详解(研优卷)
- 2026四川南充市高坪区劳动人事争议仲裁院招募就业见习人员2人模拟试卷及答案详解
- 内蒙古赤峰市2025-2026学年高一下学期7月期末考试数学试卷
- 2026年学宪法讲宪法知识竞赛考试题库(含答案)
- 2026中国压力传感器技术创新与下游应用领域拓展报告
- 中邮金融资产投资有限公司招聘笔试题库2026
- 美国糖尿病学会“2026年妊娠期高血糖诊治指南”解读
- 自然灾害中的急救护理
- 2026年全国I卷高考语文真题解读暨2027届高三高考备考复习策略
- 肩关节不稳康复治疗方法
- 2026-2030中国拍立得行业营销格局及未来前景趋势分析研究报告
- 中国对外文化集团公司招聘笔试题库2026
- 2026年国家电网招聘考试(计算机类)试题及答案
评论
0/150
提交评论