基于JAVA的手机小游戏开发

 摘要

中国传统的五子棋游戏是古代中国民间传统的智力棋类比赛中最主要竞技游戏项目形式之一,是指一种由两人对弈的智力策略棋盘类游戏,用黑白两色的棋子在15X15的棋盘上进行公平的竞技,里面涵盖很多技巧,棋子优先达到五颗相连的人获得胜利,主要流传在中国地区与汉字文化体系区域以及欧美各国和亚洲部分区域。内容非常简单,老少皆宜,不仅可以提高思维的灵活程度,增强人类智慧,同时富有很多生活上的哲理,还可以修身养性。自计算机实现以来,受到了许多计算机玩家的酷爱。本系统主要是以JAVA编程语言为主要开发语言,包含画布模块、棋子模块、AI模块。具体设计步骤如下:

(1)设计棋盘模型,用获取点坐标的方法进行画线操作,循环线条行成网格,添加颜色。

(2)编写监听器和指针,让摆下的棋子更加准确。

(3)构思智能人机的要求,选择权重分析方法,把人机做的更加智能。

利用JAVA在计算机电脑图形方面的编程,实现出基本的网格和棋子的类,用if语句完成判断胜负条件,在此基础上通过权重分析和设置精确的数值是影响程序中AI精准性的关键要素。

此次实验完成了比较智能的人机对战系统,还有提出很多提高精准性的方法。算法的钻研很有助于了解程序结构、增加逻辑思维、熟悉算法流程来提高电脑人机的智能程度方案。在其他人工智能方面提供了更多方法起到参考学习的作用。

 关键词B深度搜索;权重分析;人工智能

 一.绪论

  1.课题的目的和意义

计算机已经深深进入到了人们平时工作和生活的各个方面,如人工智能,大数据等等都是计算机发展的先导。但是办公之余还得娱乐,这时候出现了游戏娱乐项目,游戏软件可以在闲暇之余创造精神方面的快乐给予人们,受到了大多数青年人的追捧和热爱,当然老年人也有很多喜欢游戏的。游戏中少不了人机对战,而人工智能中最重要的研究方向是计算机博弈研究,研究人工智能为人们带来了许多重要的原理和方法,在社会领域和学士领域产生了很大的影响。国内外对博弈的研究已经较为全面。特别是,IBM的深蓝团队赢得了人机大战,其中来自中国X的徐凤雄、Murray Campbell和Joe hoane为核心。由此可见人工智能领域已经可以达到了人类世界冠军水平。“深蓝”的核心部分,是由依托于剪枝的极大树搜索技术和极小树搜索技术,而这次设计运用的权重分析的方法进行实现,使用这种方法相比其他方法更加简洁快速。

身为计算机科学与技术专业的大学生,在学校系统的学习了编程语言的同时,还不忘在课外,图书馆等场所不断丰富自己的知识,光有纸上的知识是不够的,没有实际操作,编程就很难取得进展。在空闲时间多看视频敲代码,只有自己实实在在的敲代码、写程序;自己才会真正的进步,众多编程语言中我喜欢java,他不仅是继C语言之后最便捷的编程语言,还是新手入坑最适合的编程语言。整合了我通过这个设计学到的所有技能,编写程序也会觉得非常快乐。这不仅提升了我编写程序的能力,还让我懂得了许多代码编程的知识和小技巧。

2.五子棋前景

五子棋最早可以追溯到中国古代的黑白棋,形式和围棋有诸多相似的地方,但核心玩法还是截然不同的。五子棋的起源虽然在中国,但在日本才真正得到了发展,根据日本史料记载中国古代的五子棋是先经由高丽(朝鲜),于1688年至1704年的日本元禄时代传到日本。最开始五子棋还是宫廷贵族游戏,后来流传到民间,并且迅速得到发展。

在日本明治32年通过向民间征名,最终把五子棋定为连珠,后来又对五子棋的玩法不断改良,并将19×19的棋盘改为15×15,使得游戏的节奏加快。在本世纪初期五子棋传入欧洲,以其它“短、平、快”,简单易学又富有哲理性的特型迅速征服了欧洲人。

休闲的特色是“短、平、快”,在闲暇之余提高思维的敏捷程度,对于启蒙,计算,修身养性。符合这些条件的五子棋这一棋类在中国,甚至许多其他国家发展起来。各个国家对五子棋也有不同的叫法,就像韩国因为下棋可以增加情人之间的感情交流,所以称五子棋叫“情侣棋”。而欧洲的一些国家觉得中老年人的反应和想法更加适合五子棋,所以称它为“中老年棋”。美洲人喜欢工作合作的时候下棋来放松心情,边谈合作边下棋,下棋的同时谈成合作,所以五子棋在美洲又叫做“商业棋”。

在电子游戏产业飞速深入世界各国的今天,全球市场的形成和国际设计潮流将是游戏产业发展的新方向。特别是游戏行业具有独特的融资风险防范能力和高盈利水平,使市场逐渐受到国际金融资本的关注,游戏公司在并购世界处于大势。

但由于游戏本身是一种文化产品和消费价格较高的产品,不同地区文化和消费的差异产生了游戏市场的一个特征,即消费市场的地域性。这意味着,根据消费者成长的游戏场的环境特征和生活方式的差异,不同地区的消费者可能会有很大差异。特别是网络游戏领域,由于对消费能力的严格要求,世界上真正的气候市场只有日本、北美和西欧。而游戏消费的地貌分析只能分为日本市场和欧洲市场.欧洲和日本市场目前是最开放的,市场运行最成熟的地区。而五子棋就是其中一项特别容易上手,老少皆宜,同时又是高深莫测,妙趣横生,引人入胜的棋种,我认为她是最具有发展潜力的未来棋种。五子棋除了拥有棋类共通的优点外,还有如下独有的优势特点:

