第一篇:水果连连看手机游戏设计与实现
引言 1.1 研究背景 现在信息化程度水平不断提高,网络的整体互动体系也已经基本完善,发展渐渐变得完备起来了,逐渐在使人们的日常生活发生一些变化。近几年,据有关统计显示,现在人们逐渐步入了高节奏的生活中去了,更多人们将手机作为一个玩具来玩,让生活的重担能够有所减轻,很多游戏里面,最多的人玩的游戏就是连连看了,而现在手机的广泛普及使得连连看这个游戏有了需要手游的需要,故研究并推行了这个水果连连看的 手游。
由于现在的信息化水平不断提高,互联网平台工作运行的日益平稳发达,手机智能化逐步发展起来了,在智能手机里面具备的一些功能或是新上市的一些游戏也越发的丰富了。很多人都用上了智能化的手机,现在已经变成了大多数人们在生活过程中的不能或缺的一个部分了,手机的体系越发变得和人们的一些需求相关了,这其中因为安卓手机的价格亲民,所以被应用的最为广泛,现在已经作为了大多数人的首选,一直到2012年,安卓手机的销售额已经超过了所有市场的一半了,在生活中人们运用安卓手机的数量也在逐年增加,使用更加便捷,运用更加多。现在,人们拥有手机的量已经远远超过了拥有计算机的量。伴随着目前即将迎来的是5G的时代,所以移动的网络更加具备方便快捷的特点,人们在生活中使用量比较多。智能手机的广泛使用导致了大量应用的发展。目前,智能手机系统的主文件是安卓系统和苹果系统的主流,其中安卓系统的价格很受欢迎。使用的人数要比苹果的手机使用的更多,安卓系统的源码比苹果系统来讲更加具备开放性,因而也被更多的人喜爱,为其占据了广大的人们的手机市场提供了比较良好的基础。光说人们对于水果连连看的游戏的需要来讲,还有对于使用安卓系统的人数越来越多来说,对于手机中的系统进行增加水果连连看这一游戏的必要性就有所提升了。
现在信息的高速发展带来的是越来越多的应用软件的出现,这些软件迅速在手机这一新的市场领域中发展起来,应用到市场上的规模也越来越大了,使用者也在不断增加中,人们往往想要在繁忙的工作生活中抽出一些空闲的时间,可以做自己喜欢做的事情,能够减轻在工作生活中的一些压力。然而这款游戏,水果连连看就能够把生活的重担暂时忘却,减轻压力。
1.2 研究现状 最近针对这些有关互联网中这种智能化进行了了解和调查,发现在一些比较零散的空余时间人们就会进行一些运用互联网上的一些软件进行获取一些资料,比如微博、电子书中进行获取一些信息或是玩一些游戏来消遣。而这些活动大多数都是在空闲时间完成的。目前这些互联网已经和生活中的一切息息相关了。之前的4G时代的进行已经给人们带来了很大的便利,也给未来的互联网的巨大商机中获得了很大的能量。现在的网络工作已经逐渐饱满起来了,但是对于移动网络的发展还未结束,还在发展中。而传统的网络巨头也将注意力转移到了移动互联网上。
随着我国近十年互联网事业的飞速发展,手机在此之前都被视为一中新奇的事物,到现在手机几乎已经是人们生活过程中所必须品,人们现在完全可以通过手机完成自己生活中几乎所有的生活事物,随着人们生活中对手机使用更为普遍,手机上的一些应用开发也成为了一个不可忽略的巨大市场。随着人们的生活方式逐渐地从线下迁移到线上,通过对市场的调研,人们对手机上的一些娱乐应用比如说一些娱乐游戏等的需求量特别的大,所以本次开发的水果连连看有机游戏也非常的贴近用户需求。
由于手机自身的灵活性,他不同于iPad,电脑等设备,手机应用可以说是随时随地任意场所都可以玩耍,由于现代手机模式的发展不仅仅是当作通信工具,他现在更是一个非常全面的生活工具,它所能覆盖的场景几乎包括了我们所有的生活场景,而且他的使用人人群也在不断地扩展,几乎从老到幼都能够操作它,再加上人们的生活节奏又非常的快,所以这种小游戏的受众也会很多,比如上班族,学习的学生等等 不同的职业,在他们不忙的时间都可以作为一种解压的方式,所以研究开发水果连连看游戏是很重要的一个部分。
1.3研究内容 这个设计中的体系具有的一些知识有对安卓系统游戏开发的整体框架的结构的理解,并对其进行全面的刨析。在一个程序第一次进行开发的过程中,对于体系的分析也是非常重要的一个部分,想要让设计出来的软件更加能够满足人们的需要,就要做好预先的研究,本来的基础之上,还要进行一些创新的功能再进行比较全面的讲解,尽力找出更加全面的新的创新。
通过对系统的全面了解之后,进行了一个新的系统叫做水果连连看的游戏,主要的任务包括:
(1)事先调研分析的过程是了解整个应用软件的研发方向所运用的。
(2)通过分析调研报告找出这个软件需要开发的相关功能的种类。
(3)画出预先设计的构思图。
(4)写出进行开发操作的技术相关的文件。
(5)对代码进行研发并写出所有代码。
(6)系统测试,测试每个单元的功能。
1.4论文结构 本次项目是完成水果连连看手机游戏的设计与实现,模拟类似于网上那样的连连看游戏,具体划分如下:
第一章:引言。
主要对果连连手机游戏的简单解释。叙述该研究课题的现状和意义。
第二章:关键技术。研究确定系统开发需要的相关技术。
第三章:体系刨析。重点研究系确定统的开发环境,以及可行性研究分析,还有就是系统流程的分析。
第四章:系统设计与实现。完成系统结构设计,uml用例图的设计,开发流程的设计,数据库设计以及游戏界面的设计。
第五章:系统测试。主要完成系统的总体测试运行以及每个单元功能的具体测试。
关键技术 2.1 Android简介 目前来说,全球有两大智能手机阵营,其中就包括Android操作系统。它背后的公司也是全球知名的谷歌公司,Android最初也不是谷歌公司自己的产品。Andy 创建的Android公司被谷歌公司在2005年给收购了。在2007年才对外展示了Android的手机操作系统,并且建立了全球性的联盟组织,来共同研发和优化改良Android系统。2008年9月份谷歌公司发布了版本1.0 的 Android系统,由于谷歌基于Linux开发了自己的Java虚拟机,所以基于Android开发的原生软件的编程语言就采用Java语言。目前来说Android的版本已经更新到9.0了,可以说迭代更新也是非常的快。
Android平台的特性和优势如下:
开源:Android系统完全是对外开源的,由于Android基于Linux系统开发的,所以从底层的系统到上层界面类库等等都是完全对外进行开放,所以所有人群,比如个人以及一些组织都可以查看源代码进行学习,这也导致目前流行的一些手机厂商如华为,小米,三星等都有对自己的系统进行了自己的个性化设置,各厂商为了竞争优势也对一些功能进行了修改。
多元化的设备支持:现在的Android系统我们不仅仅只会在手机上应用,该系统的应用可以说是非常广泛,比如平板电脑,现在流行的互联网电视,智能手表以及车载导航仪都广泛应用安卓系统,这样以来对于Android开发工程师来说他们的就业范围也是相当的广泛。
Dalvik虚拟机和Sun VM的对比表:
Dalvik 基于寄存器 运行.dex后缀文件 对低速cpu性能较高 Sun VM 基于堆栈 运行.class文件 对低速cpu性能较低 总结就是Dalvik虚拟机对移动设备做了进一步的优化,采用寄存器对于较大的程序来说,他们的编译时间会更短[2],占用的资源也会更少,运行的效率相对更高。Dalvik对低速cpu上的高性能,对内存的高利用率,使得他就非常适用于移动设备。
开放的第三方应用:由于谷歌秉承开源开放,所以在Android上开发和发布app相对更加容易,我们开发人员也可以根据自己的需求去调用一些手机的硬件设备,比如摄像头,陀螺仪等,也可以父王问本地的一些信息等,所以Android的整个应用市场非常丰富。
集成的浏览器:由于内部集成了基于开源的浏览器引擎(WebKit)。再加上Android手机本身的功能,浏览网页时的效果会更加的好。
SQLite数据库:SQLite作为一款嵌入式数据库,其主要的特点就是轻量级,占用资源率低,同时它还支持当前一些主流的操作系统,也可以和类似于Java这样的编程语言结合。总体来说SQLite是一个开放性的轻量级[3]数据库。
多媒体的支持能力:多媒体支持包括常见的音频文件、视频文件和一些静态文件格式。
2.2 开发平台的搭建 JDK的下载与安装 在百度搜索栏中输入JDK下载关键字,找到自己需要的JDK版本正确下载,推荐一般下载1.8版本。当然其他版本也行,但是版本不要太低。
下载完成后点击JDK,通过网上的一些步骤一步一步进行操作就可以安装上了。接下来就是要给JDK配置一定的环境,在安装步骤进行完毕之后,再重新查看是否安装好了。再经过快捷窗口输入自己安装之后显示的一些信息来重新审视一下自己是不是已经安装成功了。
图2-1验证JDK安装是否成功 Eclipse下载与安装 Eclipse这个进行编程的软件是属于Java研发出来的,而且是开发的一个平台,被很快应用在了很多地方,而且还包含了很多方面,例如添加了一些附件,还有一些自己研发的软件(JDK)。
Android SDK的安装 由于我们开发不是在专门的Android开发平台下开发我们的水果连连看手机游戏,在测试过程中我们是通过数据线连接手机的方式去模拟程序的运行去情况,所以在这里我们不需要安装SDK。
ADT的安装(1)打开Eclipse软件,点 “Help”进到菜单,找到“Install New Software”进去。
点Add…...,弹出Name和Location框,在Location输入http://dl-ssl.google.com/android/eclipse。如图2-2所示:
图2.2 ADT的安装(2)确定之后,可以显示出Developer Tools。勾选这个选项之后点击finish按钮完成。
(3)确认安装完成后,在主菜单下选择Window下的Preferences项,再弹出来的界面找到Android这个选项,然后在右边找到browse并选中SDK路径(这里的路径是自己安装的路径),确认无误后点击apply按钮配置完成。
创建AVD(1)打开eclipse软件,在主菜单中选择Windows下的Android SDK and AVD Manager选项,找到弹出面板中的Virtual Devices项并点击,点New,如图所示,按照图片配置相应的信息后点击OK后配置成功。
(2)再运行新型的模拟装置,选择将要运行的模拟装置,然后单击“start...”;
再单击“launch”。运行成功之后,如下图所示:
图2-3 模拟器 2.4 JSP技术 什么是JSP:JSP也被叫做java服务器页面,它是基于Java语言的一种动态页面技术,其逻辑是从servlet中分离出来的。在那种普通的网页传统上会是HTML或JS去写的纯静态的或行对交互不多的页面,jsp技术是在传统的网页代码中插入Java程序段和JSP标记(tag),从而形成,后缀名为(*.jsp)的JSP文件。
为什么使用JSP:在动态网页中其实多数页面元素还是不动的,如果采用servlet输出页面中需要动态改变的内容,这就导致所有的静态页面的内容也都需要用java程序代码生成。这样以来整个servlet程序的代码量会非常大,显得程序非常臃肿。一般来说后台开发的人员肯定没有纯前端开发人员和美工对页面的设计那么专业,也不一定那么熟悉这些开发语言。所以sun公司推出了jsp技术来解决这样的问题。
本次系统采用不同的程序设计语言去合作开发,采用合适的语言和技术做出最合适的事情。充分体现开发语言和技术的灵活性。本次系统采用Java的B/S结构作为系统实现的主要框架[4],也就是采用jsp开发语言。
JSP这一次运用的技巧就是运用Java语言来完成。运用XML类进行一些处理变成网页。通过对网页发送一些请求来进行访问一些互联网中服务器的一些信息的处理。在进行技术完善的过程中完全实现在设计上以及显示的分离,能够更加方便。发送请求再进行处理,这个过程很透彻。
2.5 数据库 体系的技术开发使用的数据库是MySQL,MySQL也是当下最流行的关系型数据库之一。程序员可以通过多种编程语言和不同的数据库驱动连接和访问MySQL数据库。MySQL关系数据库管理系统越来越多的人喜欢用,应用范围也越来越广。
MySQL的优点 1.简单易用 :MySQL 是一个高性能并且相对来说较为简单的数据库体系,和数据体系中的一些设定和管控来对比,这其中复杂的程度比较低。
2.价格 :MySQL目前也是市场上完全免费的数据库系统。
3.小巧 :目前主流的几个大型数据库中,MySQL数据库安装成功后相对别的数据库来说对内存的占用是非常小的。
4.支持查询语言 :结构化查询语言(SQL)MySQL数据库也可以支持,当然,大多数数据库现在都支持SQL语言。MySQL还支持不同的数据库连接池连接。
5.性能 :MySQL可以支持多个方式同时连到服务器上。使用者的数量没有什么限定,也就是说一个数据库可以同时有多个用户去访问。MySQL也提供了几个不同的可视化工具,使用户可以很容易地操作数据库。
6.连接性和安全性 :完全网络化的MySQL数据库,用户可以在有网的情况下在任何地方任何时间连接数据库并且进行访问,该数据库也提供了管理工具,通过它控制和优化数据库的一些操作来控制数据库的安全性。
7.可移植性 :目前社会流行的一些操作系统都可以连接访问MySQL数据库。因此 在不同的环境下都能够使用该数据库,所以其具有较的移植性。
8.速度 :根据市场用户体验反应,MySQL数据库的运行速度也很快,所以越来越多的用户选择使用MySQL数据库。
2.6 Tomcat简介 Tomcat由Apache,个人及一些公司共同开发而成,目前是市场上运用最为广泛的一款轻量级的服务器。其中最为主要的开源并且免费。其官网下载网址为http://tomcat.apache.org/。
Tomcat的使用也很简单,一般的开发平台软件基本上都有自己版本的Tomcat,通常用户下载和安装更高版本,安装完成后,通常配置系统的环境变量。配置完成后,在浏览器的网址中输入http://localhost:8080/,启动服务器,然后打开浏览器,出现以下屏幕指示配置成功。系统分析 体系刨析能够让我们针对设计的体系能够具有更加全面的了解,对于体系进行全面的了解之后可以更加确定将要了解的方向,确定可以进行的办法,经过体系的刨析来让我进行最后的解决办法,帮助设计出更加合适的体系。
3.1 系统设计目标 设计这款连连看的手游的时候,需要确定下面的一些信息:
可靠性:科技发展的时代,伴随着各种信息陷阱,所以我要保证信息的安全性。
先进性:首先要了解现代人们的审美和个性化需求,采用市场流行的技术,研发一些比较适合现代人们的游戏。
延展性:这次对于游戏的开发过程中,一定会带来一些不同的游戏感受,所以开发这个游戏中的一些游戏的功能中,能够感受到这个软件的延展性,可以进行升级。
可行性:包括一些功能方面的有效果的性能,能够更加充分的满足这些用户的要求。
3.2 可行性分析 体系对于可以实行的操作能够更加全面的了解。经过全面的体系的刨析,可以确定最终研究的标准,寻找能够执行的方式,可以确定最终的解决方案,设计出一个更合乎情理的体系。
3.2.1 操作可行性分析 这个水果连连看的手游是安卓系统,方法非常简单,如果可以更加熟练进行使用这个智能化的手机,打开这个软件,就可以选择自己想玩的游戏模式进行游戏的玩耍,也可以查看所有玩家的分数排行榜等,操作简单,完全可行。
3.2.2 技术可行性分析 首先。我们本次开发水果连连看游戏开发采用的是安卓开发,然而安卓是基于Java的一个开发环境,这对于我们来说很友好,因为它相对于C/C++语言,Java编程语言更易于使用,而我们的开发环境是Eclipse开发环境,这对大家来说比较熟悉,而我们不需要安装Android开发软件,只需要在Eclipse上安装相应的插件就可以获得Android SDK。因此,从技术上开发该系统是可行的。
3.2.3 经济可行性分析 因为这个开发平台是Eclipse,使用的数据库是MySQL数据,然而两者都是免费的平台,所以在经济上不会有太多的付出,所以经济上可行。
总之,连连看这个手游还是比较可靠的。
3.3系统流程分析 调查分析系统所涉及到的每个环节的业务流程是要在系统流程分析中体现出来,用具体的用户的需要以及涉及的一些功能方面的要求作为标准。掌握具体的操作流程的一些信息,对于输入信息以及输出一定要保证具有很强的准确度,而且能够确保全部的体系数据库中一些信息足够完整对于信息处理也更加精准,以用户具体的需要来绘制程序图。
3.3.1注册流程 对于没有注册过的客户要进行相关操作,应该按照下面的流程进行。
图3-2注册信息流程图 3.3.2登录流程 新用户进行注册之后,可以再系统中输入一些用户的名字还有一些密码。按照下面的流程进行操作。
图3-3 登录流程图 3.3.3 操作流程 完成操作之后,进到游戏里开始玩这款游戏。用户玩游戏最开始,要在设定好的时间内完成所有任务,才能进入下一关。假使规定时间内无法消掉所有的图形的话,就会失败。操作流程如下:
图3-4系统操作流程图 3.3.4 游戏详细过程流程 客户进行游戏中,如果选择的两个图案是相同的,那么就可以被消除,体系会自动判别这个图案是不是一样的,如果是就会把它消掉,如果不是就不会消掉。如果设定时间内完成了对全部图案进行消除,就可以进入下一个关卡,如果不行,表示失败。如图3-5所示是这个游戏的解读。
图3-5 游戏详细过程流程图 3.4系统运行环境 硬件:安卓智能化的手机 软件:Android2.2版本及以上 用具研发:Eclipse 数据库:MYSQL 4、系统设计与实现 4.1系统结构设计 整体体系的设计就是把一个很大的任务划分成若干个比较小的任务,并且分阶段完成并且把这些任务结合起来形成一个完整的任务。具体操作流程:
(1)体系被划分成很多模块(2)将每个小模块进行先预设计(3)小模块之间的联系形成一个模拟的关系的设计(4)每个模块之间进行界面的设计以及之间信息的传递的设计 整体对于这个游戏的设计过程中,为了确定比较精确的设计的方案来完成每个小的方案的一个目的,针对每一个小的目的来说,一定要事先了解到一些相关的需要的资料信息。再进行设计方案的实行,并逐渐对它进行优化,再设计出来一个可以实施的系统的结构。
在最完整的设计过程,想要将每个小的模块的目标完成的具体要进行实施的方法,针对每个小的目标,第一步要解决的就是有关的对于需求量的分析。再初步设计,逐步优化。
这次安卓系统的手机中水果连连看的游戏的结构图如图4-1所示。
图4-1系统结构图 4.2系统UML用例设计 UML的建模表达方式也是每一个程序员应该掌握的一种建模语言,UML建模也是每一个项目必须的一个设计流程,他可以把我们理解的一个抽象的对象或者是类用建模的形式标记,同时负责开发的人员也可以通过它来了解系统想要的功能以及对整个系统流程多前期工作。以下就是我对水果连连看有绩效游戏的UML建模分析。
本Android水果连连看手机游戏主要功能包括:注册,登录,娱乐模式,极速模式,进阶模式,排行榜。
图4-2 系统用例图 4.3系统开发流程设计 进行要发构思这个手机连连看的时候,要先对产品进行研究,然后构思规划一下软件的整体框架,然后填充软件的内容以及进行检测,设计出来的成果的流程如下所示。
图4-3 软件设计流程图 4.4数据库设计 一个设计成熟的资料库能够影响到软件开发程度的好坏,而信息资料库的构思取决于结构表的构思,以及图标间的联系,以及系统开发需要设计的数据表内容等信息。设计信息资料库的时候,需要足够的时间来进行构思,才能设计出一个完美的信息资料库。
4.4.1 数据库E-R图设计 E-R图是一种表示明确信息种类之间联系的一种图形方法,能够在整体方面显示出现实与虚拟之间的联系。图里比较主要的东西就是实体、联系与属性。该图即由这些因素组成。本Android水果连连看手机游戏的E-R表如图显示:
(1)玩家数据具体属性E-R图如下4-4所示:
图4-4用户信息实体E-R图(2)分数数据实体属性E-R图如下显示:
图4-5分数信息实体属性E-R图 4.3.2 数据库表设计 本游戏的链接邮箱使用的是MYSQL数据库管理软件,基本信息库表明细数据如下:
表4-1 users用户信息表 字段名 数据类型 是否允许空 字段含义 id int(11)NOT NULL 编号 name varchar(255)NULL 用户名 password` varchar(255)NULL 密码 dates varchar(20)NULL 注册时间 表4-2 scores分数信息表 字段名 数据类型 是否允许空 字段含义 id int(11)NOT NULL 编号 name varchar(255)NULL 用户名 score` varchar(255)NULL 分数 dates varchar(20)NULL 注册时间 4.5界面设计 次游戏的主界面构思方案如下所示:
4.5.1 注册登录界面 玩家需要输入自己的ID,密码并且确认密码是否正确然后即可登录游戏,其界面如图4-6所示 图4-6 注册登录界面图 private void loginEvent(){ if(!isLogined){ String name=mLoginUserEdit.getText().toString();String password=mLoginPasswordEdit.getText().toString();if(name!=null&&password!=null&&name.length()>0&&password.length()>0){ loginHttpClient(name, password);}else { showTip(“请填写完整用户名和密码!“);} } } private void registEvent(){ String name=mRegistUserEdit.getText().toString();String password=mRegistPasswordEdit.getText().toString();String passwordone=mRegistPasswrodmorEdit.getText().toString();String phone=mRegistCodeEdit.getText().toString();if(phone!=null&&password!=null&&passwordone!=null &&!phone.equals(““)&&!password.equals(““)&&!passwordone.equals(““)){ if(password.length()>5&&passwordone.length()>5)if(password.equals(passwordone)){ registHttpClient(phone, password);}else {showTip(“两次密码都不同“)} }else {showTip(“密码必须高于6位数“)} }else {showTip(“请填写完整信息“);} } 4.5.2 游戏界面 用户可以选择娱乐模式,极速模式,进阶模式进行开始游戏,其界面如图4-7所示 图4-7 游戏界面图 private void tounchEvent(Context context){ this.context=context;this.setOnTouchListener(new OnTouchListener(){ public boolean onTouch(View v, MotionEvent event){ switch(event.getAction()){ case MotionEvent.ACTION_DOWN: performClick();float x=event.getX();float y=event.getY();if(isFail==false){ downPic(x, y);} invalidate();break;case MotionEvent.ACTION_MOVE: performClick();float x1=event.getX();float y1=event.getY();invalidate();break;case MotionEvent.ACTION_UP: performClick();invalidate();break;}return true;} });} private boolean ispause=true;public void resetevent(){//重置参数 ispause=false;} 4.5.3 排行榜界面 用户可以点击查看排行榜信息,设置该功能的意义在于让玩家自我评定一下自己的游戏能力,看到自己以及别人的分数,使其有了彼此的对比,增加游戏的乐趣性。其界面如图4-8所示 图4-8 排行榜界面图 该排行榜显示数据库中系统部分排名靠前的一些用户信息,包括用户名和分数等字段的信息。
系统测试 5.1测试定义 软件检测的目的是为了鉴别软件运行是否有问题,编写的代码有无差错以及功能设定是否达到要求。软件检测是一个游戏能否成功发行的重要步骤。即便游戏的设计理念天衣无缝,在进行软件检测的时候也会有很多没有被注意到的缺陷存在。
所有的软件开发都要有检测这一过程,主要是为了找出其中的差错,将玩家的需求和软件客户的标准的差距进行协调,并且协商好这些矛盾,才能制作出一个让更多人满意的水果连连看手机游戏。
软件检测应该经常进行,才能够及时纠正开发过程中出现的错误,提高软件开发的效率。判断软件是否达标不但要看软件编码是否有误,还应该考虑系统构思以及历史环境。软件缺陷,可能是代码编写有误,还有可能是设计过程中的瑕疵与错误,亦或者是在需求研究的过程中出现了差错。从现实角度出发,一开始或许只是一个小失误,但是就像多米诺骨牌一样,一步错步步错。所以要及时进行安全测试,及时发现错误并且改正,有效防止后面出现更大的错误。在进行软件检测的时候,设计者应该多为玩家考虑来进行软件开发,监测方法为黑盒检测。检测是为了游戏的画风符合玩家的审美,构思的版面与风格一致。另外,升级版的游戏更加完美,更加能够获得玩家的一致好评,同时还要对游戏的设计进行合理规划。
5.2测试目的 (1)以设计人的角度来讲,目的其目的在于测试软件能否正常运行,以此来保证玩家的拥护。想要自己的游戏能够达到玩家内心满意的程度,按照他们内心所想的进行,比如说不同的客户对软件的目标、可行性和安全性的要求也不一样。达到了这一要求我们才能精准定位到缺陷所在,并且早日纠正。
(2)从玩家方面来看,在他们的日常使用过程中,就可以发现游戏的很多不足之处,并不是说一个发行的软件就没有错误。
(3)在客户需求的方面出发,则必须思考系统在运行的时候可能会产生的纰漏,并且提前解决好或者做好准备,由此来增加客户的信任度以及好感度。
检测软件的易用性、兼容度、稳定程度以及可用性等方面,及时为玩家的建议解答疑惑。然后将检测后的软件进行深度分析,从而方便未来进行持续升级。
这个游戏的设计只有在安卓的手机上才能够正常使用,主要为了服务于广大玩家,因此要做到的是想玩家之所想,做出令广大玩家满意的游戏,这就需要我么及时采纳玩家的建议对产品进行不断地升级更新,致力于让广大玩家们满意。
5.2 性能测试 软件使用性检测一般是进行虚拟软件运行,从而来检测软件运行是否达到预期目标。所需要的技术一般为:软件运行速度,软件打开的速度。
软件检测一般进行如下检测:安全性、依从性、可操作性、准确性以及适用性能。具体数据如表5-1所示:
检测项目 检测结果 依从性 好 适用性能 好 可操作性 好 安全性 较好 准确性 好 表5-1 软件性能检测 5.2.1单元检测(1)如下测试的是用户注册信息的数据库同步测试,用户按照正常流程填写用户注册信息后,点击注册按钮之后用户数据就会同步保存到数据库中。测试结果如下图5-1所示。
(2)如下要测试的是玩家在玩关卡时所得分数,结束关卡后将用户所得分数保存到数据库中。测试的结果如图5-2所示 5.3 测试结果分析 因为之前也没有开发这种Android游戏的项目经验,整个游戏的流程以及一些游戏流程也是在网络上找了一些类似的游戏去体验和总结他们的游戏流程。在代码实现那一块,在刚开始的时候也出现了一些各种各样的系统漏洞。在最开始的整个工程中,测试的时候发现自己书写的代码与自己设想的结果不一致。尤其是在游戏绘图方面,本来保证的是每个水果图片都是偶数个,结果测试了几次发现还是有奇数个图片的情况,在经过几次测试之后最终也找到了问题并且要修改测试通过了。还有就是在数据库方面,用户的排名方面总是与数据库的数据不能够同步。最后发现数据库的数据没有同步更新。虽然在测试的过程中出现了很多问题,但是也是每个项目必然会有的问题,所以在我反反复复的测试和修改之后这些问题也都通过了。在整个项目完成开发完成之后,统一测试的时候发现就没有那么多问题了。在整个测试过程中也发现了一些自己开发的陋习,比如命名不规范等。
通过游戏进行进行检测研究,保证游戏的可玩性能够达到更多玩家的满意。能够拥有充足的新鲜感,并且不会因为操作太过复杂导致玩家弃游,基本不存在技术上的缺陷,还是值得大家一玩的。
结 论 因为这么长时间研究水果连连看的运行方案,所以对于软件的运行具有了一定的了解,在游戏的开发当中,我们应该先对该方案有一个精准的认知,正确的定位,了解其目的,才能够继续对其功能进行开发,进而对细节进行雕琢,从而一步步的进行下去直至游戏研发成功。对于这一系列步骤,我铭记于心。与此同时,还丰富了我对软件开发的知识,这一路走来收获颇丰。
想要设计一款成功的游戏,就必须懂得软件开发的程序,对这方面的信息进行研究学习。然后弄懂其中的原理,接下来尽心整体构思,填充细节、进行编码,最后还要进行终极检测,如果检测成功,即可完成。随着游戏开发的成功,内心的自豪感油然而生,冲谈了工作时所有的压力与苦闷。
在学习与操作中跌跌撞撞的行走着,最终设计也步入尾声了。开发的水果连连看基本已经完成,即便稍有瑕疵,却也是包含着我所有的灵感与爱的结晶。当然它还有很大的进步空间,我的学业随着设计的结束亦走到了尾声,我希望能够亲手为它写下一个圆满的结局。在进行研发的时候,因为实践让我学到了许多之前并不了解的知识,能够有机会发挥自己的想象力,展示自己的实力。由此我懂了并不是学习好就一切都好的,重要的还是要不断地进行实践。虽然也曾有挫折困苦,但我从未想过放弃。在不断纠错的过程中我得到了很多的宝贵经验,是我人生中的财富。
在对游戏进行研发的不断摸索的进程中,让我了解到了许多之前在课上没有触及到的东西,学到了很多实战中才会得到的经验,认识到自己还有很多不足。当今时代计算机网络发展迅速,其涉及范围也非常广阔,如果想要不被该领域所抛弃,所以就要求我们必须加倍努力学习,通过实践不断充实自己。即便面临毕业,我也不会停下我学习的脚步,日后不论在哪里,都不能骄傲自满,要随着时代的发展不断进步,不能被世界所抛弃。
致 谢 经过这么长时间的艰苦奋斗,我也终究是要毕业了,在这里必须要真诚的谢谢我的知道老师,这次毕业设计能够顺利完成离不开指导老师朱惠娟老师的细心教导,在这整个过成中,老师也为我提供一些解决方法,比如毕设需要完成的内容,毕业设计的一些格式方面的修改等,尤其非常感谢老师在我们毕业设计上面的一些知道,由于我的毕业设计项目是我之前从来没有接触过的项目,在一开始对项目没有什么概念,在老师的指导下也提供了一下解决方案,比如让我去网上找一些相似的游戏去试玩体验总结 该类游戏需要完成的功能,听从老师的建议通过在网上试玩了一些类似游戏,终于找到了灵感,对自己的毕业设计项目需要有的功能模块以及功能流程有了初步的了解。在这个工程中,也让我对这种没有概念的问题学会了一些解决的方法。在次特别感谢我的指导老师。
然后,也要感谢学校四年的培养,由于之前也开设了Android开发的课成,Java课程以及Web课程,使得在项目开发的这个过程中所用到的一些开发语言都有熟练的掌握,使得在开发的难度上降低了很多。
参 考 文 献 [1] 佐冰冰.Android平台下Launcher启动器的设计与实现[D].哈尔滨工大,2012.[2] 张利国,代闻,龚海平.Android移动开放案例详解[M].北京:人民邮电出版社, 2010.[3] Rafael Ufology.GOOGLE ANDROID MARKET[J].Computer Canada,2009,25(13):24-25.[4] 陈立伟,张克非,黎秀红.精通JAVA手机游戏与应用程序设计[M].北京:中国青年出版社,2005.[5] E2Ecloud 工作室.深入浅出 Google Android[M].北京:人民邮电出版社,2009.[6] 熊刚.基于Android的智能手机的设计与实现[D]:[硕士学位论文].武汉:计算机应用技术系,2010.[7] 余成锋,李代平.Android3.0 内存管理机制分析[M].计算机应用软件,2013.[8] 杨云君.Android 的设计与实现[M].北京:机械工业出版社,2013.[9] 明日科技.Android从入门到精通 [M].清华大学出版社.2012.9 [10] 孙宏明.Android手机程序设计入门运用到精通 [M].中国水利水电出版社.2012.[11] 余成锋,李代平,毛永华.Android3.0 内存管理机制分析[M].计算机应用与软件,2013.[12] 郭志宏.Android应用开发详解[M].电子工业出版社.2010.[2] 杨丰盛.Android应用开发揭秘[M].机械工业出版社.2010.[13] 姚昱旻,刘卫国.Android的架构与应用开发研究[J].计算机系统应用,2008,24(11):3-7.[14] 杨丰盛著.Android应用开发揭秘[M].北京:机械工业出版社,2010.96.[15] W.Frank Ableson(美)Charlie Collins RobiSen(美)著.张波,高朝勤,杨越译.Google Android揭秘[M].北京:人民邮电出版社,2010:2-7.[16] 朱桂英.Android开发应用从入门到精通[M].北京:中国铁道出版社,2011:21.[17] 余志龙,陈昱勋,郑名杰等著.Google Android SDK开发范例大全[M].北京:人民邮电出版社,2010:2.[18] 郭宏志著.Android应用开发详解[M].北京:电子工业出版社,2010:96.
第二篇:水果儿童游戏
2011.3.13亲子活动:水果宝宝
练湖中心幼儿园 毛夕凤
一、亲亲热热《宝贝在哪里?》
活动目标:
1、能够大胆介绍自己,愿意积极参与活动。
2、培养增进与教师之间的情感。
活动准备:家长带孩子入座前带孩子小便,安抚幼儿情绪。为上课做准备。活动过程:
师:宝贝们好!幼:老师好!
师:准备点名字。幼儿:我就 点名字。
师:XXX 你在哪里啊?幼:我在这里啊!大家好!师:宝贝。真棒!来亲一亲或抱一抱。
家长提示:引导并鼓励幼儿大声地介绍自己。
二、说说唱唱《分果果》
儿歌:大苹果,大大大。小苹果,小小小。小苹果小,给宝宝。大苹果大,给妈妈。
目标:
1、认识苹果、香蕉并能完整的说出他们的名字及颜色。
2、能够积极参与活动,体验学习的快乐。
准备:2种水果的图片,放图片的小篓子人手一个 过程:
师:今天老师给小朋友带来了一个魔术袋子,想知道,里面是什么吗?看老师来变、变、变!(教师在一个魔术袋中变出了一个苹果的图片)
1、认识苹果,师:这是什么啊?(苹果)请幼儿大胆地说出苹果的名字。师:苹果是什么颜色的啊?学会说:“红红的苹果”。
2、第二次变出一个小的红苹果。
师:这两个苹果一样吗?(区分大、小)
3、学习儿歌
师:这两个苹果如果给宝宝和妈妈吃的话,大的应该给谁吃?小的又应该给谁吃?
4、学习儿歌
教师示范后,幼儿学习儿歌。
家长提示:幼儿在认识水果的时候,鼓励他们大声地说,积极参与活动,在家长与幼儿一起认读环节,能够和幼儿一起认知,帮助幼儿复习巩固。鼓励幼儿大声念儿歌)
三、开开心心《小兔跳圈》
目标:
1、发展幼儿的大肌肉及下肢活动,学会跳。
2、愿意积极参与活动,体验游戏的快乐。
3、体验亲子游戏的快乐,增进亲子情感。准备:圈 过程:
小朋友们坐了这么久累了吗?我们和爸爸妈妈一起来做个游戏吧!
1、家长站在圈内,幼儿在两米处学小兔子,双手和家长一起跳圈。
2、把小圈摆成圆形,播放音乐,幼儿和家长一起跳圈。
3、钻小圈。家长把圈圈竖起来,幼儿钻小圈。
家长提示:和幼儿一起参与活动,带领幼儿一起游戏,运用多种形式方法,使幼儿得到锻炼。
三、玩玩做做《水果排序》
活动目标:
1、锻炼幼儿小肌肉的发展
2、感知规律,能大胆的动手操作
3、体验活动的快乐
活动准备:标记图 水果图片 活动过程:
1、水果交替排序
师:今天不光苹果宝宝来到了,瞧,香蕉宝宝们也来了,老师来帮他们排排队。教师边操作边讲解操作过程。
教师示范水果排序:一个苹果、一个香蕉、一个苹果„„ 师:宝宝,我们一起来说说他们是怎么排队的。
2、幼儿操作
3、所有幼儿做好后,教师给每个幼儿笑脸花奖励。
4、让幼儿把材料送给老师,有序摆放。
家长提示:尽量让幼儿自己动手做,家长给与适当的帮助。
五、蹦蹦跳跳《快来吧》
目标:
1、通过游戏锻炼宝宝跳的运动能力。
2、体验愉悦的情感。准备:音乐《快来吧》
过程:
1、教师教幼儿简单的动作。
2、配上音乐示范。
3、和幼儿一起蹦蹦跳跳。
快来吧,我们一起游戏,快来吧,我们一起跳舞。快来吧,我们一起拍拍,快来吧,我们一起跳跳。伸出你的双手拍拍,抬起你的双脚跳跳。拍拍你的屁股扭扭,高兴你就大声嗨嗨。快来吧,一起扭扭扭,快来吧,一起嗨嗨嗨。家长提示:让幼儿积极参与,动起来。
六、放松活动
教师带领幼儿和家长一起放松,放缓慢,轻柔音乐。亲子间相互拍打。拍一拍,轻轻拍,重重拍。揉一揉,轻轻揉,重重揉。捏一捏,轻轻捏,重重捏。
注意引导家长和幼儿相互拍打,放松。
七、结束活动
播放音乐《再见》引导幼儿和老师,其他家长相互说再见。
第三篇:五子棋游戏总体设计与实现
4.系统总体设计与实现
4.1 总体设计分析
总体设计是软件开发过程中的另一个重要阶段,在这一阶段中将根据需求分析中提出的逻辑模型,科学合理地进行物理模型的设计。这个阶段的主要目标是将反映用户信息需求的逻辑方案转换成物理方案,并为下一阶段提供必要的技术资料。
4.1.1 总体设计原则
(1)整体性:软件是作为统一整体而存在的。因此,在总体设计中要从整个软件的角度进行考虑。
(2)灵活性:为保持软件长久的生命力,要求该手机游戏软件具有很强的环境适应性。为此,游戏软件应具有较好的开放性和结构的可变性。
(3)可靠性:可靠性是指软件抵御外界干扰的能力及受外界干扰时的恢复能力。
(4)经济性:经济性是指在满足游戏软件需求的前提下,尽可能地减小游戏软件的开销。
4.1.2 软件模块总体设计
软件中各模块之间的关系通常利用层次图来表示。它是一种一系列多层次的用树形结构的矩形框描绘数据的层次结构框图。一个单独的矩形框作为树形结构的顶层,各个数据的子集由下面的各层矩形框代表,最底层的各个矩形框代表组成这个数据的实际数据元素(不能再分割的元素),它代表完整的数据结构。这模式非常适合于需求分析阶段的需要,层次方框图对数据结构描绘随着结构精细化也越来越详细。反复细化沿着图中每条路径,从对顶层信息的分类开始,直到确定了数据结构的全部细节为止。
开始游戏重新游戏游戏选项悔棋认输五子棋游戏背景音乐退出游戏先后手设置游戏设置棋盘底纹设置棋盘大小设置游戏帮助帮助关于 图4-1 游戏功能结构
本研究中将游戏软件分为三大模块,如图4-1所示,包括:游戏选项、游戏设置和帮助。按照在调研中搜集的资料对每个模块的功能进行编排制作。依据上述功能的分析,本研究中,将游戏软件在三大模块的基础上又对每一大模块又分为几个子模块:
游戏选项包括六个模块:开始游戏、重新游戏、悔棋、认输、背景音乐和退出游戏。
游戏设置包括三个模块:先后手设置、棋盘底纹颜色设置和棋盘大小设置。
帮助包括两个模块:游戏帮助和关于。
4.2 游戏设计
4.2.1 游戏前的准备
本游戏在开发之前需要做一些前期准备工作,尤其是对于精通五子棋游戏的Java 游戏开发者来说。通常情况下,一款运用起来比较熟练地 J2ME 开发工具
是必不可少的。本游戏使用的是J2ME的简化开发工具 Sun Java(TM)Wireless Toolkit 2.5.2 for CLDC,他需先将Java虚拟机安装调试好之后才能使用。WTK 2.5.2 不带有文本编辑功能,所以需要另寻搭配使用。本游戏采用 Ultra Edit 进行编辑。本游戏需要几张后缀名为.png格式的卡通图,除了一张用作五子棋游戏的 Logo 外,其余的都将在游戏中使用。4.2.2 游戏界面和事件驱动设计
游戏的界面设计采取传统游戏界面风格,如图4-2所示。游戏设计中采用传统界面游戏风格,首先启动游戏,然后进入游戏开始界面,界面中放置“设置”、“开局”、“帮助”、“关于”四个选项供玩家选择。其中“设置”选项主要是对游戏的相关功能进行设置,如游戏难度设置。另外还有“悔棋”、“重玩”等项目的设置。除此之外还包括查看游戏帮助、游戏介绍等。
图4-2 游戏界面设计
所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么操作(即调用什么函数)。当然事件不仅限于用户的操作。我们知道,事件是事件驱动的核心自然是。从事件角度说,一个事件收集器、一个事件发送器和一个事
件处理器组成了事件驱动程序的基本结构。事件收集器专门负责收集包括来自硬件的(如时钟事件等)、来自用户的(如键盘、鼠标事件等)及来自软件的(如应用程序本身、操作系统等)的所有事件。将收集器收集到的事件分发到目标对象中则由事件发送器负责完成。具体的事件响应工作则由事件处理器完成,它需要运用虚函数机制(函数名取为类似于 Handle Msg 的一个名字),它往往要到实现阶段才完全确定。事件处理器对于框架的使用者来说是他们唯一能够看到的。棋类游戏通常具备两个重要特性,首先是对战双方轮流落子,其次是落子间隔通常是不确定的,尤其是对战后期,可能每一步棋都要经过深思熟虑,无论是人还是计算机,都无法对时间间隔有事先的预期。基于以上两个特性,本游戏摒弃了大多数游戏采用的线程或定时器驱动游戏的方法,而采用了事件驱动的方法,即玩家的键盘或触摸笔触发游戏的下一个动作。事件驱动大大减少了不必要的工作量,只有玩家发出消息时,计算机才启动运算,而在玩家思考期间,计算机不做任何运算和重绘操作。4.2.3 游戏的类设计
五子棋游戏属于二维棋类游戏,因此可以定义一个 Chesses 类来表示棋子,用一个 Chess 类型的二维数组来包含棋盘上的所有棋子,对于该棋子玩家的区分使用Chesses 的 boolean 型的变量 is Player1 来区分。可以考虑直接生成数组的每一个对象而不是在数组建立后,而是把每一个棋子对象(Chesses)放在游戏的进行中生成,这主要是考虑到移动设备的资源有限,尽可能减少系统资源占用。这样在游戏进行时,可以避免还没有下的棋子在一开始就占用了系统内存,玩家每下一步棋,在数组相应位置生成该棋子的对象。
对于游戏中的每一类的设计,首先就是一个 MIDlet 类,Gobang 类继承自MIDlet 类,通过方法 start App,pause App,destroy App 来通知游戏的开始,暂停和销毁结束,用于连接设备的应用程序管理器(Application Manager)。
本游戏共由7个类组成,它们各自的功能如下:
(1)Gobang MIDlet类
负责程序的启动和屏幕之间的切换;
(2)Gobang Canvas 类
玩家的对战平台,他继承于 Canvas 类;(3)Setting 类
用于创建游戏的各项设置参数表单;
(4)Gobang Logic 类
游戏的逻辑类,负责胜负判断和计算机落子;
(5)Dot 类
棋子类,包含了棋子的位置信息;(6)Help 类
游戏的帮助类,包含五子棋的一些常识信息和五子棋教学内容;(7)About类
游戏的关于类,包含游戏的版本、版权等信息。各个类之间的关系如图4-3所示:
图4-3游戏类设计
4.2.4 游戏的流程设计
对于棋盘界面的更新,游戏进行绘制棋子时是按照棋子的二维数组来完成的,玩家下棋后,设置is Player1 值,程序修改数组相应位置,然后重新绘制(repaint)。为了使游戏的操作尽可能的简便,本文设计上不在游戏进入时设计菜
单,玩家可以直接开始对战,而是在开始游戏的过程中设置重新开始和退出的按钮。即一键开始,运行即玩,重来或退出都使用一键操作。游戏流程的设计依据主要是游戏的界面设计和游戏的类的设计。游戏启动时,Gobang MIDlet 对象先显示游戏的主屏幕,在屏幕下方一侧是出软键(软键指描述抽象客户端设备如何显示),另一侧是用软件构成的菜单,菜单元素主要有“开局”、“游戏设置”、“游戏帮助”、“关于”选项。当玩家选择“游戏设置”软键时,则显示游戏参数设置表单;当玩家选择“开局”软键时,则显示游戏对战主界面;当玩家选择“游戏帮助”软键时,则显示游戏帮助表单;当玩家选择“关于”软键时,则显示游戏关于表单。玩家进入游戏参数设置表单,当玩家按下“确定”软键时,则确认当前游戏参数,返回游戏主屏幕;当玩家按下“取消”软键时,则放弃此次对游戏的修改,直接返回游戏主屏幕。玩家进入游戏对战画布,对战中画布有两个软键,当玩家按下“返回主菜单”软键时,则退出游戏到达游戏主菜单;当玩家按下“悔棋”软键时,则进行悔棋操作;当游戏结束时,“悔棋”软键被换成了“重玩”软键。玩家进入游戏介绍表单,当玩家按下“确定”软键时,返回游戏主屏幕。4.2.5 游戏算法的设计
1、五子棋的获胜组合
有哪些获胜组合是在一场五子棋的游戏中计算机必须要知道的,因此,获胜组合的总数必须要求得。在本文中我们假定当前的棋盘为15*15:
(1)每一列的获胜组合是11,共15列,计算水平方向的获胜组合数,所以水平方向的获胜组合数为:11*15=165。
(2)每一行的获胜组合是11,共15列,则可计算垂直方向的获胜组合总数,垂直方向的获胜组合数为:11*15=165。
(3)同理,可计算正对角线方向的获胜组合总数,正对角线上的获胜组合总数为11+(10+9+8+7+6+5+4+3+2+1)*2=121。
(4)计算反对角线上的获胜组合总数。计算反对角线方向的获胜组合总数可计算为11+(10+9+8+7+6+5+4+3+2+1)*2=121。这样可计算得所有的获胜组合数为:165+165+121+121=572。
2、设计获胜棋型
通过上面的计算,一个15*15的屋子棋盘在此已经计算出了会有572中获胜方式,因此,我们就可以利用数组建立一些常规棋型,棋型的主要作用是:
(1)判断是否有任何一方获胜;
(2)根据当前格局判断最可能的落子方式。
然而在现实中,高手留给我们的经验就是把握前奏,如“冲四”、“活三”,除了“连五”以外,这些也是同向胜利的捷径。
3、攻击与防守
获胜棋型的算法是中性的,不区分计算机和玩家,这就涉及到攻击和防守何者优先的问题。而许多高手都认为五子棋的根本是“防守”,“攻击”是灵魂。进攻是取胜的手段,是防守的延续和发展。许多经验和研究表明,一个棋手只要掌握了全面的、基本的防守原理和技巧,就能和比自己棋力高一个等级的进攻型选手对抗,起码能立于不败之地。对手进过越偏激,则防守的效果越好。没有进攻的防守就像只开花不结果,没有实际意义,顽强的防守是反攻的前奏,没有进攻的延续,防守也失去了价值。而这缺一不可。根据以上原理,计算机在接受最佳的攻击位置之前,还要计算当前玩家的最佳攻击位置。如果玩家存在最佳攻击位置,那么计算机就将下一步的棋子摆在玩家的最佳攻击位置上以阻止玩家的进攻,否则计算机便将棋子下在自己的最佳攻击位置上进行攻击。
4、用到的典型算法(1)坐标变换算法
游戏的实质其实是对所下棋子的位置进行操作和判断,因此将己方、对方以及棋盘上空点的位置坐标存储在相应的List中。我对所下棋子的坐标进行了处理,因为我所采用的棋盘为15*15,所以棋子横坐标为0到14的整数,纵坐标也为0到14的整数。因此,每次在棋盘上下子之后,计算机在存储该点的坐标时,便要对坐标进行加工。假设左上角点为firstPoint,它的实际坐标为(x1,y1),而我是将它作为(0,0)存储的,其它的坐标,其它点都是以该点为标准进行变换的,假设棋盘上每个格子的宽度为w,某实际点为(x2,y2),变换后的坐标为(x,y),x=(x2-x1)/w,y=(y2-y1)/w。
(2)胜负判断算法
胜负判断的规则很简单,就是判断游戏双方的棋子在同一条水平线、同一条竖线或是同一条斜线上谁先出现5个连续的棋子,谁先达到这样的目标,谁就获得胜利。在本设计中,是在每次下完一个子后进行判断,看己方是否达到了胜利的标准,若胜利游戏便结束;否则,游戏继续。
(3)人工智能算法
人工智能算法的主体思想分为以下三个步骤:
第一步:根据双方的当前的形势循环地假设性的分别给自己和对方下一子(在某个范围内下子),并判断此棋子能带来的形势上的变化,如能不能冲4,能不能形成我方或敌方双3等。
第二步:根据上一步结果,组合每一步棋子所带来的所有结果(如某一步棋子可能形成我方1个活3,1个冲4(我叫它半活4)等),包括敌方和我方的。
第三步:根据用户给的规则对上一步结果进行排序,并选子(有进攻形、防守形规则)。
5、典型类的具体设计(1)应用程序类
Gobang 类用于连接设备的应用程序管理器(Application Manager),Gobang类继承自 MIDlet 类,通过 Gobang 类的方法 start App,pause App,destroy App 来通知游戏的开始,暂停和销毁结束。源代码如下:
package com.occo.j2me.game.gobang;import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;public class Gobang extends MIDlet
//定义游戏界面的 Canvas 类 Gobang Canvas 的对象 Gobang public { Gobang Canvas gobang;Gobang(){
super();
gobang=new Gobang Canvas(this);//生成 Gobang Canvas 类的对象 gobang
} protected void start App(){
Display.get Display(this).set Current(gobang);
} protected void pause App(){
} protected void destroy App(boolean arg0){
}} //在屏幕上绘出游戏见面 gobang(2)游戏界面类
Gobang Canvas 类继承自 Canvas,游戏的核心类是 Gobang Canvas 类,此类将完成游戏的绘图、互动、控制、逻辑、等所有功能,此类的框架代码如下:
Package com.occo.j2me.game.gobang;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command Listener;public Gobang Canvas(Gobang gobang){
this.gobang=gobang;
}
protected void paint(Graphics g){
}
import javax.microedition.lcdui.Graphics;public class Gobang Canvas extends Canvas implements Command Listener{protected Gobang gobang;
public Gobang Canvas(){
}
}(3)棋子类
整个棋盘是一个 Chesses 类型的二维数组,棋盘上的每一个棋子都对应着一个Chesses 的对象,此类定义了一个棋子,源代码如下:
package com.occo.j2me.game.gobang;public Chesses(){
}
public class Chesses {boolean is Player1;
public Chesses(boolean is Player1){
this.is Player1=is Player1;
}}
4.3 游戏实现
4.3.1 主类的实现
YpkWuZiQiActivity类是五子棋游戏的主类,同时也是五子棋游戏的入口,它继承自Activity类。进入程序后,首先调用init()方法,init()方法通过调用setContentView(R.layout.welcomeview)显示登录该游戏的第一个界面。welcomeview.xml是一个布局文件,里面存储了界面信息。该界面中有四个Button,分别为welButton1、welButton12、welButton3、welButton4,点击每个Button都会触发一个事件,其中点击welButton1和welButton2还会给它的成员变量FIGHTINGMODE赋值,因为在人人对战和人机对战是写在同一个ChessBoard类中的,所以需要通过FIGHTINGMODE的值来区分是人人对战还是人机对战。
点击welButton1时,FIGHTINGMODE=1,然后会调用initTwo()方法,该方法通过调用setContentView(R.layout.chess)方法,来显示对战的界面。chess.xml文件存储了对战界面的信息。在chess.xml文件中调用了ChessBoard类,该类中主要定义了棋盘的信息,下文会对该类做具体的介绍的。在对战界面中也有四个Button,分别是b1、b2、b3、b4。
首先来介绍一下b2,该Button的功能是返回主页,调用init()方法就可以实现。b3的功能是重新开始,这个也只需要调用initTwo()方法。b3的功能是退出,调用了系统方法:System.exit(1)。下面重点介绍一下b1,该Button的功能是悔棋。该Button设定的点击事件详细内容如下:
b1.setOnClickListener(new OnClickListener(){ public void onClick(View v){ ChessBoard chess =(ChessBoard)findViewById(R.id.chess);Point temp = null;if(chess.whoRun == 1){
if(chess.firstPlayer.getMyPoints().size()>=1 &&chess.secondPlayer!=null){ temp=chess.secondPlayer.getMyPoints().get(chess.secondPlayer.getMyPoints().size()-1);
chess.secondPlayer.getMyPoints().remove(temp);chess.freePoints.add(temp);temp=chess.firstPlayer.getMyPoints().get(chess.firstPlayer.getMyPoints().size()-1);chess.firstPlayer.getMyPoints().remove(temp);chess.freePoints.add(temp);chess.freshCanvas();
}
} if(chess.whoRun == 2){ if(chess.firstPlayer.getMyPoints().size()>=1 && chess.secondPlayer!=null){ temp=chess.firstPlayer.getMyPoints().get(chess.firstPlayer.getMyPoints().size()-1);chess.firstPlayer.getMyPoints().remove(temp);chess.freePoints.add(temp);temp=chess.secondPlayer.getMyPoints().get(chess.secondPlayer.getMyPoints().size()-1);chess.secondPlayer.getMyPoints().remove(temp);chess.freePoints.add(temp);chess.freshCanvas();
} })首先获取ChessBoard对象,该对象继承自View,详细的定义了棋盘信息,主要负责显示棋盘的内容。接下来判断一下触发悔棋事件的是哪一个玩家,再判断是否符合悔棋的条件,这个条件很简单,就是棋盘上至少要有两个棋子。之后便进行悔棋操作,分别将两个玩家最后下的棋子取出,程序实现就是将两个ArrayList的最后一个元素remove出来,再分别放到记录棋盘中没有棋子的点的}
}
集合中,最后更新一下画布,主要是调用ChessBoard的invalidate()方法。通过以上步骤之后,呈现在我们面前的便是悔完棋的画面了。
点击welButton2时,FIGHTINGMODE=2,之后的步骤便会点击welButton1是相同的了,不同的是,由于对战模式的改变,从人人对战变成了人机对战。
点击welButton
3时,通
过
initThree()
方
法
调
用setContentView(R.layout.netchess)方法实现网络对战。详细的对战实现细节将会在下文一一介绍。在这个界面中只保留了两个Button:b2和b4。这两个Button所实现的功能和上面的b2和b4是相同的。
最后,welButton4比较简单。它所实现的功能为退出应用程序,调用System.exit(1)方法。4.3.2 游戏设置类的实现
游戏设置表单用来对游戏参数进行设置,包括棋盘大小、先手选择、智能级别。表单中使用了 Gauge 和 Choice Group 两种高级用户界面组件。
1、棋盘尺寸选择
标准的五子棋棋盘为 15*15,但为了满足不同玩家的需求,这里提供了大小为10*10 到 20*20 的棋盘,用户可以通过 Gauge 组件改变。棋盘的最小值为 10,而Gauge 组件的最小值为 0,所以当前的 Gauge 值需要角上 10 才是当前棋盘大小。创建 Gauge 组件的代码如下:
form = new Form(“ 游戏设置”);// 创建参数设置表单并添加标签 gauge Size = new Gauge(“棋盘规格: ” + board Size + “ X ” + board Size, true, 10, board Size-10);//棋盘规格
form.append(gauge Size);
图4-4 棋盘尺寸的设计
在Gauge交互模式下可以为Gauge对象所在的表单对象绑定一个Item State Listener 事件监听器,并在监听器上捕捉 Gauge 对象的事件,当 Gauge 的值发生变化时就会触发事件。这里将根据 Gauge 的当前值改变标签,显示当前的棋盘大小。其代码如下:
public void item State Changed(Item item){
if(item == gauge Size)//当 Gauge 组件发生变化时
{
int bs = gauge Size.get Value()+ 10;//获取当前的 Gauge 值并计算棋盘大小(加10)
gauge Size.set Label(“棋盘规格: ” + bs + “ X ” + bs);//改变 Gauge 组件的标签
}
}
2、难度选择
游戏的难易程度根据计算机的智能级别来控制,创建及添加选项的方法和复选框一样,所不同的是在创建 Choice Group 对象时,类型设置为 1(单选)。对于单选框,set Selected Index 只能用来指定某个选项被选中,因此,布尔值 selected 的值必然为 true,否则便没有意义。
游戏共有 3 个难度级别,分别是:拜师学艺、棋行天下、谁与争锋(此游戏中并未作出区分),初始情况下为拜师学艺,该选项的索引值为 0。创建难度选择单选框的代码如下:
level = 1;//默认情况下的难度级别
choicelevel = new Choice Group(“电脑智能级别:”, 1);//创建难度级别选项组 choicelevel.append(“拜师学艺”, null);//难度 1 choicelevel.append(“棋行天下”, null);//难度 2 choicelevel.append(“谁与争锋”, null);//难度 3
choicelevel.set Selected Index(level-1 , true);//设置默认情况为难度 1,索引值为0
form.append(choicelevel);//将选项组添加到主表单中
游戏设置选项表单还有两个 Command 对象,分别用于玩家却热和取消,所以表单需要监听软键事件和组件事件:
public class Setting implements Command Listener, Item State Listener
3、棋手选择
选择先手和难度等级用 Choice Group 组件来实现。Choice Group 组件用来构造选择框,其构造函数如下:
Choice Group(String label, int choice Type)选择先手的选项框为选择组件,属性为复选框,标签名为空。创建好选择组件后,逐条添加选项元素。添加选项的方法如下:
int append(String string Part, Image image Part)该方法追加一个选项元素到选择组中,追加的选项为选择组中的最后一个元素,选择组的大小加 1。
对于多选类型的 Choice Group,还可以设置个别选项的选择状态。设置初始选择状态的方法如下:
void set Selected Index(int element Num, Boolean selected)这里创建一个只有一个选项元素的多选框用于玩家设置是否计算机先行,在默认情况下为true,创建完成多选框后将其添加到主表单中,代码如下:
Computer First = true;//在默认情况下为计算机先行 choice First = new Choice Group(null, 2);//创建复选框 choice First.append(“电脑先手”, null);//添加选项元素
choice First.set Selected Index(0, Computer First);//设置多选框的默认状态 form.append(choice First);//将多选框添加到主表单中 4.3.3 棋子类的实现
1、棋子的行列位置
此五子棋游戏是一个二维棋类游戏,所以定了了一个 Dot 类来表示棋子。由于移动设备的局限性,所以程序不在下每一步棋时生成一个对象,而是在游戏进行时,玩家或者计算机没下一步棋,在数组相应位置生成该棋子的对象,而将已经下过的棋子保存到数组中随时检索,这样可以避免过多棋子对象占用系统内存。Dot 类的 UML 图如图 4-5 所示:
图4-5棋子行列设计
Dot 类主要有两个变量 row 和 col,分别表示行和列:
public int row;//行
public int col;//列
2、检查越位
棋子的位置并非是任意的,玩家和计算机每走一步棋之前都要线检查该位置的合法性,即棋子是否在棋盘上,否则判为无效落子。检查是否越界的代码如下:
public boolean is In Board(int board Size)//判断棋子是否越界(超出棋盘){ return row >= 0 && row < board Size && col >= 0 && col < board Size;}
3、修改棋子位置
在创建好 Dot 对象后,Dot 类提供了两种方法更改棋子位置,包括设置行列位置和从已有棋子中复制参数。
public void set Row Col(int r, int c)//设置棋子位置
{
row = r;col = c;
}
public void copy From(Dot d)//复制已有的棋子
{
row = d.row;
col = d.col;
} 4.3.4 对战逻辑类的实现
1、建立数据结构
本程序以数组保存当前盘面的情况,每个位置可能有三种状态:空、玩家的落子、计算机的落子,分别用 0、1、2 来表示。代码如下:
public static int PLAYER_NONE = 0;//该位置为空
public static int PLAYER_COMPUTER = 1;//该位置有电脑的落子
public static int PLAYER_HUMAN = 2;//该位置有玩家的落子
棋盘在初始情况下为空,即棋子上没有任何棋子,在Gobang Logic类的构造函数中对棋盘进行初始化:
table = new int[board Size][board Size];//创建棋盘数组 for(int r = 0;r < board Size;r++){
for(int c = 0;c < board Size;c++)
table[r][c] = 0;//初始化盘面为空 }
除了记录棋盘上每个位置的落子状态外,程序还将对每种状态的位置个数进行统计,以对算法进行简化。对三种状态的统计存储在整型数组中,该数组为全局变量。
private int player Counter[];
在 Gobang Logic 类的构造函数中对三种状态的计数进行初始化,即棋盘上都是空、计算机的落子或玩家的落子状态的个数为 0,在数据结构上,把空也当做某一特殊玩家。
初始化代码如下:
player Counter = new int[3];//落子状态计数器
player Counter[0] = board Size * board Size;//整个棋盘都是空的状态 player Counter[1] = 0;//电脑落子0 player Counter[2] = 0;//玩家落子0
2、落子和悔棋
这里使用了一个 Dot 类棋子对象来记录最后一步棋的位置,当玩家下了一步棋后需要将上一步重新绘制,以消除旗子上的引导框。另外,还是用了堆栈来存储最近的几步落子,以便玩家悔棋。
private Dot last Dot;//棋子对象,存储最后一步落子 private Stack steps;//棋子对象的堆栈
最后一步棋子和棋子堆栈在 Gobang Logic 类的构造函数中进行初始化;
last Dot = new Dot(board Size);//创建棋子对象用来存储最后一步棋,初始化
位置为棋盘中央steps = new Stack();//堆栈对象,用来存储最近的几部棋在棋盘上落子的代码如下:
private void go At(int row, int col, int player)//电脑或人在 row、col 位置上走
{
int last Row = last Dot.row;//记录上一步的行坐标
int last Col = last Dot.col;//记录上一步的列坐标
table[row][col] = player;//当前位置填充玩家代码
last Dot.set Row Col(row, col);//将这一部设置为“最后一步”
game Canvas.repaint At(last Row, last Col);//重新绘制上一步(将引导框去掉)
game Canvas.repaint At(row, col);//绘制当前这步
switch(player)//统计双方落子数量
{
case 1:
player Counter[1]++;//电脑的步数
break;
case 2:
player Counter[2]++;//玩家的步数
break;
}
player Counter[0]--;//空白的个数
if(steps.size()> 10)//堆栈数量超过上限(10)
steps.remove Element At(0);//清除栈底
steps.push(new Dot(row, col));//将当前这步棋子压入堆栈
}
Stack(堆栈类)从 Vector 集成而来,它使用 push()方法进入堆栈,需要时使用 pop()方法从堆栈的顶部将其取出。悔棋动作由玩家做出,从数据结构来看,是同时后退两步(将最后两步棋位置的落子状态设置为空)。
Stack 类的 peek()方法将获取栈顶对象,但不移。悔棋代码如下: :
public boolean undo()//悔棋
{
if(steps.size()>= 3)
{
Dot d = new Dot();//创建棋子对象
d.copy From((Dot)steps.pop());//从堆栈弹出的棋子中复制行列位置坐标
table[d.row][d.col] = 0;//将该位置设置为空
game Canvas.repaint At(d.row, d.col);//在棋盘上重新绘制该位置
d.copy From((Dot)steps.pop());//从堆栈弹出的棋子中复制行列位置坐标
table[d.row][d.col] = 0;//将该位置设置为空
game Canvas.repaint At(d.row, d.col);//在棋盘上重新绘制该位置
d.copy From((Dot)steps.peek());//获取栈顶对象,作为最后一步棋存储 last Dot.copy From(d);
game Canvas.repaint At(d.row, d.col);//重新绘制最后一步(添加引导框)return true;//悔棋成功
}
else
{
return false;
//悔棋失败
}
} 4.4 本章小结
本章主要内容是游戏的实现,包括主类的实现,如构造函数、事件处理等,游戏帮助和介绍表单类的实现,游戏设置类的实现,如棋盘、选手、难度等,旗子类的实现,如棋子行列位置、检查越界等,对战逻辑类的实现,如落子和悔棋、逻辑运算等的实现。
第四篇:QT基于linux的五子棋游戏设计与实现
课题名称:基于linux的五子棋游戏设计与实现
专业:计算机科学与技术(计算机工程方向)
开发工具及语言:,ubuntu12.04,QT
运行环境:linux下的QT
论文字数:1w左右
是否需要PPT:是
是否需要安装说明:是
所在城市:武汉市
所在学校:华中农业大学楚天学院
功能需求分析
系统的基本功能需求分析如下:
(1)游戏进入界面的菜单选择,有自我对战、人机对战、网络对战和退出 游戏四个选项;
(2)进入游戏之后,显示一个十三行十三列的五子棋的棋盘。棋盘旁边显 示一个菜单,菜单选项有棋局重现、继续上步、上级菜单和退出游戏,在界面上可以在棋盘落子操作和菜单操作之间进行切换,用键盘的按键来控制,棋局重现功能是在某方胜利之后才能手动操作一步步查看并回顾双方下棋的过程;继续上步可以切换回棋盘操作;上级菜单功能可以使五子棋游戏退出当前的游戏模块(自我对战、人机对战、网络对战其中的一种),回到游戏开始界面时候的菜单,进行重新选择;退出游戏是退出整个游戏界面;
(3)棋盘上显示光标,可以对光标进行移动操作,也可以在棋盘和菜单来 回切换的时候重绘和擦除;
(4)在上面棋盘将光标移动到上面对应的位置,可以落子,棋盘上将在光 标显示处出现相应的棋子,并且棋子在横纵交点处;
(5)自我对战的过程中有悔棋的功能;
(6)游戏的过程中会有提示信息,如该哪一方落子,棋盘旁边显示相应按 键对应的操作列表;
(7)可以自动判断胜负,胜利一方形成一列的五个或5个以上的棋子闪 烁数次,显示是黑方或者白方已经胜利的字样,并且停止落子的功能;
(8)能够实现三种游戏模式,自我对战、人机对战和网络对战。
非功能需求分析
非功能需求如下:
(1)在程序运行的过程中程序不能崩溃,更不能使系统出现问题,造成 灾难性的后果;
(2)希望在此项目的基础上不做改动或做很少的改动就能在其他的系统 或设备上运行;
(3)界面清晰容易看懂,方便玩家操作;
(4)游戏运行速度不能太慢,要反应及时,以免影响玩家的兴趣。
(5)程序代码必须每行都有详细注释。以上是要登记的内容。这个是例子。自己修改相关信息。一定要写的详细,开发以文档为依据。注意请把文件名换成自己的作品名,以防技术开发错误
注意事项:
第五篇:游戏手机产生
手机功能细分的因素分析
随着互联网技术的发展和生活压力的增大,越来越多的年轻人愿意呆在家里,沉迷于自己的兴趣爱好中。你可能是一个DIY爱好者,你也可能是一个文字爱好者,你或许还是一个音乐影视爱好者,甚至你可能更加偏爱游戏。
移动手机设备在现在的日常生活中越来越重要,无论是老人还是小孩子,成为人们生活中不可或缺的一部分。曾经看到一个关于现在聚会时的形容,菜品上桌时拍照传微博,等菜的时候就是在聊微信或者其他即时通讯,可是面对面的朋友却是各人玩各人的零交流。是不是这样在印证距离产生美,面对面大家只需低头玩手机么?无论是在刷网页还是聊天,你会发现手机是一刻也不能离身的。
在移动的交通工具上,你会在不经意瞥见玩手机的男性,大多数是在玩游戏,无论是益智类还是休闲类游戏,而女性多是在看视频或者听歌。休息在家时,一台电脑就可以陪伴你一天,无论是游戏、购物、电影、音乐。足不出户,你就可以知晓众生百态。人们总是说游戏人生,你是这样的么?在家你是不是也是如此沉迷游戏而不能自拔呢?
而且现在各大游戏网站都在不断的创新,为用户提供更加有趣的游戏。在手机应用App中,你会发现各大游戏推荐平台,不仅会为你节省寻找游戏的时间而且还会根据网络最热门游戏搜索排名更新排名,让你更加直接了解游戏相关资讯。特别是一些简单的页游或者手游更容易吸引游戏眼球,会迅速的吸纳游戏用户,快速的在网络上传播。现在的手机市场也在渐趋饱和的市场中寻找新的出路,譬如视频手机领域开始有了联合爱奇艺推出的100+V6视频手机,游戏手机领域据说有雷羽游戏手机的出现。
我觉得游戏手机和视频手机领域的发展是有市场的。第一,现在手机成为人们生活中必不可少的一部分,手机市场细分是消费者对手机功能细化的必然要求。第二,上班族的压力山大,游戏与音乐影音成为了大多数的选择。第三,家庭主妇一族,不愿出去逛街的时候,游戏与影音成为她们打发时间的首要选择。当然不排除其他的活动,例如我们的国粹麻将。第四,学生一族,除了繁重的学业之外,游戏与影音成为他们缓解学习压力的娱乐选择。
其实无论是哪种细分市场,手机功能细分的出现有其必然发展的趋势。但是最后的发展结果不仅看产品已有的知名度,还要看产品的市场推广是否精准,是
否能有效的引起目标消费群体的情感共鸣。如果没有精准的目标市场推广,将会造成企业成本的浪费,与此同时也会造成社会资源的浪费,最后的结果也许就是不容乐观的吧!