已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于android系统的连连看详细设计说明书引言1.1、编写目的本文档用于说明本游戏开发的详细过程,使委托方了解软件的内部结构,从而对连连看有更深入的了解,便于后期的维护和修改工作。1.2、背景说明:a 待开发软件系统的名称:基于android系统的连连看游戏设计b 本项目的任务提出者:学校开发者:游戏开发小组用户:喜欢玩游戏的人项目开发环境:eclipse、android系统平台1.3、定义android 连连看 详细设计1.4、参考资料 android开发指南eoeandroid开发论坛2、程序系统的结构 连连看游戏结构如下:连连看消息响应设计算法设计界面设计菜单设计绘图响应时间响应画线设计消除算法设计鼠标响应进度条设计框架设计结束游戏规则说明游戏设置开始游戏主要有四个大类:class gameview /游戏视类,搭建游戏基框架class boardview /游戏视类 处理游戏中的情况,包括界面生成,算法,一部分消息响应。class soundplay /用于处理游戏中的音乐播放class dotaactivity /用于处理游戏中的消息提示class gamesetdialog /用于菜单的设计,游戏难度的设定等class dotadialog /处理游戏结束对话框事件 3、菜单设计说明3.1、程序描述 主要功能:用于为玩家提供操作提示,便于玩家了解游戏的规则。 可扩展性:能够适应应用要求的变化和修改,具有灵活的可扩充性。3.2、功能开始界面,有开始游戏,设置游戏难度功能游戏设置框3.3、性能 当用户选择菜单时能够快速反应,以满足用户的要求。3.4、输人项用户点击按钮3.5、输出项 4个菜单选项3.6、算法 /定义菜单类,接口为onclicklistener,用于接收用户的单击消息。public class gamesetdialog extends dialog implements onclicklistenerprivate gameview gameview;private context context;private radiobutton radiobutton_pt;private radiobutton radiobutton_yg;private radiobutton radiobutton_hs;private radiobutton radiobutton_music;private button button_ok;private button button_cancle;private textview textview;private boolean music_set = true;public gamesetdialog(context context, gameview gameview) 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);overridepublic void onclick(view v) / this.dismiss();switch(v.getid()case r.id.radiobutton_pt:if (radiobutton_pt.ischecked() textview.settext(当前难度你有3次帮助机会);break;case r.id.radiobutton_yg:if (radiobutton_yg.ischecked() textview.settext(当前难度你有1次帮助机会);break;case r.id.radiobutton_hs:if (radiobutton_hs.ischecked() textview.settext(当前难度你有0次帮助机会);break;case r.id.radiobutton_music:if (radiobutton_music.ischecked() & music_set = true) radiobutton_music.settext(音乐状态(关闭));music_set = false; else if (music_set = false & radiobutton_music.ischecked() radiobutton_music.settext(音乐状态(开启));music_set = true;break;case r.id.set_cancle:this.dismiss();return;case r.id.set_ok:if (radiobutton_pt.ischecked() /toast.maketext(context, pt, toast.length_short).show();gameview.sethelptimes(3); else if (radiobutton_yg.ischecked()/toast.maketext(context, yao, toast.length_short).show();gameview.sethelptimes(1); else if (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、算法 /* * 产生随机的图片下标,用于每次产生随机的图片 */private void randomnum() random = new random();int i = 0;int t;int j;int flag = 0;for (j = 0; j tmp.length; j+) tmpj = 1000000;while (true) t = random.nextint(totalicon);for (j = 0; j tmp.length; j+) if (t != tmpj) continue; else flag = 1;if (flag = 1) flag = 0;continue;tmpi = t;i+;if (i = (iconcounts)break;public boardview(context context, attributeset atts) super(context, atts);caliconsize();int i;resources r = getresources();for (i = 0; i totalicon; i+) myiconi = r.drawable.dota_face1 + i;randomnum();for (i = 0; i iconcounts; i+) / loadbitmaps(i, r.getdrawable(rearraytmpi);loadbitmaps(i, r.getdrawable(myicontmpi);/* * * 重新排列 */public void resetboardview() resources r = getresources();randomnum();int i;for (i = 1; i iconcounts; i+) loadbitmaps(i, r.getdrawable(myicontmpi);/* * * 计算图标的长宽 */private void caliconsize() displaymetrics dm = new displaymetrics();(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 p1e = new arraylist();list p2e = new arraylist();private boolean link(point p1, point p2) if (p1.equals(p2) return false;path.clear();if (mapp1.xp1.y = mapp2.xp2.y) if (linkd(p1, p2) path.add(p1);path.add(p2);return true;point p = new point(p1.x, p2.y);if (mapp.xp.y = 0) if (linkd(p1, p) & linkd(p, p2) path.add(p1);path.add(p);path.add(p2);return true;p = new point(p2.x, p1.y);if (mapp.xp.y = 0) if (linkd(p1, p) & linkd(p, p2) path.add(p1);path.add(p);path.add(p2);return true;expandx(p1, p1e);expandx(p2, p2e);for (point pt1 : p1e) for (point pt2 : p2e) if (pt1.x = pt2.x) if (linkd(pt1, pt2) path.add(p1);path.add(pt1);path.add(pt2);path.add(p2);return true;expandy(p1, p1e);expandy(p2, p2e);for (point pt1 : p1e) for (point pt2 : p2e) if (pt1.y = pt2.y) if (linkd(pt1, pt2) path.add(p1);path.add(pt1);path.add(pt2);path.add(p2);return true;return false;return false;private boolean linkd(point p1, point p2) if (p1.x = p2.x) int y1 = math.min(p1.y, p2.y);int y2 = math.max(p1.y, p2.y);boolean flag = true;for (int y = y1 + 1; y y2; y+) if (mapp1.xy != 0) flag = false;break;if (flag) return true;if (p1.y = p2.y) int x1 = math.min(p1.x, p2.x);int x2 = math.max(p1.x, p2.x);boolean flag = true;for (int x = x1 + 1; x x2; x+) if (mapxp1.y != 0) flag = false;break;if (flag) return true;return false;private void expandx(point p, list l) l.clear();for (int x = p.x + 1; x = 0; x-) if (mapxp.y != 0) break;l.add(new point(x, p.y);private void expandy(point p, list l) l.clear();for (int y = p.y + 1; y = 0; y-) if (mapp.xy != 0) break;l.add(new point(p.x, y);5.6.2、图片消除的画线overrideprotected void ondraw(canvas canvas) /* * 绘制连通路径,然后将路径以及两个图标清除 */if (path != null & path.length = 2) for (int i = 0; i path.length - 1; i+) paint paint = new paint();paint.setcolor(color.cyan);paint.setstyle(paint.style.stroke);paint.setstrokewidth(3);point p1 = indextoscreen(pathi.x, pathi.y);point p2 = indextoscreen(pathi + 1.x, pathi + 1.y);canvas.drawline(p1.x + iconsize / 2, p1.y + iconsize / 2, p2.x+ iconsize / 2, p2.y + iconsize / 2, paint);point p = path0;mapp.xp.y = 0;p = pathpath.length - 1;mapp.xp.y = 0;selected.clear();path = null;/* * 绘制棋盘的所有图标 当这个坐标内的值大于0时绘制 */for (int x = 1; x map.length; x += 1) for (int y = 0; y 0) point p = indextoscreen(x, y);canvas.drawbitmap(iconsmapxy, p.x, p.y, null);/* * 绘制选中图标,当选中时图标放大显示 */for (point position : selected) point p = indextoscreen(position.x, position.y);if (mappos
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 蔬菜冷链物流与供应链管理投资逻辑
- 大专护理心律失常的预防措施
- 2026年幼儿园小脚的朋友教案
- 2026年幼儿园美术树叶小怪兽
- 2026年幼儿园大班环境创设主题墙
- 2026年幼儿园先锋岗事迹
- 2026年幼儿园防欺凌知识教案
- 社区活动组织有序进行保证承诺书(4篇)
- 时间序列ARIMA模型预测工具课课程设计
- Spark日志处理平台开发案例课程设计
- 2025年辽宁出版集团有限公司人才选聘考试笔试试卷【附答案】
- 远程面签管理办法
- 广东省广州市南沙区2025年中考英语一模试卷及答案
- 安全生产理念课件
- T-CAZG 021-2022 动物园动物尸体处理规范
- 《中医基础理论》课件-内生五邪
- 部编人教版初中七年级语文下册《怎样选材》课件
- 装配式建筑装饰装修技术 课件 模块七 集成卫浴
- MOOC 中国税法:案例·原理·方法-暨南大学 中国大学慕课答案
- MOOC 刑法学总论-西南政法大学 中国大学慕课答案
- 《液压元件符号》课件
评论
0/150
提交评论