1)直观易懂,群众基础好,有市场化发展潜力;

2)独有的“短、平、快”特性,非常适应当今社会的快节奏生活;

3)学棋过程轻松快乐,非常适合少儿天性,更适合用来帮助少儿综合素质提高;

4)大人、小孩都能参与,是最亲子的棋类运动项目;

5)步步都是关键,特别能提高专注力;

6)唯一不吃子的棋,行棋过程文明,符合正能量的价值观,在西方被称为“绅士棋”;

7)属于国际化项目,不仅限在东亚文化圈活跃。

 1.五子棋术语

黑方:使用黑棋的人。

白方:使用白棋的人。

胜利:对局中有一方获胜。

平局:走满棋盘但是没人胜利。

结束:有一方认输或者有人获得胜利。

阳线:棋子连成一条直线。

交叉:两排棋子垂直相交。

阴线:和阳线相互交叉的斜线,成45度角

落子:下棋一方可以向棋盘空着的位子下落棋子。

轮走方:双方轮换下棋到黑方或者白方下棋子的时候称为轮走方。

连:由横,竖,斜,同颜色棋子相连。

长连:由横竖斜3个方向4颗同色棋子相连。

五连:5个同颜色棋子在棋盘上相连。

成五:包含五连和长连,刚落子行成的5个棋子相连。

四:直的斜的相邻的棋盘位上四枚一样颜色的子在棋盘的模样。

活四:有两个点可以成5的4。

冲四:只有1个点可以成5的4。

死四:不能成五的四。

三:相邻得5个空位在横的或者歪着的线上,连续有三枚同色棋子的。

活三:再走一着可以形成活四的三。

连活三:在横线或斜线上同色棋子连成3连,而且旁边没被堵住。

跳活三:在横线或斜线上两枚棋子中间有一个空位。

眠三:再走一着可以形成冲四的三。

死三:不能成五的三。

二:俩棋子在横线上或者歪着的线上。

活二:再走一着可以形成活三的二。

连活二:同样颜色的棋子在一条线上面有两个棋子,而且左右没有障碍物。

跳活二:两枚同色棋子中间有一空位。

跳活二:三枚同色棋子中间有两个空位。

眠二:再走一着可以形成眠三的二。

死二:不能成五的二。

三三:一枚棋子落下同时形成两个3子相连,而且没有被堵住。

四四:用1个棋子成俩个4连,而且没有被堵住。

四三:一子落下同时形成一个冲四和一个活三3。

 3.手机游戏优势

目前很多人关注游戏软件行业,游戏软件本身就有不断向上的潜力,他是人们娱乐放松对美好生活不可或缺的一部分。世界上发展最快、最具影响力、最具潜力和最具活力的领域是手机游戏区域。手机游戏软件深受广大年轻人的喜爱,发达国家的大部分中老年人群也都喜欢手机游戏,因为与台式电脑相比,手机游戏不仅携带方便,使用也更加便捷。因此,手机游戏软件在很大程度上是在精神娱乐吗?第二次世界大战后,计算机技术也有很大的进步首先,晶体管取代了笨重的真空管,然后出现了大规模的集成电路和集成电路,计算机不断在在更新换代,很大程度上缩减了电脑的体积,从之前好几个篮球场大的巨型设备,到现在手掌心中一块小小的手机。在X,很多设计软件的人都会关注计算机软件市场人才是否集中。这样在业余时间,他们通常喜欢编写一款可以与自己竞争的“游戏”来锻炼自己的编程能力,还可以和人才们探讨软件的适用情况,这种“游戏”有很多模型,这种是依靠计算机软件提前的分析。这种“判断”可以与(反过来,由于不断修改和更新,“智能”很难区分高低吗?到20世纪90年代,游戏软件已经被包括黑岛和暴雪在内的世界各国使用。这两支强大的游戏制作团队发挥了巨大的领导作用,先中国也在这方面努力发展,其中中国漯河工作室起到了支柱作用,现在也不断出现像漯河工作室一样的软件先驱者在为国家奋斗,是他们引领中国走入了游戏软件是市场。

手机游戏开发的一些优势:

1)庞大的潜在用户群

在科技飞速发展的现代,手机已经成为了人们生活的必须品,就像支付,身份证,健康码等等都离不开手机,手机在全球已经拥有超过十亿的用户,而且这个数据还在不断飞速的增长中。在个个发达国家中拥有手机的人数比拥有计算机的人数还要多的多,在众多手机软件中,手机游戏软件的市场正在快速的提高,其中java手机游戏将成为手机游戏行业的标准,手机游戏的潜在市场是所有平台中最大的。

2)便携性

现在公交车上,地铁上,超市里,商场里到处都是看手机的人,付款的时候它是钱包,观看健康情况时它是健康检测仪,工作时时不时的ppt,文稿都需要手机,手机在潜移默化中已经和人们绑定了起来,更可以说手机就是现在人们生活的一部分。手机APP应用软件它带给人的是方便,是实用,不管你购物也好,还是工作,游戏都离不开手机软件开发者,有需求就会有市场。但在当今这个快节奏的社会上,所以有了台式电脑和浏览器查询,当然,想要客户满足仅仅是这种麻烦不够简洁的设备是不够的,所以程序员们想出了更加简单,功能单一的手机软件,这样就可以需要什么下什么,手机APP软件实现了一键抵达目的地的要求,而且进入了人们生活的方方面面。

3)手机软件好宣传

