基于android的连连看游戏的设计与开发_第1页
基于android的连连看游戏的设计与开发_第2页
基于android的连连看游戏的设计与开发_第3页
基于android的连连看游戏的设计与开发_第4页
基于android的连连看游戏的设计与开发_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于android的连连看游戏的设计与开发基于android的连连看游戏的设计与开发题目名称:工学院工学院基于android的连连看游戏的设计与开发摘要:手机端游戏伴随着手机的迅速普及和互联网技术的发展得到越来越多游戏玩家的喜爱和追捧,多项数据表明,手游行业发展迅速并且发展越来越好。基于Android操作系统的手机的使用是最广泛的。本系统基于Android软件的开发平台,完成了一个在Android手机端运行的“连连看小游戏”。本小游戏系统选择在Eclipse开发环境下,使用Java语言进行程序设计,完成了“连连看”的一些游戏功能。游戏模式分为“经典模式”、“闯关模式”、“无限模式”和“极速模式”,同时实现了对各种模式下的游戏控制功能。经过多人多方反复测试和体验,本游戏系统基本功能完备,界面美观,操作简单,用户体验度较好。关键词:安卓;休闲游戏;Java语言

DesignandImplementationofLianliankanBasedonandroidAbstract:MobilephonegameshavebecomepopularandsoughtafterbymoreandmoregameplayersalongwiththerapidspreadofmobilephonesandthedevelopmentofInternettechnologies.Anumberofdatashowthatthemobilegameindustryisdevelopingrapidlyanddevelopingbetterandbetter.MobilephonesbasedontheAndroidoperatingsystemarethemostwidelyused.ThissystemisbasedonthedevelopmentplatformofAndroidsoftware,andhascompleteda"Lianliankangame"runningontheAndroidmobilephone.ThissmallgamesystemchoosestousetheJavalanguageforprogrammingintheEclipsedevelopmentenvironment,andcompletessomegamefunctionsof"Lianliankan".Thegamemodeisdividedinto"classicmode","offmode","infinitemode"and"extrememode",andthegamecontrolfunctionforvariousmodesisrealizedatthesametime.Afterrepeatedtestingandexperiencebymanypeople,thegamesystemhascompletebasicfunctions,beautifulinterface,simpleoperationandgooduserexperience.Keywords:Android;Casualgames;JAVAlanguage

