《五子棋游戏的设计与实现.doc》由会员分享,可在线阅读,更多相关《五子棋游戏的设计与实现.doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、北京信息科技大学毕 业 设 计(论 文)摘要 摘 要随着经济的发展,社会竞争的激烈,现在社会进入了竞争的时代。上班族为了完成公司业务,每天超负荷的工作;学生为了不落后他人每天早起晚睡不断地学习,压力巨大。所以为了缓解大家的压力,使大家在工作、学习之余娱乐一下,活跃大脑,提高工作、学习效率,我本人设计了一个简易的五子棋游戏。本系统将利用五子棋游戏作为研究对象,在Windows平台下,运用java语言设计的一个能够实现人机对战的简单游戏。该系统涉及到人工智能方面的知识,而计算机博弈是人工智能研究的一个重要分支,其中还包括几个重要的搜索算法。只有通过一定的研究,才能实现五子棋的人机对战功能。关键词:
2、人工智能; 计算机博弈 ; 搜索算法 ; 五子棋; AbstractAbstract With development of economy, social competition is intense, now society has entered into the competition era. Office worker in order to complete the company business, overworked every day; For catching up with others, the student rises early, sleeps late an
3、d studies hard. The pressure builds up. So in order to alleviate the pressure, make everyone all over the job, study entertained, active brain, improve work, learning efficiency, I design a simple renju.This system will take the object of study using the renju, designs one to be able to realize the
4、man-machine under the Windows platform with Java language to the simple game which fights.The system involves knowledge of artificial intelligence, and the computer game is one of the important research on artificial intelligence branch, including several important search algorithm. Only through cer
5、tain research, can realize renju against function Man-machine. Keywords: artificial intelligence ; computer game ; search algorithm ;renju ; 目录目录摘 要IAbstractII第一章 概述11.1 开发背景11.2 课题意义11.3 五子棋的发展与现状21.4 研究内容4第二章 五子棋程序的介绍52.1 五子棋程序的基本功能52.2 开发运行环境52.3 软件开发工具及开发语言介绍52.4 五子棋程序功能的设计7第三章 五子棋的总体设计83.1 人机界面
6、的实现及鼠标事件的监听83.2 按钮功能的实现113.3 棋子表示123.4 下棋表示13第四章 五子棋的AI算法154.1 电脑智能搜索154.2 电脑胜负的判断16第五章 五子棋软件测试185.1 软件测试的定义185.2 界面测试185.3 数据的测试225.4 用户验收测试22结束语23参考文献25 五子棋游戏的设计与实现第一章 概述本章主要介绍毕业设计的开发背景、课题意义,有关计算机人工智能方面的知识以及五子棋的发展与现状,以及毕业设计的研究内容、方向。 1.1 开发背景随着计算机技术和互联网的飞速发展,游戏软件是当今世界发展最迅速,最有影响力,最有潜力与活力的领域之一电脑游戏的出现
7、为人们提供了新的娱乐平台,丰富了人们的业余生活。因此与游戏有关的软件深受广大青少年的喜爱。随着近几年来软件技术的不断进步、不断发展,软件游戏的操作要求越来越简单,大多数游戏普通人学几分钟就能会玩,甚至连老年人也慢慢爱上了它。第二次世界大战以后,电子计算机技术得到了突飞猛进的发展在众多国家中美国的计算机技术发展最为迅速。1946年2月,世界上第一台电子数字计算机(ENIAC)在美国宾夕法尼亚大学建造完成。ENIAC机的问世,表明了电子数字计算机时代的到来,具有划时代的伟大意义,是科学技术发展史上的重大里程碑。我国也不落后,在1956年研制成功国产计算机的。1958年和1959年我国先后自主研制成
8、功国产小型和大型电子管计算机。后来出现了集成电路和大规模集成电路,使电子子计算机一代一代实现更新,性能越来越高,计算速度越来越快,硬件方面的不断发展促使了软件技术也迅速发展。在美国,集中了许多计算机软件的设计人才,他们工作之余,时常喜爱编一种能与人斗智的“游戏”,以此来锻炼编程的能力这种“游戏”花样繁多,但其特点都是利用计算机软件事先设计好的“分析”“判断”能力反过来与人较量由于不断修改更新,使计算机的“智力”水平与人难分高低到了90年代,游戏软件已经为世界各国的人使用,所谓游戏软件通常是指用各种程序和动画效果相结合起来的软件产品,我们称之为游戏软件。目前,在网络上我们经常看到的大型3D网络游
9、戏和WEBGAME网页游戏等都是通过用3DMAX、MAYA、FLASH、等动画软件和JAVA、C+、VB、等程序语言相结合而开发出来的,所以叫游戏软件。其中BLACKISLAND和Blizzard.这两个强大的游戏制作组对游戏软件的发展起到了巨大的带动作用,还有中国的洛河工作室在国内也起到了巨大作用,他们让很多很多人喜欢上了游戏软件,打开了这个市场。如今游戏软件产业已经受到了广泛的关注,它年轻有潜力而且吸引人,让人们日益丰富的生活需求得以满足。而五子棋游戏的诞生更是吸引着不同年龄段的人群,无论男女老少都可以玩,都喜欢玩,而当前微型计算机已经是在广大人群中流行着,用电脑来下五子棋更是一种时尚。现
10、在网络上出现了各种各样的五子棋软件,有大师级的、新手级的等等。所有这些都满足了不同人群的需要,所以当前五子棋越来越被许多人所熟悉。目前的五子棋程序的发展也非常快,从最初的双人发展到人机(有AI),然后到现在的网络对战,已经受到越来越多人的喜爱和重视。1.2 课题意义人类社会经历了五千多年的农业文明时代,又经历了三百多年的工业文明时代。经过漫长时间的发展,人类文明取得的不可想象的进步,人也变的越来越聪明了。人类之所以变得聪明,是因为我们人类一直不断地再实践中思考,在思考中实践。五子棋不仅能增强思维能力,提高记忆力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典
11、哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。五子棋游戏不但容易上手,而且它区别于别的游戏,它不但能使人娱乐,而且能使人的头脑变得更加聪明。而五子棋对战有两种模式:一.人机对战;二.双人对战。这些给人无限乐趣的用途正是人工智能的杰作。正因为这样它鼓励着人们对它不断研究,这在很大程度上促进了人工智能的发展,反过来人工智能的理论和技术上的突破能够使五子棋程序更完美、更受欢迎!同时,五子棋游戏程序的开发也使得五子棋这
12、个游戏得到了广泛的推广,让世界各地的人们知道五子棋,随时地玩上五子棋,这已经不再是梦想了。五子棋游戏程序使得越来越多的人喜欢上了五子棋,热爱下五子棋,它是具有很好的带动性的。随着互联网络的不断普及,越来越多的人可以在网络上就能够与他人下五子棋了。1.3 人工智能介绍人类的自然智能伴随着人类活动时时处处都存在。人类的许多活动,如解题、下猜谜、讨论、编制计划和编程,甚至驾车、骑车等,都需要智能。如果机器能够完成这些任务,那么就可以认为机器已经具有某种程度的“人工智能”。正因为这样积累了很多与人工智能有关的知识。在一次历史性的聚会中人工智能诞生了。为使计算机变得更“聪明”,或者说是计算机具有智能,1
13、965年夏季,在美国达特莫斯大学举行了一次为期两个月的夏季学术研讨会。10位来自美国数学、神经学、心理学、信息科学和计算机科学方面的杰出年轻科学家,在一起共同学习和探讨了用机器模拟人类智能的有关问题,并且麦卡锡提议正式采用了“人工智能AI(Artificial Intelligence)”这一术语。从而,一个以研究如何用机器来模拟人类智能的新兴学科-人工智能诞生了。人工智能(Artificial Intelligence) ,英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一
14、种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能的发展给五子棋赋予了新的生命。随着对人工智能的不断研究,计算机博弈也得到了飞速发展。机器博弈被认为是人工智能领域最具挑战性的研究方向之一。国际象棋的计算机博弈已经有了很长的历史,并且经历了一场波澜壮阔的搏杀,深蓝计算机的胜利也给人类留下了难以忘怀的记忆。经过30多年的研究,人工智能在现实生活中得到了不少瞩目的成果,而这些成果已经建立了一些具有一定“智能”的AI系统,例如专家系统、定理证明系统、集成电路设计与分析系统、自然语言翻译系统、智能信息检索系统、疾病诊断系统等。除
15、了这重要的成果之外,还有大受人们欢迎的“智能系统”,比如现在在网络上出现的网络游戏、围棋、象棋、五子棋游戏程序等等,这些都是人工智能的成果,它们极大地改变了人们的生活、给人类带来了快乐。1.4 五子棋的发展与现状1.4.1 五子棋游戏规则对局开始时,先由执黑棋一方将一枚棋子落在天元点上,然后由执白棋一方在黑棋周围的交叉点上落子。但是,为了尊重对方和礼貌起见,持白棋的一方通常将盘面的第二着棋布在自己河界的一侧,即直止或斜止。此后黑白双方轮流落子,直到某一方首先在棋盘的横线、纵线或斜线上形成连续五子或五子以上仅对白棋而言,则该方就算获胜。连珠五子棋的一个特点是先行的一方优势很大,因此在职业比赛中对
16、黑方做了种种限制,以利公平竞争。目前五子棋的比赛规则如下: 1 黑先、白后,从天元开始相互顺序落子; 2 最先在棋盘横向、纵向或斜向形成连续的同色五个棋子的一方为胜; 3 黑棋禁手判负、白棋无禁手。黑棋禁手有“三、三”、“四、四”和“长连”,包括“四、三、三”和“四、四、三”。黑棋只能以“四、三”取胜; 4 如分不出胜负,则到为平局; 5 五连与禁手同时形成,判胜; 6 黑方禁手形成时,白方应立即指出。若白方未发现或发现后不立即指出,反而继续落子,则禁手失效,不再判黑方负。【1】 五子棋是黑白双方或两个人之间的竞技活动,由于对黑白双方规则不同,黑棋必须先行。一般采用猜先的方法来决定谁执黑先行,
17、即双方各抓一种颜色的几枚棋子,大数减小数,单数双方交换,偶数不换; 【2】 禁手示例: X X X X为三、三禁手 X X X为四、四禁手 X X为长连禁手【3】 黑方在落下关键的第五子即形成五连的同时,如又形成禁手,此时因黑方已经成五,而“五”在五子棋中是至高无上的,故禁手失效,黑方胜; 【4】 所谓黑方形成禁手,是指黑方落下一子同时形成两个或两个以上的活三、冲四及长连等。此时白方应立即指出,自然而胜。1.4.2 五子棋的发展与现状五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“連珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(Five in a Row的
18、缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。到了21世纪已经出现了不少棋类,目前按棋类的属性分类如下:1.按参与人数分类(Player):单人游戏,如华容道等滑块类游戏;双人游戏,如象棋、围棋、五子棋等。在棋类中双人参与的棋类占绝大多数; 多人游戏,如跳棋。一般说来,参与人数越多,对手就越多,情况就越发复杂。2.按兵种多少分类(Pieces, Materials)单一兵种,如围棋、五子棋、苏拉卡尔塔(Surakarta)、亚马逊(Amazons)等;多兵种,如国际象棋、中国象棋、日本将棋等。兵种的增加,意味着着法的复杂程度增加,掌握起来更加困难。3.
19、按着法分类(Move) 走子类:开局前双方摆好,开局后轮流走动棋子。如象棋、国际象棋、跳棋等;添子类:开局前盘面无子,开局后轮流放入棋子。如围棋、五子棋、六子棋等;吃子类:对局过程中可以吃掉对方的棋子。如象棋、国际象棋、围棋等;混合类:在填子的过程中可以吃子(围棋);在走子过程中可以吃子,还可以填子(日本将棋)。通常情况弈棋双方轮流施着,各走(下)一步。但是有的棋类在一定条件下一方是可以连续施着的,即连续走多步,可成为轮(Turn)。如跳棋、西洋跳棋、黑白棋(Reversi, Othello)、点格棋(Dots and Boxes)等。4.按胜负判决分类(Win-Lose-Draw) 擒获首领
20、:象棋,国际象棋等;摆成形状:连珠类井字棋、五子棋、六子棋等;占领地域:围棋、点格棋等;剩余子粒:黑白棋、苏拉卡尔塔等;活动余地:亚马逊等;到目标地:跳棋、一字棋、牛角棋等。在所有棋类中五子棋发展最为迅速,在人群中最受欢迎!这一棋类运动已迅速在国际上发展起来。外国人都十分看好这一毫不起眼的智力游戏,并认为五子棋不仅能提高思维、开发智力、手脑并用、修身养性 而且富含哲理,具有东方的神秘和西方的直观,是中西文化的交汇点。许多国家的人对五子棋都有不同的爱称,例如韩国人把五子棋称之为“情侣棋”,言下之意是情人之间下五子棋有利于增加情感的交流;欧洲人称之为“中老年棋”,表示五子棋适合中老年人的生理特点和
21、思维方式;美洲人喜欢将五子棋称之为“商业棋”,就是说商人谈生意时可边下棋边谈生意,棋下完了生意也谈成了。由此可见,尽管国度不同,语言各异,但人们都可以借助五子棋这一简单而又深奥的棋艺进行交流、比赛,增进友谊。十余年来,随着各地五子棋组织的建立和五子棋的逐步普及,各种五子棋比赛应运而生,一些民间五子棋组织自筹经费与地方有关部门合作,运作了不少民间比赛。从国内的比赛来看,北京、天津、上海、镇江、吉林、黑龙江、安徽、浙江等地先后自筹经费举办了地方性的五子棋比赛,同时,地区间的交流也不断增加,如1997年举办的京津冀五子棋对抗赛、2000年京津五子棋团体对抗赛、2000年在辽宁铁岭举办的“中行杯”北方
22、五子棋友好邀请赛、在江苏镇江举办的“一品梅杯”江苏五子棋邀请赛等。2001年国家体育总局批准试办全国性五子棋比赛后,中国棋院在2002年和2003年连续举办了两届全国五子棋邀请赛,吸引了全国各地的高手参加,取得了圆满成功。2004年10月,中国棋院将举办第四届全国五子棋邀请赛。全国五子棋邀请赛作为全国参赛人数最多,规模最大,水平最高的比赛,已经成为一项全国性五子棋的传统赛事。到了21世纪五子棋游戏在网络上面是非常火暴的,而且在棋牌游戏里面玩家人数排名总会占到很前面,不愧是风靡全球的棋牌游戏啊!在未来中,将会有越来越多的人关注五子棋,喜欢五子棋,那么将其变为商业化也会越来越多,而且还可以以教育孩
23、子的方式来将其嵌套进去,或者用来做测试等等。随着人工智能技术的不断进步,我相信今后的五子棋游戏将会更加精彩、更加完善,让我们拭目以待吧。1.5 研究内容本游戏是在Windows环境下完成一个简易五子棋游戏的设计。五子棋是人工智能的一个成果之一,它涉及到计算机博弈理论,棋盘表示、走法生成以及搜索算法等知识,最终实现人机对战。完成后,要提交演示系统和相关程序、提交毕业论文。演示系统要能够运行正常、能够进行人机对战,并通过此次毕业设计,对计算机博弈理论有了更加深入、透彻的了解。通过这次实践最终能够提高自己的学习能力、思维能力且培养了一定的开发能力。第二章 五子棋程序的介绍本章主要是介绍该五子棋系统的
24、基本功能和其结构图,并对实现该系统的开发工具、运行环境和开发语言做了较为详细的阐释。2.1 五子棋程序的基本功能1.显示一个十五行十五列的五子棋棋盘。2.用鼠标点击棋盘上的交叉点处,则会准确地在该位置显示出棋子。3.玩家为黑方先下棋,可以从天元(指棋盘的中心点,该点颜色够深,容易看出来)先落子,也可以从其它地方下子,电脑为白方。4.可以自动判断游戏是否结束,是否黑方或者是白方已经胜利,并且跳出对话框来提示玩家。5.在游戏棋盘上方会有一个游戏信息,这个游戏信息是用来提示当前是黑白双方的哪一方下子,玩家可以根据这个提示来下棋,而不会导致不清楚轮到哪一方下棋。6.可以重新开始游戏,并且有认输功能,在
25、下棋时如果玩家点击认输按钮,则给出提示“玩家认输,电脑赢!”。 7.本五子棋有相应的提示功能,对玩家的一些错误的操作给出一定的提示,比如误点击有棋子的棋盘交叉点。2.2 开发运行环境1.中央处理器(CPU):Intel 酷睿2双核 P7350 2.00GHz2.内存:2.00GB3.硬盘:160GB4.操作系统:Windows Vista(32位)5.开发工具:eclipse-win32-callisto6.编程语言:java2.3 软件开发工具及开发语言介绍2.3.1开发工具-EclipseEclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一
26、组服务,用于通过插件组件构建开发环境。这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非
27、营利软件供应商联盟Eclipse基金会(Eclipse Foundation)管理。Eclipse也是一个流行的针对Java编程的集成开发环境(IDE)。它还可以用作编写其他语言(比如C+和Ruby)的环境,合并各种种类工具的框架,以及创建桌面或服务器应用程序的富客户端平台。如今,Eclipse开源社区拥有数十个项目,其范围从商务智能到社会网络等各个方面。Eclipse SDK(软件开发者包)是Eclipse Platform、JDT和PDE所生产的组件合并,它们可以一次下载。这些部分在一起提供了一个具有丰富特性的开发环境,允许开发者有效地建造可以无缝集成到Eclipse Platform中的
28、工具。Eclipse SDK由Eclipse项目生产的工具和来自其它开放源代码的第三方软件组合而成。Eclipse项目生产的软件以 GPL发布,第三方组件有各自自身的许可协议。2.3.2开发工具的安装 在安装Eclipse之前,先要安装jdk。JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。我下载的是jdk-6u10-windows-i586-p,我的安装目录为F:java,我设定环境变量如下: 操作: 我的电脑(右键) - 系统特性- 高级- 环境变量:环境变量:path:F:javabin Classpath:C:Use
29、rsAdministrator接着下载Eclipse直接解压就可以使用了。2.3.3 开发工具的使用 Java项目包含用于构建java程序的源代码和相关文件。创建一个java项目主要分为以下几步:一.选择主菜单“文件新建项目”,在弹出的窗口中选择“java项目”。二单击“下一步”按钮,在“项目名称”文本框中输入项目名称,工作空间workplace中将会建立一个同名项目。项目布局选择“创建单独的源文件和输出文件夹”选项,这样会生成两个目录:src和bin,前者用来存放源代码,后者用来保存编译后的class文件。三.单击“完成”按钮,就会看到在“导航器视图”中多了一个项目,此项目有两个配置文件和两
30、个空目录src、bin。四在工具栏按钮,选择“其他”选项。在弹出的“新建”窗口的左部列表中选择“类”这一项。五在弹出的“新建java类”窗口输入类名,比如HelloWorld输入包名net.year,并选中public static void main(Stringargs)选项来自动创建一个main方法。六单击“完成”按钮后,一个代码编辑器被打开了。七在编辑器中加入相应的代码。八点击按钮旁小黑三角形,选择运行“java应用程序”来运行HelloWorld程序。2.3.4开发语言-javaJava,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台
31、的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。Java语言具有以下几个特性:1、Java语言是简单的。Java语言的语法与C语言和C+语言很接近,使得大多数程序员很容易学习和使用Java。2、Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。3、Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口
32、(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。4、Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。5、Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。6、Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个Java平台的任何系统中运行。7、Java语言是可移植的。这种可移植性来源于体系结
33、构中立性,另外,Java还严格规定了各个基本数据类型的长度。8、Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。9、Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。10、Java语言是多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。11、Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。Java语言的优良特性使得Java应用具有无比的健壮
34、性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。2.4 五子棋程序功能的设计本五子棋游戏主要的有六大功能它们分别是:开始游戏、游戏说明、认输、关于和退出。2.4图为软件功能结构图:五子棋 帮助游戏认输关于游戏说明退出游戏新游戏图2.1软件功能结构图第三章 五子棋的总体设计一个好
35、的软件产品,首先是要有一个好的人机界面,也就是说给人的第一感觉是美好的、轻松的。接着是简单明了的操作,界面上按钮够少,令玩家容易上手。因此本章主要对本软件的游戏界面及相关功能、及玩家落子的实现进行详细的介绍。3.1 人机界面的实现及鼠标事件的监听3.1.1应用程序的窗口生成在这个模块里主要用了javax.swing包,该包提供了各种swing组件的类和接口。在这个模块里用了两个类javax.swing.JPanel类和import javax.swing.JFrame类。JPanel类使用了Swing体系结构的的扩展面板类,可以加入到JFrame中 , 它自身是个容器。JFrame 类也是一个
36、容器,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。JFrame 实际上不仅仅让程序员把组件放入其中并呈现给用户。比起它表面上的简单性,它实际上是 Swing 包中最复杂的组件。虽然这样但是这两个类还是有区别的:JFrame是最底层,JPanel是置于其面上,同一个界面只有一个JFrame,一个JFrame可以放多个JPanel。本次设置的窗口首先是设置窗口大小,这个大小要适中,不宜过大,否则有一部分没法在电脑上显示出来,大小设定以后要在电脑上显示出来,所以还要设定一个起始坐标,既是窗口左上角的坐标。从人们的使用习惯来说窗口最好在电脑屏幕中间显示出来。 本次设置的窗口用
37、到的部分关键代码如下:jFrame = new JFrame();/新建一个新的的窗口jFrame.setSize(500, 500);/设置窗体大小jFrame.setContentPane(getJContentPane();jFrame.setTitle(简易五子棋);/给窗体设置名称jFrame.setLocation(400,150);/窗体位置设置大小不可变jFrame.setResizable(false);/设置关闭方式:窗口关闭后程序结束jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。运行后结果如图3.1:图3.1游
38、戏启动界面3.1.2 人机界面的生成人机界面不但包括棋盘,还包括相应的背景图片。另外图片颜色不能太淡,太淡犹如不存在一样,太深看起来不舒服。所以图片的色调要趋于这两者之间,偏于柔和,这样给人一种愉悦感。背景图片的大小一定要适中,否则后面的一些功能无法显示出来(比如相应的按钮)在创建完成一个基本窗口后,将游戏背景图片和棋盘加载进窗口界面,并加入相应的控制按键,就得到了一个简单的棋盘。首先是用.URL类 声明一个它的对象imgURL 而这个对象是指向就是imgURL 的值就是Bjpanel.class.getResource(path)。获得图片用getResource()方法获取,资源放在编译后
39、的文件里bin。获取图片后调用drawImage 方法,将图片放在在指定位置并且按原始大小绘制指定的 Image获取图片部分代码如下:URL imgURL = Bjpanel.class.getResource(background.jpg);URL imgURL1 = Bjpanel.class.getResource(white.png);URL imgURL2 = Bjpanel.class.getResource(black.png);URL imgURL3 = Bjpanel.class.getResource(chessboard.jpg);读取图片代码片段如下:backgroun
40、dImage=ImageIO.read(imgURL);whiteImage1=ImageIO.read(imgURL1);blackImage2=ImageIO.read(imgURL2);chessboardImage=ImageIO.read(imgURL3);绘制图片的部分代码如下:g.drawImage(backgroundImage, 0, 0,this);g.drawImage(chessboardImage, 10, 50, 363, 364, this);运行结果如图3.2:图3.2运行结果图3.1.3鼠标事件的监听MouseEvent是公有类。这个类封装了与鼠标事件有关的信
41、息,包括鼠标单击和处理鼠标事件。首先是添加事件监听器this.addMouseListener(this)(this是java中的一个特殊的对象引用。每个对象对其自身的引用称为this引用。this引用被隐式地引用一个对象的实例变量和方法),鼠标事件由鼠标事件源产生,并且由实现了MouseListener接口的处理对象。发送MouseEvent类的实例给鼠标监视器事件以帮助处理鼠标事件首先判断是否该玩家落子和胜负已分及游戏是否开始,如确实轮到玩家落子,则首先得到鼠标单击坐标,然后转换得到距离最近的落子点,并在这个落子点上绘制相应颜色的棋子,然后调用相应方法让计算机落子。代码片段如下:publi
42、c void mouseClicked(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mousePressed(MouseEvent e) if(canplay)x=e.getX();y=e.getY();if(x=18&x=58&y=580)x=(x-18)/24;y=(y-58)/24;/判断该坐标是否有棋子,没有则放棋子,有则显示已经有棋子对话框if(allqzxy=0)/玩家鼠标点击的坐标设置为放黑子标志allqzxy=1;me
43、ssage=白方走棋;this.repaint();boolean Winflag=this.Win();if(Winflag)JOptionPane .showMessageDialog(this, 游戏结束:+(allqzxy=1?黑方胜:白方胜);canplay=false;if(canplay)/电脑通过最优算法获得最能够阻止玩家的黑棋成为5连得坐标x,y 并把这个坐标设置为放白子标记 /allqzxy=2;this.zuiyouBaiqi(); message=黑方走棋; this.repaint(); /判断落棋后是否连成5个,即判断谁赢并游戏结束Winflag=this.Win(
44、);if(Winflag)JOptionPane .showMessageDialog(this, 游戏结束:+(allqzxy=1?黑方胜:白方胜);canplay=false;elseJOptionPane .showMessageDialog(this, 已经有棋子,请重新落子!);3.2 按钮功能的实现Java中的鼠标和键盘事件,使用MouseListener接口处理鼠标事件.鼠标事件有5种:按下鼠标键,释放鼠标键,点击鼠标键,鼠标进入和鼠标退出。鼠标事件类型是MouseEvent,主要方法有:getX(),getY() 获取鼠标位置getModifiers() 获取鼠标左键或者右键getClickCount() 获取鼠标被点击的次数getSource() 获取鼠标发生的事件源事件源获得监视器的方法是addMouseListener(),移去监视器的方法removeMouseListener()处理事件源发生的时间的事件的接口是MouseListener ,接口中有如下的方法mousePressed(MouseEvent) 负责处理鼠标按下事件mouse