自从5G网络开发以来,网速变的更快了,消息往往一瞬间就能收到,对比往常的发广告传单,印刷广告牌,在电视上广播所花费的人力物力,用手机软件就可以轻松传播广告,与老式广告相比,手机软件广告价格低廉,传播范围广,图像文字清晰,而且直接点击就可以进入自己感兴趣的页面,方便商家的同时也方便了客户的使用。手机软件比老式广告更能留住客户,客户用浏览到感兴趣的软件就会长时间保存在手机里,这样也变相加强了客户的二次预览,客户也可以及时的把自己感兴趣的物品分享给更多的亲朋好友,这时的手机软件还可以当做桥梁和维护关系的纽带,这也加强了手机软件的传播力度。

4)手机游戏开发的市场

首先要考察这个市场的具体情况,2018年手机游戏市场规模1572亿元,2019年手机游戏市场规模1947亿元,充分的调研手机游戏市场后发现,手机游戏呈现逐步上升趋势,开发市场发展趋势良好,这也吸引了广大投资者。

5)游戏的文化

游戏经过几百年的发展,已经不仅仅是游戏。游戏已经加入了剧情、美术、音乐等都是游戏中展示文化的载体的一部分,行为逻辑却是游戏之所以成为游戏的媒介特殊性所在。这在一定程度上让“玩什么游戏”不单纯是一种文化消费上的选择,而且意味着一种价值秩序。

人们喜欢一个游戏,一般都是喜欢游戏中提供的虚拟影像,这些虚拟的东西有在现实的可能性。一般生活是枯燥乏味的,在空闲之余和朋友玩上一把游戏,可以安抚烦躁的心情,虽然人人之间的争执也是有的,但是更重要的是可以和朋友多交流寻找生活的乐趣,摸索与他人相处的方式,加强自己的精神。由此中华文化智慧能在价值秩序的层面上进一步丰富游戏的内涵,向全球玩家提供纾解精神生活共同困境的智慧。

文化是现象,我们现在群体那是多元化,文化也是百家争鸣、百花齐放。游戏也是我们文化的一种体现,你开发的游戏,有没有市场,就看能否抓住我们的客户人群。比如动作、冒险、休闲的文化都是不一样的,他们的文化我们都是要去研究的。

6)游戏的需求

在5G高速网络时代,随着智能手机的普及,多样的功能,可以看新闻,电视剧,还可以办公,游戏,这些都牵扯着人们的日常生活,“手机”已经成为了人们生活的一部分,大有一机在手天下我有的气势。因为手机方便携带的特性,手机游戏自然而然成了人们打发时间的最优选择。原来的台式计算机游戏能做到的事情手机基本上都能做到,打破了台式不方便携带的困境,人们现在使用手机玩游戏不仅便捷还节约时间,这就导致手机游戏市场需求非常大。

7)手机游戏的用户基数

手机游戏是全年龄都可以游玩的,小到幼儿启蒙类游戏,大到益智,解密类游戏,手机游戏涵括范围广,面向人群丰富,完全不用担心客户的数量,喜欢手机游戏的人在手机各种软件之中也是名列前茅。

8)游戏文化的不断发展

近些年手机游戏市场的蓬勃发展下,游戏文化也得到了不错的进步,程序员们也在一直尝试把中国文化加入到游戏中,这样的游戏吸引人的同时,也可以向各国展示中国文化。渐渐的人们对这些灿烂的文化表示认可,这样就可以继续推动游戏行业的进步,让手机游戏行业有更好的发展。

 二.相关技术介绍

  1.开发工具Java软件介绍

lntel(R)Core(TM)

CPU:i5-7300HQ 2.50GHz 2.50 GHz

64位操作系统,基于x64的处理器

JDK1.60

面向对象,简单,多线程,不怕入侵,可以在软件外使用是Java的优点,继c语言之后编程程序最好用的语言。它不仅可以用来开发小型设计,还可以当做大型设计的顶梁柱,而且特别适合于Intermet应用的开发。Java语言拥有了“编程成功什么地方都可以使用”的优点,大多数的程序员都非常喜爱Java编程。现在使用Java语言的用户数量在所有编程语言中是最多的,因为Java语言的兼容性,许多领域都在使用,Java已成为网络时代最重要的编程语言之一。

Java的优点:

1)简单性

Java语言是一种面向对象的语言,他也是一种简单的语言,程序员只要认识到一些里面的语言概念就是这个关键词是干什么用的,就可以编写出一个像样的程序。Java编程的软件相较于其他语言可以更小,而很多电子设备最大的局限性就是存储空间的不足,java语言优秀的改变了这个现状,他可以提供简单的类的方法还可以提供好的接口。它的状态变量和相应的方法可以封装到对象中,实现了模块化和信息的隐藏。而类则是提供了对象的原型,并且通过继承的机制,子类可以使用父类所提供的方法,以实现代码的复用。

2)健壮性

Java语言为什么安全性非常高,众所周知一般的黑客入侵都是修改地址使用指针的方法窃取电脑中的资源,而Java没有指针这个功能,这样病毒就没有了渠道入侵,电脑也就可以非常安全。

3)多线程

Java具有面向对象、与平台无关、安全、稳定和多线程等优良特性,是目前软件设计中优秀的编程语言。它拥有多个线程导致他在其他应用中都可以运行,相当于一个万能的钥匙,不管程序大小它都可以编写。Java确实具备了“一旦写成处处可用”的特点,这也是Java最初风靡全球的主要原因。Java是一门正在被广泛使用的编程语言,而且许多新的技术领域都涉及了Java语言,Java已成为网络时代最重要的编程语言之一。

4)自动内存管理

(1).运行时数据区域

Java可以把空间分成很多块,这样的模式就可以同时处理很多的数据,使效率变得很高。每个区域都有自己被需要的地方,他们创建和删除都有时间控制,有的区域随着虚拟机进程的启动而存在,用户的操作可以启动或者删除,这样被影响的进程也会跟着用户操作被创建或者摧毁。