目录TOC\o"1-3"\f\u1前言 11.1系统研发的背景及意义 11.2国内外研究现状和发展前景 11.3选题研究内容及主要目标 21.3.1选题研究目标 21.3.2选题研究主要思路和方法 22选题所用技术 32.1Eclipse开发工具 32.2Java语言 32.3Android平台 43游戏系统总体设计 63.1系统需求分析 63.2系统总体设计 63.3游戏流程设计 73.4系统模式的设计 73.4.1经典模式的设计 73.4.2闯关模式的设计 73.4.3无限模式的设计 73.4.4极速模式的设计 83.5系统算法的设计 84游戏系统的实现 104.1游戏系统的界面实现 104.1.1系统欢迎界面的实现 104.1.2主菜单界面的实现 124.1.3注册界面的实现 144.2游戏算法的实现 154.3游戏模式的实现 194.3.1无限模式的实现 194.3.2极速模式的实现 194.3.3闯关模式的实现 204.3.4经典模式的实现 224.4游戏其他的实现 234.4.1游戏介绍模块的实现 234.4.2关于图片的实现 234.4.3画线连接的实现 255系统测试 275.1登录测试 275.2游戏算法测试 296总结 33参考文献 34吉林工商学院本科毕业论文PAGEPAGE331前言当今社会已经进入了快速发展阶段,作为新时代的大学生我们应该结合自身所学,将我们在校所学到的知识学以致用。伴随着科技的不断更新换代,手机已经成为了我们生活中不可或缺的一部分了,而手机游戏也逐渐成为了人们不可或缺的娱乐方式。现在走在大街上或者是坐在公交上都会看见不同年龄段的人在玩着手机游戏。他们玩的最多的就是近些年火起来的和平精英、王者荣耀等手机游戏,这几款游戏已经成为了各大游戏排行榜的榜首,但是这种游戏需要玩家精神高度集中,而且每一局游戏都需要一定的时间,中途不能暂停,这种游戏的出现可以让人们感觉到刺激,但是同时也让人们更加的疲劳。因此消消乐这款休闲益智类的游戏异军突起,成为了多数人放松时的首选。消消乐游戏可以随时暂停随时开始,人们可以在等车的时候或者是等人的时候消磨时间,如果有事的时候还可以随时退出,不会造成任何损失。但是这类的游戏十分稀少,开发者不知道应该以什么样的方式来模仿类似的游戏让人们在业余的时间进行放松。因此现在多数的开发者都想以热血刺激的游戏界面来刺激玩家的眼球,从而让游戏变得火热起来。但是对于我们来说创造一个能刺激人们大脑的游戏来说是不可能的,因此我们要另辟蹊径,设计出一款简单而又不失趣味的安卓游戏1.1系统研发的背景及意义现在手机端的游戏在人们日常生活越来越受欢迎。消除类的游戏也成为了人们喜爱的游戏之一,无论看到哪个应用市场,消除类游戏总是排在热搜榜前排。这首先是因为手机的普及带来了移动游戏产业的高峰期,在这个基本人手一部手机的时代,各类APP争相恐后的出现,因为游戏是每部手机里必备的应用,因此越来越多的人们把目光放在了手机游戏上。跟电脑端的游戏相比,手机游戏既不需要老实的坐在一个房间里玩,也不需要鼠标键盘等外设。相对来说手机游戏的优势就显现出来了。另一方面网游比较令人烦恼的收费玩法让许多不充钱的玩家感到心烦,而手机端的小游戏只需要很少的内置费用,就可以一直玩下去,这和网游、页游等收费游戏相比,更加讨人欢心。连连看,俄罗斯方块等游戏在当年是让人们眼前一亮的经典游戏,在那个手机还是奢侈品的时代,手机游戏就像新世界的大门,吸引着无数人的目光。它不仅仅是作为一种娱乐方式,更是一个划分了新时代的产物,因此设计这样的一款可以放松大脑的休闲娱乐类游戏,不仅可以锻炼我对技术知识的掌握能力和对待问题的思维方式,还可以让我对经典游戏进行致敬,了解当时开发者设计时的心情。1.2国内外研究现状和发展前景手机游戏市场在20年的演变过程中,已经开始一步一步壮大起来,并且受到了很多投资者的关注。近些年来,我国智能手机的更新换代速度越来越快,从BB机到大哥大再到后来的“直板”和“翻盖”,到现在的全面屏,高效能处理器,升降式摄像头,手机已经成为了一个微型的电脑。配置的提升带给玩家的游戏体验也越来越好,使得游戏用户快速增加,为中国的游戏市场提供了很大的动力。国家也发布了相关政策鼓励创新,以及规章制度来规范游戏环境,“简政放权”式的管理为手机游戏市场添加了新动力,促进了游戏产业的发展。国外的移动设备发展也是极为迅速。欧洲拥有全球最大的移动游戏市场,益智类游戏也成为很受欢迎的移动市场应用,游戏的跨语言征服了很多的不同国家的玩家。近年来,日本手机游戏市场逐步增长,市场规模超过850亿日元,很多国内研发的游戏也流入入了国外市场。在韩国,手机游戏用户也开始逐步增长。在中国同样是如此,并且部分游戏已经形成了电子竞技的形式。在近几年,开心消消乐这款游戏异军突起,以一种强横的姿态进入了各大游戏平台的益智类游戏的三甲之位。刚开始人们很奇怪多年前的儿童玩的游戏为什么现在会如此火热,但随着游戏体验的积累,消消乐类的游戏通俗易懂,简单上手,让人们十分欣然的接受了他。看似简单但内涵的知识他并不低于任何一款游戏,因此这款游戏让大家深受喜爱,并且刺激了游戏市场,使得更多消除类的游戏快速发展,形成百花齐放的局面。1.3选题研究内容及主要目标1.3.1选题研究目标现在,Littlegame和Webgame广受大家的追捧。简单的使用方法(不同于其他需要复杂的注册和需要下载很大的安装包类游戏)让玩家很容易上手,LLK就是典型例子,并且名列各大游戏榜前排。休闲、乐趣和智慧是连连看的精髓,作为一款经典的网络休闲游戏,它适合大众,无论男女老少,还是白领工人。同时它不仅可以调整自己的情绪,还可以在游戏中锻炼自己的视野,提高自己的注意力,培养大脑反应速度。在玩游戏的同时,人们可以充实自己的生活,挑战更高层次的体验,提高我们遇到困难时的反应能力与处理能力。这次的设计让我加深了对Android的了解,也让我全面的了解到一个项目的完成需要多方面知识的融合。实践是检验真理的唯一标准,通过完成一个相对完整的Android游戏,我意识到游戏的完成需要多种知识相结合,这样为我今后的工作和学习奠定了很好的基础。1.3.2选题研究主要思路和方法本文的研究思路是在开发系统之前,先充分的了解了互联网的背景,系统开发的目的与意义是什么,然后对开发所使用到的结构模式、开发语言等进行详细的学习和了解,通过分析系统的开发需求,做好技术知识的储备,详细的分析本游戏将要面对的使用人群,通过分析得到数据,有针对性的进行系统功能的设计。在功能设计完成之后首先在理论上分析程序的功能模块之间的衔接是否符合逻辑,然后准备好所需要的软件和硬件设施。接下来将程序打包成APK文件安装在安卓手机端上。最后在系统开发完成时一定要做系统的测试,通过测试找出系统中存在的BUG并进行针对性的修复,并做好相关记录,确保系统的稳定正常的运行。2选题所用技术2.1Eclipse开发工具本论文所使用的主要开发工具是Eclipse,可以将它理解成为一个跨平台的集成开发环境,并且附带了一个标准的插件集,其中包括Java开发工具(JavaDevelopmentkitJDK)。Eclipse是使用Java语言进行开发的,但又不仅限于Java语言使用,例如他还可以支持C/C++,Android,PHP等多种语言。在Eclipse出现之前,开发人员一般会用记事本进行程序代码的编写,但这个方法的弊端很多,不仅无法自动检验代码编写的语法错误,排版页非常麻烦,看上去很乱,程序写完后还需要很多的步骤程序才能正常运行。Eclipse的出现完美的解决了这些问题,Eclipse具有自动语法错误纠正、自动排版、文字大小设置、颜色设计、报错警告提示等诸多功能,极大的提高了程序开发的效率和质量,因此,越来越受人们关注。图2-1Eclipse2.2Java语言吸收了c++语言优点的Java有着很大的两个优势,功能强大、简单易用。这样的一个强大的语言出自sun公司,使得单调的静态页面灵活了起来,并且可以跨平台运行。语言特点:1简单性,为了让这个语言容易被接受,开发者们在c++的基础上,去掉了一些特征,使得Java可以自动对对象进行引用,实现无用单元自动收集,使用者们可以把时间跟多的用在研发程序上,而不是被存储管理问题困扰。2面向对象,在面向对象的系统中,类class是方法的集合,在Java中,一切都可以看成为对象object。3跨平台,用Java编写的程序可以在不同的平台间运行,只需要提前安装好JVM(Java虚拟机),就可以解决了很多不必要的麻烦。此外,简单,分布式,解释性,健壮性,安全性,体系结构中立,高性能,多线程,动态性等等优点使得Java变成了现在编程界的主流语言,深受程序员们的喜爱。Java语言是一种随着时代发展而快速发展的计算机语言,严谨的结构,语言编写的简单性,为她将来的发展提供了保障。在社会进步以及创新方面发挥着很大的作用。图2-2Java2.3Android平台Android是一个基于Linux内核的开源式平台,可以安装在各种不同厂商生产出的上千种设备中。由Google公司以及开放手机联盟共同研究开发,在大陆地区,被称为安卓。2007年,Google与84家硬件厂商、软件开发商共同改良了Android系统,并发布了Android的源代码,Android作为一个免费的开发工具可以让开发人员0成本开始进行软件开发,它的平台优势最明显的就是开放性,其次是方便开发,他自由的开发环境使得开发人员不受规则阻碍的随意开发。Android平台采用了分层的架构,从上到下为应用程序层、应用程序框架层、系统运行库层和Linux内核层。应用程序包括了客户端,日历,地图,联系人管理程序等。应用程序框架层主要是API框架,这个架构简单化了组件的重用,在遵守框架的安全性下,每个应用的程序都可以发布他的功能块。这个框架包括了视图view,内容提供器contentprovides,资源管理器resourcemanager,通知管理器notificationmanager,活动管理器activitymanager。系统运行库包含了一些C/C++的库,可以被Android中的组件使用。Android的Linuxkernel控制包括存储管理器memorymanager,程序管理process,网络堆栈networkstack,驱动程序模型drivermanagement。一般一个Android应用由很多个activity组成,每个activity可以互相跳转,设置一个button按钮,点击后就可以连接到下一个活动。Apk是安卓应用的后缀,也就是安卓安卓包。将apk文件发送到手机或者安卓模拟器上安装之后就可以运行。图2-3Android图2-4Android结构3游戏系统总体设计3.1系统需求分析本次设计是对连连看游戏的设计与实现,使用的平台是Android平台,使用的开发工具是eclipse,使用的语言是Java,然后实现连连看游戏的功能。设计的主要功能如下:游戏开始按钮,游戏暂停/继续的功能。在进入游戏第一层界面时,用户可以选择注册或直接账号密码登录,玩家操作后切换进入游戏界面。游戏通过调用函数来进行图片的加载,这时色块会开始进行任意排列。本种设计汇合了游戏刷新按钮与游戏开始按钮。在游戏地图的上方,我们可以看到game的开始和暂停按钮以及别的按钮。如果玩家发生紧急事情需要暂缓游戏的进行,就可以通过点击暂停按钮来暂时暂停游戏,不关闭游戏界面的情况下点击开始可以继续刚才的游戏。游戏计时功能。当您在开始进入游戏界面时,游戏具备计时功能。游戏开始时,时间显示100秒然后倒数减少。如果玩家再倒数时间为0后没有成功去掉所有图片,将会弹出一个对话框,说“游戏失败了!再次启动,单击“确定”按钮重新启动新的一轮游戏。反之,则该局游戏成功。弹出对话框,提示“游戏胜利!重新开始,单击“确定”,开始。”游戏模式选择功能。在游戏的主界面,进行游戏选择模式。在每种游戏模式中,线和列用于划分区域,可消除的图案被填充在间隔的行和列中。选择的模式不同,用户体验也会各不相同,多元化的游戏模式保证了游戏的完好体验。重新开始。点击后使画面上的布局更新。退出游戏。点击退出游戏时,页面会恢复到模式选择的主菜单。游戏介绍。在游戏界面需要有一个模块对游戏进行说明简介,方便玩家了解规则。3.2系统总体设计游戏主要是用Android的view框架编写的,采用的控件是eclipse插件中自带的。游戏主要分为登录界面,主菜单界面,游戏运行时的界面,主菜单界面。其中主菜单界面有游戏模式和游戏介绍,而游戏模式分为经典模式,闯关模式,无限模式,极速模式。随意点击一个模式按钮即开始运行这个游戏模式。游戏运行时的界面包括以下几个功能,暂停游戏,重新开始,退出游戏。具体见图3-1。图3-1总体设计图3.3游戏流程设计该系统是在Android平台下的连连看小游戏,玩家打开游戏后,可以看到登录界面以及注册界面,玩家登陆后会进入游戏主界面,在这个界面玩家可以自主选择游戏模式,查看游戏简介。选择并开始游戏后在规定时间内完成相同图片的消除则任务完成通关,在游戏中有重新开始的选择以及暂停游戏、退出游戏的选择。见图3-2。图3-2游戏基本流程3.4系统模式的设计3.4.1经典模式的设计经典模式下分为三个难度,点击经典模式,会出现弹窗提示选择,分别为简单,中等,困难。难度主要是根据图片个数的不同确定的,更方便玩家的选择。3.4.2闯关模式的设计闯关模式下的连连看,时间600,但是变化的速度会加快,随着游戏的进行,完成任务会出现对话框提示是否进入下一关,或者重新挑战3.4.3无限模式的设计通过在游戏主界面上选择无限模式来启动游戏。此模式也可称作训练模式,因为时间是无限的,比较适合初玩者熟悉本游戏的页面操作,以及对图片进行熟悉的一个过程。3.4.4极速模式的设计在这个模式下,游戏的时间相较于其他模式会短一些,但是每当消掉一对相同图片后,时长会反向增加4,进度条也会改变。一直到游戏结束会弹出对话框进行选则,3.5系统算法的设计连连看游戏的设计中最重要的一部分就是算法设计,也就是判断两个图片是否可以消除,首先要判断是否可以连接。下图为算法流程图:图3-3算法流程图无拐角消除。两个图片的横坐标相同,判断两个图片的纵向上是否有其他图片阻碍,如果存在则无法完成消除。两个图片纵坐标一致时,判断两个图片的横向上有没有其他图片阻碍,没有存在就不可以消除。横向或者是纵向上没有阻碍的图片,就可以完成连接消去。一个拐角消除。两个不在同一水平线和垂直方向的相同图片,需要用至少两个直线连接。先根据一个图标的水平或是纵坐标确定一个点,通过这个点如果能没有其他阻碍的连接另一个图片的点,这对图片可以成功消除。算法总结:找出拐角点,然后判断这个点与另一个图片是否有相同的横坐标或者纵坐标,结合第一种消除算法,没有其他图片阻碍,就可以消除。两个拐角消除。点击两个图片且不能通过一个拐角消除,连接的直线上没有其他图片阻碍。纵向上连接:找出两个图1和图2可以连接的无拐角坐标集,然后在这个坐标集中遍历到任意两个横坐标相同的图片,这两个图片可以通过无拐角消除的话,则对应的图1和图2就可以消除。横向上连接:类似纵向连接方法,找出图1和图2同一纵向上的点的集合,然后遍历到任意纵坐标相同的两个图,若果这俩图可以通过无拐角方法连通,则图1和图2可以消去。4游戏系统的实现系统的实现是体现系统与用户交互程度的一种特殊方式,用户在使用过程中的感受体验,就是对研究人员的研究成果的一种检查方式,系统有没有达到预期的目标。以下为系统个界面的详细设计思路。4.1游戏系统的界面实现4.1.1系统欢迎界面的实现登陆界面是用户进入游戏的第一层,有门则有锁,有锁既有钥匙,用户名和密码就是锁与钥匙,两者匹配门自动开启。主要代码如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@layout/background"android:orientation="vertical"tools:ignore="Overdraw"><RelativeLayoutandroid:layout_width="fill_parent"android:layout_height="45dp"android:layout_marginLeft="1dp"android:layout_marginRight="1dp"android:background="@layout/background_div"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:text="@string/app_name"android:textAppearance="?android:attr/textAppearanceLarge"/></RelativeLayout><LinearLayoutandroid:id="@+id/LinearLayout1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginLeft="1dp"android:layout_marginRight="1dp"android:layout_marginTop="2dp"android:background="@layout/background_div"android:orientation="vertical"><EditTextandroid:id="@+id/et_user_name"android:layout_width="fill_parent"android:layout_height="40dip"android:layout_marginLeft="12dip"android:layout_marginRight="10dip"android:layout_marginTop="5dp"android:hint="用户名"android:inputType="text"/><EditTextandroid:id="@+id/et_login_password"android:layout_width="fill_parent"android:layout_height="40dip"android:layout_marginLeft="12dip"android:layout_marginRight="10dip"android:layout_marginTop="5dp"android:hint="密码"android:inputType="textPassword"android:maxLines="200"android:scrollHorizontally="true"/><Buttonandroid:id="@+id/btn_login"android:layout_width="match_parent"android:layout_height="40dip"android:layout_marginTop="5dp"android:gravity="center"android:text="@string/btn_login"android:textColor="#000000"android:textSize="18sp"/></LinearLayout>登录界面如下图图4-1登录4.1.2主菜单界面的实现在本界面可以直观的看到每个模式以及游戏介绍,玩家可以通过介绍模块了解游戏规则,并选择模式开始游戏。界面见图4-2。图4-2主界面主要代码如下:gridview.setOnItemClickListener(newOnItemClickListener(){ publicvoidonItemClick(AdapterView<?>arg0,Viewview,intindex,longarg3){ Stringname=names.get(index); if(name.equals("无限模式")){ Intentintent=newIntent(MainActivity.this,OnePieceGame.class); intent.putExtra("gameType","无限模式"); startActivity(intent); MainActivity.this.finish(); } if(name.equals("闯关模式")){ Intentintent=newIntent(MainActivity.this,OnePieceGame.class); intent.putExtra("gameType","闯关模式"); startActivity(intent); MainActivity.this.finish(); } if(name.equals("急速模式")){ Intentintent=newIntent(MainActivity.this,OnePieceGame.class); intent.putExtra("gameType","急速模式"); startActivity(intent); MainActivity.this.finish(); } if(name.equals("经典模式")){ dialogForMode().show(); } if(name.equals("游戏介绍")){ dialogForDetail().show(); } } }); }}4.1.3注册界面的实现注册界面中可以注册用户名,密码,年龄,性别,电子邮件,然后实现注册。见图4-3。图4-3注册界面主要代码如下:publicResultMessageregedit(Useruser){ ResultMessageresultMessage=newResultMessage(); Map<String,String>parameterMap=newHashMap<String,String>(); parameterMap.put("user.username",user.getUsername()); parameterMap.put("user.sex",user.getSex()); parameterMap.put("user.age",user.getAge()+""); parameterMap.put("user.password",user.getPassword()); parameterMap.put("user.email",user.getEmail()); parameterMap.put("user.type","2"); parameterMap.put("user.isenable","0"); HttpPosthttpPost=newHttpPost(HOST+"login-regedit.action"); try{ Stringmessage=client.doPostAsString(httpPost,parameterMap); if(message!=null&&!message.equals("")){ JSONObjectdemoJson=newJSONObject(message); resultMessage.setMessage(demoJson.getString("message")); resultMessage.setStatus(demoJson.getBoolean("status")); } }catch(RuntimeExceptione){ e.printStackTrace(); resultMessage.setMessage("系统发生异常!"); resultMessage.setStatus(false); }catch(Exceptione){ e.printStackTrace(); resultMessage.setMessage("系统发生异常!"); resultMessage.setStatus(false); } returnresultMessage; }4.2游戏算法的实现连连看游戏的设计中最重要的一部分就是算法设计,也就是判断两个图片是否可以消除,首先要判断是否可以连接。无拐角消除。两个图片的横坐标相同,判断两个图片的纵向上是否有其他图片阻碍,如果存在则无法完成消除。两个图片纵坐标一致时,判断两个图片的横向上有没有其他图片阻碍,没有存在就不可以消除。横向或者是纵向上没有阻碍的图片,就可以完成连接消去。两个图片横坐标相等见图4-4。图4-4x轴坐标相等 主要代码如下:privatebooleanvertical(Pointa,Pointb){ if(a.x==b.x&&a.y==b.y) returnfalse; inty_start=a.x<=b.x?a.x:b.x; inty_end=a.x<=b.x?b.x:a.x; for(inty=y_start+1;y<y_end;y++) if(grid[y][a.y]!=0) returnfalse; p=newPoint[]{a,b}; lineType=V_LINE; returntrue; }两个图片纵坐标相等见图4-5。图4-5y轴坐标相等主要代码如下:privatebooleanhorizon(Pointa,Pointb){ if(a.x==b.x&&a.y==b.y) returnfalse; intx_start=a.y<=b.y?a.y:b.y; intx_end=a.y<=b.y?b.y:a.y; for(intx=x_start+1;x<x_end;x++) if(grid[a.x][x]!=0){ returnfalse; } p=newPoint[]{a,b}; lineType=H_LINE; returntrue; }一个拐角消除。两个不在同一水平线和垂直方向的相同图片,需要用至少两个直线连接。先根据一个图标的水平或是纵坐标确定一个点,通过这个点如果能没有其他阻碍的连接另一个图片的点,这对图片可以成功消除。算法总结:找出拐角点,然后判断这个点与另一个图片是否有相同的横坐标或者纵坐标,结合第一种消除算法,没有其他图片阻碍,就可以消除。见图4-6。图4-6一个拐角消除主要代码如下: privatebooleanoneCorner(Pointa,Pointb){ Pointc=newPoint(a.x,b.y); Pointd=newPoint(b.x,a.y); if(grid[c.x][c.y]==0){ booleanmethod1=horizon(a,c)&&vertical(b,c); p=newPoint[]{a,newPoint(c.x,c.y),b}; lineType=ONE_C_LINE; returnmethod1; } if(grid[d.x][d.y]==0){ booleanmethod2=vertical(a,d)&&horizon(b,d); p=newPoint[]{a,newPoint(d.x,d.y),b}; lineType=ONE_C_LINE; returnmethod2; }else{ returnfalse; } }两个拐角消除。点击两个图片且不能通过一个拐角消除,连接的直线上没有其他图片阻碍。纵向上连接:找出两个图1和图2可以连接的无拐角坐标集,然后在这个坐标集中遍历到任意两个横坐标相同的图片,这两个图片可以通过无拐角消除的话,则对应的图1和图2就可以消除。横向上连接:类似纵向连接方法,找出图1和图2同一纵向上的点的集合,然后遍历到任意纵坐标相同的两个图,若果这俩图可以通过无拐角方法连通,则图1和图2可以消去。见图4-7。图4-7两个拐角消除主要代码如下:privatebooleantwoCorner(Pointa,Pointb){ li=scan(a,b); if(li.isEmpty()) returnfalse; for(intindex=0;index<li.size();index++){ Lineline=(Line)li.get(index); if(line.direct==1){ if(vertical(a,line.a)&&vertical(b,line.b)){ p=newPoint[]{a,line.a,line.b,b}; lineType=TWO_C_LINE; returntrue; } }elseif(horizon(a,line.a)&&horizon(b,line.b)){ p=newPoint[]{a,line.a,line.b,b}; lineType=TWO_C_LINE; returntrue; } } returnfalse; }4.3游戏模式的实现4.3.1无限模式的实现通过在游戏主界面上选择无限模式来启动游戏。此模式也可称作训练模式,因为时间是无限的,比较适合初玩者熟悉本游戏的页面操作,以及对图片进行熟悉的一个过程。其界面见图4-8。图4-8无限模式无线模式的关键代码如下:publicvoidinfiniteMode(){ cv.reset(); cv.GAMETIME=Integer.MAX_VALUE; pb.setProgress(cv.GAMETIME); cv.PROCESS_VALUE=cv.GAMETIME; dormant=Integer.MAX_VALUE; mRedrawHandler.sleep(dormant); cv.setEnabled(true); show_RemainTime.setText("无限模式"); }4.3.2极速模式的实现在这个模式下,游戏的时间相较于其他模式会短一些,但是每当消掉一对相同图片后,时长会反向增加4,进度条也会改变。一直到游戏结束会弹出对话框进行选则,具体界面见图4-9。图4-9极速模式主要代码如下:publicvoidrapidlyMode(){ cv.reset(); cv.UPTIME=5; cv.GAMETIME=100; dormant=1000; pb.setProgress(cv.GAMETIME); cv.PROCESS_VALUE=cv.GAMETIME; mRedrawHandler.sleep(dormant); cv.setEnabled(true); }4.3.3闯关模式的实现闯关模式下的连连看,时间600,但是变化的速度会加快,随着游戏的进行,完成任务会出现对话框提示是否进入下一关,或者重新挑战。界面见图4-10。图4-10闯关模式主要代码如下:publicAlertDialogdialogForSucceed(){ AlertDialog.Builderbuilder=newAlertDialog.Builder(this); builder.setIcon(R.drawable.icon).setMessage(R.string.succeedInfo).setPositiveButton(R.string.next,newDialogInterface.OnClickListener(){ @Override publicvoidonClick(DialogInterfacedialog,intwhich){ //TODOAuto-generatedmethodstub dormant=dormant-300; newPlay(); } }).setNeutralButton(R.string.again_challenge,newDialogInterface.OnClickListener(){ @Override publicvoidonClick(DialogInterfacedialog,intwhich){ //TODOAuto-generatedmethodstub newPlay(); } }); returnbuilder.create(); } publicAlertDialogdialogForFail(){ AlertDialog.Builderbuilder=newAlertDialog.Builder(this); builder.setIcon(R.drawable.icon).setMessage(R.string.failInfo).setPositiveButton(R.string.again_challenge,newDialogInterface.OnClickListener(){ @Override publicvoidonClick(DialogInterfacedialog,intwhich){ //TODOAuto-generatedmethodstub newPlay(); } }).setNegativeButton(R.string.exit,newDialogInterface.OnClickListener(){ @Override publicvoidonClick(DialogInterfacedialog,intwhich){ //TODOAuto-generatedmethodstub isCancel=false; finish(); } }); returnbuilder.create();4.3.4经典模式的实现经典模式下分为三个难度,点击经典模式,会出现弹窗提示选择,分别为简单,中等,困难。难度主要是根据图片个数的不同确定的,更方便玩家的选择。具体界面见图4-11.图4-11经典模式简单主要代码如下:publicvoidclassicalSimplicity(){ cv.reset(); cv.row=5; cv.col=5; pb.setProgress(cv.GAMETIME); cv.PROCESS_VALUE=cv.GAMETIME; mRedrawHandler.sleep(dormant); cv.setEnabled(true); }中等主要代码如下:publicvoidclassicalSecondary(){ cv.reset(); cv.row=8; cv.col=8; pb.setProgress(cv.GAMETIME); cv.PROCESS_VALUE=cv.GAMETIME; mRedrawHandler.sleep(dormant); cv.setEnabled(true); }困难主要代码如下:publicvoidclassicalDifficulty(){ this.newPlay(); }4.4游戏其他的实现4.4.1游戏介绍模块的实现这个模块主要是进行文字叙述,向玩家展示游戏设计的目的,还有介绍游戏的操作方法。界面如图4-12。图4-12游戏介绍4.4.2关于图片的实现通过定义数组实现图片的布局排列,然后将图片添加到页面布局排列中。定义图片主要代码如下:publicint[]imageType=newint[]{R.drawable.aa,R.drawable.bb, R.drawable.cc,R.drawable.dd,R.drawable.ee,R.drawable.ff, R.drawable.gg,R.drawable.hh,R.drawable.ii,R.drawable.jj, R.drawable.kk,R.drawable.ll,R.drawable.mm,R.drawable.nn, R.drawable.oo,R.drawable.pp};将图片显示主要代码如下:publicvoidfillImage(Contextcontext){ intlth=imageType.length; image=newBitmap[lth]; for(inti=0;i<lth;i++){ Bitmapbitmap=Bitmap.createBitmap((int)width,(int)height, Bitmap.Config.ARGB_8888); Drawabledrw; Canvascanvas=newCanvas(bitmap); drw=context.getResources().getDrawable(imageType[i]); drw.setBounds(1,1,30,30); drw.draw(canvas); image[i]=bitmap; } }随机排列图片代码如下:publicvoidinitGrid(){ Randomad=newRandom(); for(inti=0;i<row;i++){ for(intj=0;j<col;j++){ if(i==0||i==row-1||j==0||j==col-1){ grid[i][j]=0; }else{ if(type!=null&&type.size()>0){ intindex=ad.nextInt(type.size()); grid[i][j]=type.get(index); type.remove(index); } } } } }对选中图片进行提示的主要代码如下: protectedvoidonDraw(Canvascanvas){ Paintbackground=newPaint(); background.setColor(Color.WHITE); canvas.drawRect(0,0,getWidth(),getHeight(),background); Painthilite=newPaint(); hilite.setColor(getResources().getColor(R.color.hilite)); Paintlight=newPaint(); light.setColor(getResources().getColor(R.color.light)); for(inti=0;i<=9;i++){ canvas.drawLine(0,i*height,getWidth(),i*height,light); canvas.drawLine(0,i*height+1,getWidth(),i*height+1, hilite); canvas.drawLine(i*width,0,i*width,getHeight(),light); canvas.drawLine(i*width+1,0,i*width+1,getHeight(), hilite); } if(CtrlView.CURRENT_CH){ Paintselected=newPaint(); selected.setColor(getResources().getColor(R.color.puzzle_selected)); canvas.drawRect(selRect,selected); } for(inti=0;i<9;i++){ for(intj=0;j<9;j++){ if(grid[i][j]!=0){ canvas.drawBitmap(image[Arrays.binarySearch(imageType, grid[i][j])],i*width,j*height,null); } } 4.4.3画线连接的实现通过算法的设计判断两个图片之间是否符合画线连接,如果符合则画线成功,否则画线失败。主要代码如下:if(isLine){ PaintlineColor=newPaint(); lineColor.setColor(Color.RED); switch(lineType){ caseV_LINE: canvas.drawLine(p[0].x*width+width/2,p[0].y*height +height/2,p[1].x*width+width/2,p[1].y *height+height/2,lineColor); break; caseONE_C_LINE: canvas.drawLine(p[0].x*width+width/2,p[0].y*height +height/2,p[1].x*width+width/2,p[1].y *height+height/2,lineColor); canvas.drawLine(p[1].x*width+width/2,p[1].y*height +height/2,p[2].x*width+width/2,p[2].y *height+height/2,lineColor); break; caseTWO_C_LINE: canvas.drawLine(p[0].x*width+width/2,p[0].y*height +height/2,p[1].x*width+width/2,p[1].y *height+height/2,lineColor); canvas.drawLine(p[1].x*width+width/2,p[1].y*height +height/2,p[2].x*width+width/2,p[2].y *height+height/2,lineColor); canvas.drawLine(p[3].x*width+width/2,p[3].y*height +height/2,p[2].x*width+width/2,p[2].y *height+height/2,lineColor); break; default: break; } } super.onDraw(canvas);5系统测试系统测试是程序开发中非常重要的一个步骤,通过系统测试可以查找到系统中不容易发现的BUG,解决系统的潜在隐患。用自动化的软件或工具或者是手动的方法对软件进行软件测试,这个过程是根据之前的测试计划开展的。通过大多数人员的使用习惯分析后,我们一般分成黑盒测试和白盒测试。下面对这两种测试分别说明。黑盒测试:别名功能也成为数据驱动测试。当我们知道了这个程序所具备的功能,并且对这些功能进行检测,看这些功能是否可以达到预期的效果。每个程序都可以形象的视为一个未知的黑色盒子,因为不透明,所以我们并不知道盒子的内部构造,在忽略这些内部位置因素时,测试人员开始进行功能测试,测试也有自己的规范原则。正确使用测试程序可以正常运行,信息输出完成。白盒测试:别名结构测试也成为逻辑驱动测试程序测试。与黑盒测试相比,白盒子很好地知晓了系统的内部需求以及工作的流程,一个开发出来的产品是否能按照操作规范进行工作。测试用来验证结论是否正确,以查看每个路径是否建议工作,无论功能如何。测试的手段主要分以下几种:逻辑覆盖发,基本路径法。5.1登录测试测试流程:1、输入用户名与密码后登陆。2、只输入密码登录。3、只输入用户名登录。4、不输入账户名也不输入密码登录。测试情况:1、输入用户与密码后可以正常登陆游戏。2、只输入密码不能登录游戏,页面提示用户名不能为空。3、只输入用户名不能登录游戏,页面提示密码不能为空。4、用户名和密码都不输入则不能登录游戏,页面提示用户名,密码不能为空第1种测试图片见图5-1:图5-1正常登录第2种测试图片见图5-2:图5-2只输入密码第3种测试图片见图5-3:图5-3只输入用户第4种测试图片见图5-4:图5-4用户密码都不输入5.2游戏算法测试测试流程:1、点击水平方向上相同的色块,并且两者之间没有其他障碍,进行消除。2、点击游戏暂停功能。3、点击游戏重新开始功能。4、点击不同的两个色块,进行消除。5、点击垂直方向上两个相同的色块,且两者之间没有障碍物,进行消除。测试结果:1、水平方向上两个相同的图案色块间显示出一条线连接,色块可以消除。2、点击暂停按钮,游戏时间静止不变,再次点击,时间继续倒计时。3、点击重新开始的按钮,游戏界面刷新,会出现一个新的页面,时间也恢复成为原始时间,重新开始倒计时。4、点击不同颜色的两个色块,不会出现直线连接也不会消除。5、垂直方向上的两个色块中间出现一条竖直的线链接两个色块,可以消除。第1种测试图片见图5-5:图5-5消除图片第2种测试图片见图5-6:图5-6游戏暂停第3种测试图片见图5-7:图5-7重新开始第4种测试图片见图5-8:图5-8点击不相同图片第5种测试图片见图5-9:图5-9点击垂直方向两个相同图片6总结“合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。”每个日日夜夜的积累,才会让知识在头脑中越来越牢固。对于学生来说,要深知千里之行始于足下的涵义,这对于我们日后的生活和工作会有莫大的帮助。本次论文是通过一点一点的研究、探索还有总结完成的。刚开始做论文设计时,我通过在互联网上搜索各种各样的相关文献,了解于本课题有关的各种资料,吸取其中的知识学习并且研究,为接下来的论文做好深厚的理论支持和铺垫,给到论文所阐述的内容充分的科学依据。经过了理论知识的搜索整理之后,对于论文所研究的课题又进行了详细的需求分析,通过了解系统的适用人群和应用范围,最后设计初一个满足大众需求的系统。运用平时所学习和研究的Android,Java等技术,进一步的对所设计的系统功能做具体的实现,虽然本人的技术可以实现大部分的功能,但是还是出现一些问题,通过在网络上查询资料等方法,最后也都得到了解决,现在系统已经可以正常的运行和使用。由于本人还没有真正的在编程行业工作过,还只是一名热爱编程的大学生,技术还是不够成熟,因此本系统在性能和功能方面还是有着很多的不足,但是不影响一般功能的正常的使用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论