(2).程序计数器

程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是痛过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖这个计数器来完成。

(3).java虚拟机栈

java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是java方法执行的内存模型:每个方法在执行时间的同时会创建一个栈桢(Stack Frame)用于存储局部变量表,操作数栈,动态链接,方法出口等信息。

局部变量表存放了编译期可知的各种基本数据类型(boolean,byte,char,short,int,float,long,double)、对象引用。其中64位长度的long和double类型的数据会占2个局部变量空间(Slot)。

(4).本地方法栈

本地方法栈(Native Method Stack)与虚拟机栈所发挥的作用是非常相似的。

(5).java堆

 1.需求分析和总体设计

这次程序设计面向的是全年龄阶段的人,考虑到客户比较全面,所以这次程序的操作必须简单,界面必须整洁。提供人机大战模式,因为是在手机上运行,手机在硬件上不占优势,因此在在编写程序时在代码上优化用来缩减程序的运行速度,人机大战用权重分析设置精确的数字来确保人机的智能程度。此外,多了解棋类游戏用户的想法写进功能分析里得出以下信息:

1)开始新游戏的功能。

2)创建非常智能的人机。

3)创建友好的帮助提醒栏。

4)标记人机下子的位置,好让用户知道人机最后的落子位置。

5)退出游戏功能

6)具有判断胜负的功能

总体设计方面需要:

1)棋盘和棋子绘制。

2)设置五子棋输赢的条件。

3)设置监控器和指针器,来实现鼠标在空位点击成功,则落下一枚棋子。

4)游戏结束后,使用开始新游戏的按钮。

5)设置两种棋子分别是两种颜色,设置双色为黑白,人用黑色的棋子,人机用白色的,通过黑先白后的方式来进行对局

6)通过棋子完成五连珠结束游戏

e36a99f375b6978254269789ce664f4a  如图2.1程序基本结构图所示:

图2.1程序基本结构图

  2.系统主要流程

如下图2.2系统主要流程图所示:

db5e4574ee25fcfde2a47392f3721e97  图2.2系统主要流程图

 2.人工智能

人工智能是计算机科学的⼀个分⽀,是研究、开发⽤于模拟、延伸和扩展⼈的智能的理论、⽅法、技术及应⽤系统的⼀门新的综合性的技术科学。

在人工智能方面,一般有极大极小树、剪枝、深度优先搜索和权重计算这些方法。目前绝大部分的博弈类游戏中的人工算法都采用极大极小树这种方法,极⼩极⼤算法是考虑双⽅对弈若⼲步之后,从可能的⾛法中选⼀步相对好的来⾛。若最⼤(MAX)节点为⼰⽅下的棋,此时选择估值最⼤的点⾛。最⼩(MIN)节点为对⽅下的棋,此时选择估值最⼩的点⾏⾛。因此MIN节点的⽗节点(MAX节点)所赋的倒推值等于端节点估值中的最⼤值。另⼀⽅⾯,MAX节点的⽗节点(MIN节点)所赋的倒推值等于端节点估值中的最⼩值。这样⼀级⼀级地计算倒推值,直⾄起始节点的后继节点也被赋以倒推值为⽌,即从下往上逐层交替使⽤极⼩极⼤的选值⽅法。但当搜索深度增加时,搜索节点快速⼤幅增加,时间和内存空间消耗太⼤,且利⽤先前信息的效率较低。于是⼈们在极⼩极⼤的基础上提出了alpha-beta;剪枝技术。

深度优先搜索与广度优先搜索的区别在于下一个节点的选择。DFS先选择好节点,如果下个节点不存在或者都已经遍历过了,就向上返回到上一个节点,在遍其他的未被访问过的点。很容易想到这要用到堆栈结构,使用一个递归来实现。而BFS则是逐个的遍历它的联接接点,将已经访问过的点放入队列中。然后再依次取出继续这个过程。

不必要的节点可以被Alpha—Beta剪枝去除,并且去除了这些节点也不会影响结果。

这次设计最主要运用了权重计算。

权重计算是反映某一指标在指标体系中所起作用的大小,针对指标权重的计算方法有很多种。

权重的精细程度有以下可能存在的错误:

1)权重人机对个个分数的高低优先级排序,人机对分数的划分。

2)每个阵型的分数的不同影响到人机的判断。

3)各分数的可靠程度不同,反映了各条件所提供的信息的可靠度不同。

在上面的原因下,我们要编写程序可以用以下方法:

1)由决策者的经验判断合理地给出每个方案(或指标)的权数,一般采用主观赋值,比如AHP层次分析法。

2)由评价中各指标传递的信息量大小决定指标权重,比如熵值法。

3)依靠指标评价值的客观程度与可靠程度反映权重,比如灰色关联分析等。

上述第一种属于主观赋权,而后两种属于客观赋权主观赋值多采用定性方法确定权重:常见的方法有专家咨询法(Delphi法)、AHP法、评级打分法等,其中AHP方法使用较为常见。

客观赋值是通过数学量化指标间的关系或离散程度来确定权重,常见的方法有:熵值法、主成分分析、灰色关联、模糊综合评价法、因子分析法、TOPSIS法等。

人工智能在依靠分数的高低给出最佳的答案。

 3.Android简介

Android是一个采用了Linux系统内核开发的手机操作系统,为由Google公司于在二零零七年十一月五日正式发布的开源手机操作系统,早期是为Google公司研发,后来是为开源手持移动设备开发者联盟(Open HandsetAlliance)研发。Android手机操作系统具备高度开放性、应用程序无边界、应用和程式之间是完全以完全平等共享的技术条件而建立起来的、应用和程式之间能够很简单方便地互相嵌入到互联网上以及多个应用和程式之间能够实现并行的操作等等优点。Android系统的操作系统底层框架总共只包括了四个层,从由高至中低档依次分别为系统应用层、软件框架层、操作系统运行库框架层以及linux操作系统核心底层。

从互联网科技视角上来看,Android手机和苹果iphone手机类似,使用了Webkit的网页引擎,拥有多点触摸屏、高级的图像显示功能和无线上网等功能,使用者还可以直接从手机网页上进行查收电子邮件、查找地址信息和在线欣赏音乐视频节目等等。Android的性能是非常强大的,它不仅比其他手机编程软件更快捷,还非常的简单时候初学者使用,链接wed平台很多功能有了显著的提升像搜索功能,布局变的更加简洁。经过版本的改进,从原来的触屏到现在的一点接触,从一般的联系人到现在的数据信息同步,从单纯的google map到现在的导航系统,从基本的页面浏览器到现在的HTML5,这都表明Android开始逐步稳固,而且功能越发强劲。另外Android的平台上不但能支援诸如Java、C、C++等这些最主要流行的编程语言,还能支援诸如ruby、python等这些脚本语言,而且由于google也针对基于Android平台的应用发布了simple语言,这也导致了Android平台拥有了相当的广泛的开发者群。

Android应用程序以下列四种功能模块所构建集而成:Activity,Intent,Content和Provider,Service。这些模块就像积木一样任由开发人员组合,不同的组合不同的效果,当然有更好的选择也可以使用其他的模块。但任何一个应用程序模块均只需要从一个AndroidManfest.xml的文档中声明其所要用得到的所有模块。

安卓为不断的完善用户的体验和改善开发人员的开发效率,一直不停的在推出新的版本,早期下载安卓环境需要下载很多组件并且配置很多的参数,但随着版本的不断升级,这些环境和参数都包含在了软件里面的开发工具,想要使用安卓就可以直接去官网下载开发工具包,只用少量的配置就可以搭建起开发环境。

Android使用一个名为Intent的特殊类在活动之间切换。Intent类用于描述应用程序的功能。在意图的描述结构中,有两个最重要的部分:动作和对应于动作的数据。典型的动作类型有MAIN、VIEW、PICK、EDIT等,对应于动作的数据表示为URI。

程序的运行最重要的就是其中的数据,平时启动的情况下优先的一般都是SQL数据库,Android却不是这个样子的。安卓使用的是一个程序一条进程的路线,这样非常方便的同时也出现了一些弊端,就像安卓内的两个程序相互访问这就非常困难了,因为就是要数据在虚拟机中不断是链接发送,这种情况没有能力去打开其他的程序,这种情况都是选用ContentProvider来使用各个包里面的共享方法的。

Startservice()方法是用来开启一个音乐播放器,程序运行的同时可以保证音乐一直在播放状态,直到程序运行为止。bindservice()方法连接到一个服务(如果服务当前没有启动,它将被启动)。在连接到另一个端口服务之后,您还必须使用该服务提供的端口来继续与它通信。以多媒体播放器为例,我们甚至可以选择执行停止、回放等操作。由于它是一个服务,Service服务将是一个具有长生命周期且没有用户界面的程序。对于一个正在从播放列表中播放歌曲的媒体播放器,媒体播放器应用程序中应该有多个活动,以便用户可以选择和播放歌曲。但是音乐播放功能没有相应的活动,不一定选就就是需要的Service,但是就算没有选中他也会因为程序选择继续运转,所以用户在导航到其他屏幕时,会认为音乐应该还在播放。

 三.系统设计

  1.总体设计

该设计是使用的是JAVA语言,在eclipse软件下开发。本设计略过欢迎界面直接进入软件主界面。系统的总体模型如图3.1主界面图所示:

图3.1主界面图

6cfb876772a98a97261fa2baf3e24d86  这个程序分为以下几个部分:画布部分、主控制部分、胜负部分、落子部分、人工智能部分、窗体部分、指示器部分、监听器部分。系统总体设计模型。

如下图3.2程序构建结构图所示:

图3.2程序构建结构图

786f330d3f8287f873650e37ce02ba7c  2.模型建立

五子棋分为两人执子,两方棋子颜色不同,通常是用黑白来说双方棋子颜色,五子棋的胜利条件是只要在网格内行成5颗棋子同方向链接就为胜利,通常就是从左往右一条线,从上到下,从右上到左下,从左上到右下。

首先建立的是画布类也就是棋盘,本设计依照传统五子棋棋盘15×15的大小进行编程。

设置两个坐标点,以两个点相连来画出一条线,向下循环15次画出15条横向的线每条线间隔40,在已中心点进行90度的旋转,棋盘网格就建立好了。然后在中心、左上、左下、右上、右下五个点。

棋子就是图片png格式,通过JAVA的图像系统成功导入,加以代码带入程序进行运行。

3.控制模块设计

控制模块的设计涵盖了很多模块其中包含有:运行的主要逻辑,查看所有空位的监听器,输赢进行判别。主要逻辑循环,当一人下完棋子没有胜利转换到下一个,给AI类发送运行的指令,根据AI类的设置开始运行。

在AI类中我设定好了判断输赢的条件,循环判断是否符合条件,符合条件的时候做出判断。

人类或者电脑点击下棋子之后传入电脑中,程序在进行分析,排除以下棋子的方格子和棋盘的边缘,电脑根据权重计算方法选择最合适的落子位置。

4.人工智能的设计

本程序的智能人机用权重分析的方法来计算分数最高的地方下棋子,在分数精细化的管理下,人机能够智能的堵截玩家棋子,以胜利为目的排列自己的棋子。

人机操作的流程:首先玩家点击开始进入游戏主界面,在空位上下第一枚棋子,人机开始进行循环判断,根据现有棋子的连对个数判断优先级,3个棋子一行的优先,其次就是把2个棋子或是左开,右开,中间少一个,优先补成3子相连。循环判断所有空位,查看自己所有棋子能否成为5子相连,根据权重分析法依次检测,优先看能否5枚棋子链接,如能救直接落子获得胜利。如不能就继续向下循环,在看能否连成4枚棋子,3枚……依次递减直到所有已经已经没有空位。没有已方棋子则选择随机落棋子。在人机搜索完会优先堵截人类方棋子的相连,自己成5子是优先级最高的,其次是堵住人类方5子和4子,然后是自己成4子和3子。我在第4章将完全介绍程序人机的智能是如何实现的,并且画出了流程图。

 四.系统实现

  1.细化设计描述

打开程序直接进入游戏界面,鼠标开始显示检测器说明软件运行正常,游戏上方有菜单栏和帮助栏可以选择新游戏或、退出、帮助。游戏可以用电脑鼠标或者手机触屏进行移动。游戏的画图界面的GamePanel类图如图4.1指示器图所示:

图4.1指示器图

dc80551d74ea76ab3fc5821f78a2839e  一个软件最重要的就是门面,此次软件的画布类和网格都是用横纵坐标轴为点,连接两个点就出现一条线,向下循环就可以出现15条线,在把这15条线进行90度的旋转,一个网格就做好了。然后在Pointer类里面详细设置坐标,方便GamePanel调用,在Qizi中设置棋子,在设置游戏菜单栏下滑选取框,选择字体添加选择项基本的构图和选项就做好了。

点击开始游戏,进入初始化界面,按下滑窗口开始新的游戏,系统会清除现在棋盘上所有的棋子,表示可以开始新的游戏,这时是玩家先出手下第一枚棋子。当然光画好图还不能正常运作,这时就要在棋盘上添加监听器和指示器,监听器负责获取鼠标位置,就是获取人操作的位置,获取到操作位置后在进行反馈,就像你下的地方已经有棋子了或者此处为空可以下棋子,在设置指示器,指示器就是显示空位可以下子的标识符,他要设置的醒目,让人一眼就知道此处空位可以下子。然后开始下棋子,人类玩家下棋子,由于当代电话都是智能电话采用的触屏式的接触方式,人类玩家通过智能电话触摸下棋子,这时就由做好的监视器来控制棋子的下路地点,不然可能出现下的棋子偏移到网格的格子上面,然后判断此处是否有棋子在棋盘上,如果有只能寻找其他地方进行落子,没有指示器会提示可以落子的方框,鼠标左键点击或者手机进行触屏操作就可以进行落子。进行落子以后判断是否5个同颜色的棋子相连,如果是5个相同棋子相连则判此颜色方胜利,如果没有则继续游戏,人类玩家下子后,人机开始落子,查看玩家颜色有没有4子相连,如果有优先看4子旁边有没有空位,没有空位就继续循环去看3子相连,看完3子继续运行堵住玩家2子,看自己是否有可以相连的同色棋子,优先棋子连数多的进行续连,争取比人类玩家优先5子连起来。人机下棋子后在判定场上是否有5个棋子连结,如有,跳出窗口恭喜您获得了胜利。其主要的流程图为图4.2胜利判断流程图所示:

图4.2胜利判断流程图

e0d165a7ec1982d56797f5a17676055a  2.玩家类

这次设计的程序由三个主要的类组成,其中包括GamePanel类:他主要实现了棋盘线条的制作,画布的颜色,以及指示器的选择,还有棋盘中心和4边的点。

Pointer类:是导入黑白两色棋子,一些量的get、set方法,以及确定GamePanel类坐标的类。AI类:AI类是创建人机对战的关键,首先判断棋子旁边是否有空位,如果有在已权重分析的方法判别那边分数高,然后下到分数高的一边。同时AI类还写了判断是否已经5子连珠,从4个方向判断横、竖、左斜、右斜,如果同时棋子成五子连珠状便判断颜色方胜利,如果没成就循环下次落子后继续判断,直到一方胜利为止。

 3.算法思想

算法上画布类与木质棋盘相近的颜色,然后是上面窗体类设置游戏和帮助两个下拉栏,游戏包括新游戏:开始新游戏。退出:结束游戏。帮助包括操作说明:鼠标在指示器位置点下,则落子!成功/胜负判定:五子连珠方胜利。如下面代码所示:

private void initMenu(){

//创建菜单及菜单选项

jmb=new JMenuBar();

JMenu jm1=new JMenu(“游戏”);

jm1.setFont(new Font(“宋体”,Font.BOLD,18));//设置菜单显示的字体

JMenu jm2=new JMenu(“帮助”);

jm2.setFont(new Font(“宋体”,Font.BOLD,18));//设置菜单显示的字体

JMenuItem jmi1=new JMenuItem(“开始新游戏”);

JMenuItem jmi2=new JMenuItem(“退出”);

jmi1.setFont(new Font(“宋体”,Font.BOLD,18));

jmi2.setFont(new Font(“宋体”,Font.BOLD,18));

JMenuItem jmi3=new JMenuItem(“操作说明”);

jmi3.setFont(new Font(“宋体”,Font.BOLD,18));

JMenuItem jmi4=new JMenuItem(“成功/失败判定”);

jmi4.setFont(new Font(“宋体”,Font.BOLD,18));

jm1.add(jmi1);

jm1.add(jmi2);

jm2.add(jmi3);

jm2.add(jmi4);

jmb.add(jm1);

jmb.add(jm2);

mainFrame.setJMenuBar(jmb);//菜单Bar放到JFrame上

jmi1.addActionListener(this);

jmi1.setActionCommand(“Restart”);

jmi2.addActionListener(this);

jmi2.setActionCommand(“Exit”);

jmi3.addActionListener(this);

jmi3.setActionCommand(“help”);

jmi4.addActionListener(this);

jmi4.setActionCommand(“lost”);}

网格类采用横纵坐标的方式,确定点X1,Y1,X2,Y2.在长宽ROWS,COLS设定每格距离40来画一条直线在for循环画好横向的15条线,然后相同手法变换轴坐标来完成15×15的方格。还加入了中心点和对应四个角的棋盘内的四个点,共5个点。让玩家可以识别中心和4边。如下代码所示:

Override

public void paint(Graphics g){

super.paint(g);

//绘制网格

drawGrid(g);

//绘制5个黑点

draw5Point(g);

Qizi qizi=null;

for(int i=0;i<qizis.size();i++){

qizi=(Qizi)qizis.get(i);

qizi.draw(g);}

Pointer pointer=null;

for(int i=0;i<ROWS;i++){

for(int j=0;j<COLS;j++){

pointer=points<i>[j];

if(pointer!=null){

pointer.draw(g);}}}}

指示器类包括创建鼠标监听、创建指示器类、创建指示器数组、绘制指示器、处理指示逻辑、修改显示样式。用横纵坐标的方式设计指示器样式,指示器为棋盘中每个交叉的点都创建一个指示器的对象,当鼠标移动到棋盘网格交叉的点,可以落子的地方,就会有框体标识,来提醒玩家这里可以落子。如下代码所示:

Override

public void mouseMoved(MouseEvent e){

//鼠标移入对应的格子后显示指针

if(!”start”.equals(gameFlag))

return;

int x=e.getX();

int y=e.getY();

Pointer pointer;

for(int i=0;i&lt;ROWS;i++){

for(int j=0;j&lt;COLS;j++){

pointer=points<i>[j];

if(pointer==null)

continue;

//被选中,且没有棋子,则显示指示器

if(pointer.isPoint(x,y)&&pointer.getQizi()==0){

pointer.setShow(true);}else{pointer.setShow(false);}}}

棋子类包括初始化图片、棋子类的实现、实现鼠标点击事件、实现落子、其他细节处理。首先把准备好的黑白棋子图片以.png的格式放入新创建images包中。

在指示器范围内点击鼠标进行落子操作。

Ai类实现的功能包括,电脑随机落子、最后一个电脑落子标记、权重分设计、4个方向(横向、竖向、右斜、左斜)计算,五子情况处理。首先用创建好的棋子类,把棋子添加到集合中。给指示器设置类型,然后获取指示器的位置,根据位置来进行落子,如果当前格子已经下了棋子或已经到棋盘线最边缘,则递归重新取,如果没有棋子,则落子。判断是否五子连珠,若达到五子就可以直接判断输赢,没有五子连珠就继续等待对方落子这样循环知道有人达到五子相连为止。调用方法GetRandomPointer来实现随机落子。

然后设计棋子的权重分设计,权重分设计就是计算出分数,最高的分数来决定下一步的落子。根据3子的定律,普通落子会发生三种情况:

左开:目前对方有两个子,下一个子可以落子到左边的空位上。如图4.3左开情况所示:

257d5788950a785f0fda7aa41a89f8a7  图4.3左开情况图

右开:目前对方有两个子,下一个子可以落子到右边的空位上。如图4.4右开情况图所示:

93871412d71acc9f589f73daa0b31b49  图4.4右开情况图

中间:3个子只能落在中间。如图4.5中空图所示:

d5707c559b4ef1217760e43c30a306cc  图4.5中空图

只计算3个子以上的分数。3子左开情况下分数32,4子左开情况下42,5子左开52,权重分优先级是5&gt;4&gt;3,左&gt;右&gt;中。如图4.1权重分析分数表所示:

c23e4478b0a6404f485745ca16861c40

权重分设计代码思路,首先循环指示器,循环4个方向,分别计算从左往右、从右往左,并将返回的结果放到集合中(有效的才放),对权重分进行排序处理,把最大的排序到最前面,取第一个元素作为落子的地方,并返回true。

4个方向(横向、竖向、右斜、左斜)计算。横向如图4.6五子相连图所示:

3512c635a70598703c1943a72af19aad

1)从左到右

(1)横向下标i是一样的,循环从当前位置j加1开始。

(2)当碰到和当前子一样的就计数器+1。

(3)当碰到不一样的就退出循环,表示堵住。

(4)如果碰到空子,是第一次计数器+1,第二次退出循环。

(5)判断左开和右开的状态。

(6)根据计数器和左右开的状态,计算出分数横向。

2)从右往左

(1)横向下标j是一样的,循环从当前位置i加1开始。

(2)当碰到和当前子一样的就计数器+1。

(3)当碰到不一样的就退出循环,表示堵住。

(4)如果碰到空子,是第一次计数器+1,第二次退出循环。

(5)判断左开和右开的状态。

(6)根据计数器和左右开的状态,计算出分数横向。

竖向、右斜、左斜同理。

五子连珠的设计思路,五子的情况下,如果五子则设定分数为100。

 4.实现效果

1)系统测试概述

系统测试分为:黑盒测试和白盒测试,其中黑盒测试是指:(1)等价类划分。(2)边界值分析。(3)因果图分析法。(4)错误推断法等。黑盒测试可以看作是一个透明的盒子,黑盒测试不响应盒子里面的逻辑结构和程序的运行,只根据规格书来进行测试,直接检验结果的正确与否。白盒测试:(1)一个模块中的所有独立路径至少被测试一次。(2)所有逻辑值均需测试true和false两种情况。(3)检査程序的内部数据结构,保证其结构的有效性。(4)在取值的上、下边界及可操作范围内运行所有循环。白盒测试和黑盒测试正好相反,把要测试的程序看成一个透明盒子,测试时观看程序内部逻辑和搭建相关的信息,检测里面每一项能否走通按照正常的程序工作。两者不同的地方在一个是直接看代码的逻辑是否正确,另一个只看能否实现成功,功能完好。测试用例设计工作的关键是对可行的和不可行的都要考虑。

首要考虑:输入、详细的操作步骤、预期输出、实际输出。

性能测试通俗来讲就是说查看程序是否在满足工程师预想,实现程序该有的功能,不仅要检测软件是否达到要求,还要检测硬件性能足够吗,主要看程序反应的速度快慢,程序的流量吞吐正常,程序需要占用多大的内存,下棋子是否准确。在检测中发现缺陷(BUG),一般系统就会记录下错误语句的检测数据的时间、系统配置的环境、获取的硬件环境、损坏程度、版本是否合适、方法技术、漏洞描述、应该如何去操作,会不会重复出现。如何去解决这个缺陷呢,首先查到代码错误位置,然后找到标红语句,看语句和其他那些语句有关联,是否缺少元素,还是语句错误找到并解决错误。测试是一件非常有挑战性而且锻炼人的事情,每个BUG的出现都能熟练我的技术,所以BUG的出现我还是很开心,就这样的出BUG找BUG修BUG中我的能力也在逐步提升。我可以很容易的找到一些细节问题。软件测试最好每做好一个功能,就测试一下是否可以正常运行,这样就不会发生出错后找不到错误在哪里的尴尬情况,只要勤于测试基本都不会出太大的错误,从哪里跌倒就快速的在哪里起来。

2)系统测试

测试系统是否可以正常运行,进入系统开始游戏,有鼠标显示,棋盘初始化,棋盘空位上出现可以下子的标识符,鼠标右键下子,人机是否拦截,落子能否下到棋盘之外或者重复下子到其他棋子上,5子相连判断输赢。

 五.总结与展望

五子棋游戏是一款简单的益智类游戏,现实生活中也常常看到五子棋的身影,五子棋还举办了很多大型比赛。自从2007年11月以来android手机操作系统进入了人们的视野,android操作系统表现出容易编写,拖动模块快速出代码,图形页面和java程序极易链接。做到了更方便为手机用户编写软件,收获了广大用户和程序员的喜爱。本程序提供人机一种模式,为了让人机更加智能特地引用了权重分析的想法,实现人机博弈的功能。

设计软件之初,为了能和其他同类型软件相比简洁,操作简单,适合全年龄阶段的人。编写之初也想过用其他的方法来实现程序,但是因为自身技术有限这次的设计没有做到最好,希望以后可以不断的去完善本程序,运用更多的方法,进行完善。

但由于游戏本身是文化商品和消费品价格较高的产品,不同地区文化和消费的差异产生了游戏市场的一个特征,即消费市场的地域性。这意味着,根据游戏场的环境特征和消费者成长的生活方式,不同地区的消费者可能会有很大差异。特别是在电子游戏领域,由于对消费能力的严格要求,世界上真正的气候市场只有日本、北美和西欧。游戏消费的地貌分析只能分为日本市场和欧洲市场.欧洲和日本市场目前是最开放和最成熟的运营。

在电子游戏产业飞速深入世界各国的今天,全球市场的形成和国际设计潮流将是游戏产业发展的新方向。特别是游戏行业具有独特的融资风险防范能力和高盈利水平,使市场逐渐受到国际金融资本的关注,游戏公司在并购世界处于大势。

但由于游戏本身是一种文化产品和消费价格较高的产品,不同地区文化和消费的差异产生了游戏市场的一个特征,即消费市场的地域性。这意味着,根据消费者成长的游戏场的环境特征和生活方式的差异,不同地区的消费者可能会有很大差异。特别是网络游戏领域,由于对消费能力的严格要求,世界上真正的气候市场只有日本、北美和西欧。而游戏消费的地貌分析只能分为日本市场和欧洲市场.欧洲和日本市场目前是最开放的,市场运行最成熟的地区。

接下来我会不断学习各种语言和编程方法,在手机游戏兴起的时代,多加了解关注,相信我以后的软件可以做到更好。

 参考文献

[1].张跃平,耿祥义.java2实用教程[M].清华大学出版社,2017.

[2].孙宏伟,何丰泉.五子连珠棋初步[M].哈尔滨黑龙江科技出版社,2010.

[3].马少平.工智能[M].清华大学出版社,2011.

[4].蔡自兴,徐光.人工智能及其应用[M].第三版清华大学出版社,2010.

[5].朱全民等.博弈机器人系统的设计及关键技术研究[M].2012.

[6].耿祥义.Java课程设计[M].清华大学出版社,2009.

[7].耿祥义,张跃平.Java面向对象程序设计[M].清华大学出版社,2010.

[8].朱福喜,唐晓军.Java程序设计技巧与开发实例[M].人民邮电出版社,2010.

[9].(美)Bruce Eckel著,陈昊鹏译.Java编程思想[M].第四版机械工业出版社,2009.

[10].飞思科技产品研发中心.Java2应用开发指南[M].第二版电子工业出版社.

基于JAVA的手机小游戏开发

基于JAVA的手机小游戏开发

价格 ¥9.90 发布时间 2024年4月5日
已付费?登录刷新
下载提示:

1、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“文章版权申述”(推荐),也可以打举报电话:18735597641(电话支持时间:9:00-18:30)。

2、网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。

3、本站所有内容均由合作方或网友投稿,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务。

原创文章,作者:1158,如若转载,请注明出处:https://www.447766.cn/chachong/208442.html,

Like (0)
1158的头像1158编辑
Previous 2024年4月5日
Next 2024年4月5日

相关推荐

My title page contents