游戏软件开发:五子棋游戏开发
来源:未知 2020-07-10 13:07
当今社会经济高速发展,社会市场竞争激烈,现代社会进入了竞争的时代。人们更加关注高品质的生活及现代化的生活方式。休闲、娱乐既可缓解学习、工作压力,也一种时尚生活的方
游戏软件开发:五子棋游戏开发
摘要:当今社会经济高速发展,社会市场竞争激烈,现代社会进入了竞争的时代。人们更加关注高品质的生活及现代化的生活方式。休闲、娱乐既可缓解学习、工作压力,也一种时尚生活的方式,特别是益智性游戏越来越受到人们的关注。棋类项目作为一种智力型娱乐项目,在休闲、娱乐的同时也起到益智健心的作用。特别是五子棋作为益智游戏之一,也深受人们的追捧,因而对五子棋游戏的开发也受到人们的关注。
随着互联网技术的快速发展,越来越多的现实版游戏被搬到计算机里,供大家娱乐,这些棋类游戏也不例外,五子棋、象棋、围棋,人们将人工智能成果更为广泛地应用到该领域,使得计算机在这些领域中战胜较多的玩家。而当前五子棋程序发展也非常快,从最初的双人发展到人机,然后到现在的网络对战,也越来越受到人们的关注与喜爱。
针对人机对战和玩家之间联网对战,本文使用Java开发该游戏内容,使用Socket编程应用建立网络连接部分,多线程处理数据,建立起服务器与客来处理服务器端与客户端之间的数据传输,通信问题,使得客户端与服务器之间能够同步进行处理。
该游戏开发的目的是方便人们休闲、娱乐,可以随时在电脑中下棋,也能联机对战。在系统学习Java语言后,充分利用Java各种技术编制一些小程序,同时也逐步认识开发游戏的技术要领和流程步骤。编写该软件的过程中也可深入了解面向对象的概念,也体会到利用面向对象处理一些问题的优势,同时也加深对多线程、流套接字等高级技术的理解。
关键词:Java ;Socket编程; 五子棋游戏
第一章 绪论
1.1课题背景
当今社会经济高速发展,社会市场竞争激烈,现代软件开发论文社会进入了竞争的时代。人们更加关注高品质的生活及现代化的生活方式。休闲、娱乐既可缓解学习、工作压力,也一种时尚生活的方式,特别是益智性游戏越来越受到人们的关注。棋类项目作为一种智力型娱乐项目,在休闲、娱乐的同时也起到益智健心的作用。五子棋作为益智游戏之一,也深受人们的追捧,特别地,五子棋游戏从整体入手、分析,充分利用各种“资源”方能战胜对方,对培养全局意识及逻辑思维方式,具有良好的指导作用。因而对五子棋游戏的开发也受到人们的关注。
1.2课题意义
在四年大学生涯中,学校到较多计算机的专业知识,综合利用这些专业知识应用到实际生活实践中,也是学以致用的过程。同时计算机论文五子棋游戏的开发,在娱乐、休闲的同时还能开发智力,特别是针对青年用户,能更好地锻炼其思维能力。长远来讲,对青少年的教育有一定的帮助作用。
通过充分利用大学所学知识,设计一款五子棋游戏,既能将所学知识温故而知新,同时也是验证学习成果的过程,在此过程中,能遇到问题,分析问题、解决问题,提升自身的专业能力的同时也能提高自身解决问题的能力。五子棋游戏同时也能更好地提高人的判断能力、整体思维能力,故该项游戏的开发成果也的确能更好地满足人们的需求。
1.3论文架构
本文共由六部分组成,共计分为五个章节。
第一章:绪论
第二章:五子棋游戏程序的相关介绍
第三章:五子棋游戏程序分析和设计
第四章:五子棋游戏具体实现情况
第五章:总结与展望
第六章:致谢
第二章 五子棋游戏程序相关介绍
2.1五子棋游戏的基本功能
(1)五子棋棋盘:15(行)*15(列)
(2)五子棋需要在棋盘的(行与列)交点上落子,主要是通过鼠标点击的方式予以落子。
(3)五子棋游戏设置判断胜负对话框说明游戏胜负结局。
(4)五子棋游戏中针对游戏规则设置提示、(黑/白)两方落子顺序提示。
(5)五子棋游戏中设置悔棋、认输、重玩功能。
(6)五子棋游戏中设置时间功能,对落子时间也进行规定。
2.2五子棋游戏开发运行环境
操作系统 |
程序语言 |
中心处理器 |
开发工具 |
Windows 7 |
Java |
Myeclipse10 |
IntelCore i5-3230M,2.6GHZ |
2.3五子棋游戏的开发工具
2.3.1 Java简介
Java的语言特点如下表所示:
面向对象 |
面向对象的系统中,类是数据和操作数据的方法的集合,同时也组织着Java程序。同时Java包含一个类的扩展集合,组成各种程序包。 |
简单性 |
Java无结构,不需要指针,可自动无用单元收集,针对对象的引用及间接引用都可自动处理。对比C++多继承及操作过载特征,Java免去了预处理程序。 |
分布性 |
Java可支持各种层次的网络连接,为分布式语言,其程序只编写一次,即可到处运行。 |
解释与编译性 |
对比传统的开发过程,Java支持快速原型的同时容易实验,可快速开发程序,Java编译生成byte-code,可有效地将程序传递至其他平台。 |
稳健性 |
Java是强类型语言,可消除一些编程错误,极为可靠且可进行异常处理。 |
安全性 |
Java预防恶意代码入侵的主要方式为Java的存储分配模型 |
动态性 |
Java是一个动态的语言,其可适应环境的变化。 |
多线索性 |
Java是一个多线索语言,能处理不同的任务,使具有线索的程序设计比较容易。 |
高性能性 |
Java是一个先编译后解释的语言,可实现全编译,即在运行时可将byte-code翻译成CPU的代码。 |
可移植性 |
Java可移植新的硬件平台和操作系统 |
Java的工作原理
主要由4个方面组成:Java编程语言、虚拟机、应用程序接口、类文件格式
2.3.2 MyEclipse10开发环境简介
(Eclipse、MyEclipse)集合开发环境在Java源文件中定义不同的类,访问资源系统的方式主要通过调用这些类,并将源文件生成一种二进制的中间码,储存在类文件中,通过操作、运行平台环境对应的虚拟机运行类文件,同时执行编译产生的byte-code,调用类文件中实现的方法满足程序的Java API调用。
在Java基础上扩展的开发平台MyEclipse10。MyEclipse10与Java自带的AWT和Swing组件较为相似,其用户界面使用GUI中间层Jface,简化了基于SWT的应用程序的构建。框架平台MyEclipse10有众多插件的支持,因此相较于其他软件具有较强的灵活性.除了被当做Java IDE使用,其还包括插件的开放环境(Plug-in Development Environment,PDE)。
MyEclipse10由3个项目组成:MyEclipse10工具项目、MyEclipse10项目、MyEclipse10技术项目,其主要由4个部分组成:
JDT |
支持Java开发 |
CDT |
支持C开发 |
PDE |
支持插件开发 |
MyEclipse Platform |
开放、可扩展的IDE,为通用开发平台。允许工具建造者独立开发与其他人工具无缝集成的工具从无须分辨一个工具功能在哪里开始,另外一个工具功能在哪里结束。 |
Rich Client Platform(RCP)是MyEclipse 10的基础。Rich Client Platform包含的组件如下:
核心平台 |
可启动MyEclipse 10并运行插件 |
SWT |
可移植构件工具包 |
Jface |
文本处理、缓冲、编辑器 |
OSGi |
标准集束框架 |
Workbench-MyEcpse 10工作台 |
Workbench主要包含如下内容:views、editor、perspectives、wizards |
MyEcpse 10的设计思想为一切都是插件,所有功能的实现都是以插件的形式附件在MyEcpse 10的核心。
第三章 五子棋程序分析与设计
3.1五子棋的游戏程序
五子棋游戏程序如下图所示:通过图形,我们也可看出该程序的主要模块在于下棋、restart重启棋局、认输、输赢的判定、联网五子棋游戏、游戏等级的选择。
3.2五子棋游戏各个模块说明
15(行)*15(列)棋盘 |
行、列的距离相同,棋盘布置和围棋相同,棋盘上面有五个星,中间存在天元点。 |
落子规则 |
通过鼠标点击相应位置予以落子(交点上),选取距鼠标取点较近的左上交点来绘制中心点。 |
下棋规则 |
(黑/白)两方交替、轮流落子(即为互斥事件);落子位置不同。 |
输赢判定 |
五个相同颜色五子棋子连线(横、竖或斜方向)后,判定为赢 |
提示信息 |
在五子棋游戏界面中设置游戏提示信息,一方下完后,提示另一方交替、轮流落子 |
重玩、认输、退出功能 |
玩家可重玩五子棋游戏(将棋盘内容清空,恢复初始状态);在输赢判断功能基础上添加认输功能;退出即可正常关闭窗口,3种功能可供玩家选择。 |
游戏难度选择 |
玩家与电脑下五子棋时,可根据自身相应的水平选择游戏难度,简单、中等、困难。 |
联机对战功能 |
该功能主要是针对2方玩家,在局域网内联机对战。 |
3.3五子棋游戏开发中使用到的Java软件包、类及方法
在使用Java时,应用一些软件包,如下:
Java.Swing.JFrame//Java.Swing软件包提供一组(Java语言)组件。Java.awt.Frame的扩展——JFrame类(创建窗体的Swing类,可设置窗口,也可设置位置、大小等)版本优点为:增加了JFC/Swing组件架构的支持。
Java.awt// Java.awt软件包包含用于绘制图形图像和界面的类。
Java.awt.Toolkit// Toolkit,Toolkit为抽象超类,各种组件绑定到特定本机工具包的功能主要通过Toolkit的子类实现。
取得电脑显示屏的宽度和高度:
Toolkit.geiDefaultToolkit().getScreenSize().width;
Toolkit.geiDefaultToolkit().getScreenSize().height;
获取默认工具包:geiDefaultToolkit()
Javax.swing.JoptionPane// JoptionPane其作用主要是弹出对话框,以便提示客户操作。
Java.awt.event.Mouse Listener// Mouse Listener其作用主要是接受鼠标操作(记录客户落子操作)。
Graphics类,类似于画笔的功能,其主要是绘制图文作用,通过repaint()予以调用其功能。
Java.io.File//该类主要应用在产生中断、调用文件。Java.io主要功能是提供输入和输出,特别是通过序列、文件、数据流系统来予以实现该功能。
Java.awt.image.BufferedImage// BufferedImage其主要作用是:可访问图像缓冲区,BufferedImage主要由ColorModel和Raster组成。BufferedImage其坐标位置(左上角)为原点坐标位置。由此我们也可以看出BufferedImage的任意Raster全部满足最小值都为0。其作用主要是这是设置棋盘的背景颜色。
3.4五子棋界面设计
本文中画上15行15列的棋盘,棋盘的底色为棕色,将棋盘位置摆放在左边,然后添加下五子棋的规则信息。
3.5五子棋算法设计
基本上完成以上算法,五子棋的算法基本完成。
3.5.1五子棋棋盘设计
Java的画图算法应用到该设计中,15(行)*15(列)
(1)设置大小(棋盘规格)
(2)设置颜色(本文中设置颜色为黄色)
(3)绘制(横、竖)线条,15条横线、15条竖线,横、竖各执行15次数。
(4)在横、竖交叉点上绘制天星、天元。
以上步骤,已完成这整个棋盘的设置。
五子棋棋盘设计具体流程如下图所示:
3.5.2棋子设计
本文中棋子的设计使用的也是Java的画图算法,获取横、竖交叉点,以交叉点为圆心,以13mm为半径的圆,分为黑、白(2种)颜色的棋子,黑色棋子用实心圆表示。如何判定当前所落之子和之前所下之子是否相同?相同,系统将自动补一颗6mm(半径)的红色圆。说明当前所落之子与之前所下之子相同。详情如下所示:
3.5.3落子算法设计
本文中五子棋游戏考虑了单机游戏(玩家与电脑对弈)和联网游戏(玩家和玩家之间对弈),本文中针对单机游戏(玩家与电脑对弈)的算法进行了设计。
玩家与电脑的对弈,在本文中设置了3种级别。初级:容易;中级:中等;高级:困难。我们设计一个算法来呈现3种级别,同时供玩家根据自身的水平,选择不通过的等级,包括以下情况:
(1)系统会自动运行、计算自身情况:4颗连珠,没有被阻截、阻挡,第5颗棋子可(横、竖、斜)正常连线,赢得棋局的情况;
(2)系统会自动运行、计算自身情况:4颗连珠,没有被阻截、阻挡,第5颗棋子必须阻截、阻挡连线的情况;
(3)系统会自动运行、计算自身情况:3颗连珠,没有被阻截、阻挡,第4颗棋子必须阻截、阻挡情况;
(4)四三连
(5)三三连
五子棋(单机)游戏算法如下:
在游戏开始时,游戏系统赋予棋子intial value,
并将该4种符号作为方向对游戏结束的情况进行判定:“\”“∕”“|”“—”
1、低级:简单,只能满足情况如下所示:
(1)系统会自动运行、计算自身情况:4颗连珠,大于等于1颗棋子尚未被对方棋子阻挡。系统会默认补齐操作。
(2)系统会自动运行、计算对手情况:4颗连珠,没有被阻挡,系统会自动阻挡、拦截。
除此之外的情况并不会予以阻挡、拦截。
2、中级:中等,满足情况如下所示:
(1)系统会自动运行、计算自身情况:4颗连珠,大于等于1颗棋子尚未被对方棋子阻挡。系统会默认补齐操作。
系统会自动运行、计算对手情况:4颗连珠,没有被阻挡,系统会自动阻挡、拦截。
(3)系统会自动运行、计算自身情况:3颗连珠,没有被阻挡,系统会默认补充到第4颗棋子,然后循环(1)予以执行。
(4)系统自动运行、计算对手情况:3颗连珠,没有被阻挡,系统会自动阻挡、拦截。只有在四三连或者三三连时才不进行阻挡、拦截。
3、高级:困难,满足情况如下所示:
(1)系统会自动运行、计算自身情况:4颗连珠,大于等于1颗棋子尚未被对方棋子阻挡。系统会默认补齐操作。
系统会自动运行、计算对手情况:4颗连珠,没有被阻挡,系统会自动阻挡、拦截。
(3)系统会自动运行、计算自身情况:3颗连珠,没有被阻挡,系统会默认补充到第4颗棋子,然后循环(1)予以执行。
(4)系统自动运行、计算对手情况:3颗连珠,没有被阻挡,系统会自动阻挡、拦截。
(5)系统自动运行、计算,即将在四三连发生的情况时,系统将自动补充棋子。
(6系统自动运行、计算,即将在三三连发生的情况时,系统将自动补充棋子。
(7)系统自动运行、计算,对手即将或者实现四三连的情况时,系统根据先后等级阻挡、拦截任一的一个方向。
(8)系统自动运行、计算,对手即将或者实现三三连的情况时,系统根据先后等级阻挡、拦截任一的一个方向。
3.5.4判断输赢规则
众所周知,五子棋胜负确定是需要连续相同颜色的棋子连线(横、竖、斜),最先连线一方赢得棋局。规则如下所示:
根据五子棋的游戏规则:任一一方最先连线(横、竖、斜)连续相同颜色的棋子,则该方赢得棋局,也正是因此,判断胜负需系统自动查询连续相同的棋子。
(1)横向查找:连续相同颜色的5颗棋子连线。如果查询到则赢得棋局,如果没有查询到则到步骤(2)
(2)竖向查找:步骤同(1),如果查询到则赢得棋局,如果没有查询到则到步骤(3)
(3)斜向查找:步骤同(1)或者(2),如果查询到则赢得棋局,如果没有查询到则查询是否尚有可下的棋盘点位,如果查询到则证明该判断失败,如果没有查询到则为平局。
3.6网络五子棋算法设计
Socket网络编程实现了网络五子棋。其编程流程如下:
我们可利用以上原理将其应用到网络五子棋中,网络五子棋的通信原理图如下所示:
通过以上流程,我们可以看出网络五子棋网络通信的原理,也正是循环此流程的执行、操作,我们实现了网络对战通信。
第四章 五子棋游戏的具体实现
4.1基础工具
利用Myclipse建立工程,工程名称为FIR。然后在FIR中建立goumoku的包,再在goumoku的包内建立MainFrame的类,继承Javax.swing.Jframe这个类,使用MouseListener设置监听接口,主要作用为进行鼠标监听。
准备一个算法类Qipan,三种算法进行对比,主要有简单、中等、复杂难易程度等级。玩家可以根据自身的水平来选择游戏等级,其中也包含:输赢的判断、下子判断、棋盘设计等功能。
最后准备建立客户服务端及服务器端,从而实现网络编程。
通过上图,我们可以看到棋盘的主界面,棋盘的底色为黄色,游戏方可选择联网(玩家与玩家对决),也可单机(玩家和电脑对决)。该五子棋游戏设置了难易程度,游戏方可根据自身的水平来选择游戏的难易程度。低级:简单,中级:中等,高级:困难。
当游戏方选择联网(玩家与玩家对决)时,系统会自动扫描IP(局域网),当同时有相应IP运行此程序时,可自动进行连接、匹配,实现该联网游戏。若搜索不到相应匹配的IP,系统将呈现等待界面。
实现棋盘的代码:
4.3下棋算法实现
通过上图,可以看到五子棋的下棋界面,但是如何判定落子呢?五子棋游戏根据鼠标点击的时间来获得时间源及坐标位置。确定位置后,第一:判定这个位置是否存在五子棋棋子,如果有其他棋子则:该操作无效。如果没有其他棋子则:最近的(横竖)交叉点与该坐标位置进行匹配,游戏界面同时也会呈现出下的黑(或者白)子。
游戏不同的等级,将有不同的算法与之相匹配,不同算法分为以下三种情况:
低级:简单,满足情况如下所示:
(1)系统会自动运行、计算自身情况:4颗连珠,大于等于1颗棋子尚未被对方棋子阻挡。系统会默认补齐操作。
(2)系统会自动运行、计算对手情况:4颗连珠,没有被阻挡,系统会自动阻挡、拦截。
(3)系统会自动运行、计算自身情况:3颗连珠,没有被阻挡,系统会默认补充到第4颗棋子,然后循环(1)予以执行。
中级:中等,满足情况如下所示:
(1)系统会自动运行、计算自身情况:4颗连珠,大于等于1颗棋子尚未被对方棋子阻挡。系统会默认补齐操作。
(2)系统会自动运行、计算对手情况:4颗连珠,没有被阻挡,系统会自动阻挡、拦截。
(3)系统会自动运行、计算自身情况:3颗连珠,没有被阻挡,系统会默认补充到第4颗棋子,然后循环(1)予以执行。
(4)系统自动运行、计算对手情况:3颗连珠,没有被阻挡,系统会自动阻挡、拦截。只有在4/3连或者3/3连时才不进行阻挡、拦截。
3、高级:困难,满足情况如下所示:
(1)系统会自动运行、计算自身情况:4颗连珠,大于等于1颗棋子尚未被对方棋子阻挡。系统会默认补齐操作。
(2)系统会自动运行、计算对手情况:4颗连珠,没有被阻挡,系统会自动阻挡、拦截。
(3)系统会自动运行、计算自身情况:3颗连珠,没有被阻挡,系统会默认补充到第4颗棋子,然后循环(1)予以执行。
(4)系统自动运行、计算对手情况:3颗连珠,没有被阻挡,系统会自动阻挡、拦截。
(5)系统自动运行、计算,即将在四三连发生的情况时间,系统将自动补充棋子。
(6)系统自动运行、计算,即将在三三连发生的情况时间,系统将自动补充棋子。
高级别五子棋游戏针对3颗棋以上的棋局,系统都将自动阻挡、拦截。
以上为五子棋游戏落子的判断原则
4.4胜负判断
通过上图,我们可以看出黑棋获胜:当五颗同一种颜色的五子棋共线(横/竖/斜)时,系统默认已有胜负之分,并弹出窗口提示:获胜方是哪一方。
系统正常提示胜负后,游戏方可选择restart重开棋局,同样能选择五子棋游戏的难易程度。
胜负判断的key code如下图所示:
4.5五子棋游戏测试
(1)游戏软件测试原因
游戏已开发出,为什么还要进行测试呢?我们将开发出来的游戏软件销售给客户时,要关注游戏软件的质量,只有测试,我们才能检验出是否能够更好地满足客户的需求,才能检测出该款游戏软件是否还存在一定的漏洞,是否和我们预期情况相符合。
游戏软件测试的一个重要原因就是验证程序是否存在错误,并找到产生错误的原因,从而改善软件、开发设计过程中的产生的问题。与此同时,也验证测试的有效性。
(2)测试准备工作
主要针对五子棋游戏界面、单机游戏、联网游戏界面进行测试。
测试项目 |
五子棋游戏界面测试 |
测试步骤 |
|
测试结果 |
该游戏软件的界面(可点击)按钮可正常运行 |
测试项目 |
单机游戏(玩家与电脑对决)测试 |
测试步骤 |
|
测试结果 |
单机游戏可正常运行 |
测试项目 |
联网游戏(玩家与玩家对决)测试 |
测试步骤 |
|
测试结果 |
联网游戏界面可正常运行 |
4.6测试结果
通过对五子棋游戏的软、硬件进行测试,我们可以看出,该五子棋游戏的开发、设计基本上符合预期的目标,系统功能基本实现且性能较为稳定,也比较智能化。通过测试系统,也可以看出该款游戏软件还是比较实用的。
第五章 总结与展望
本文通过对Java的应用,设计并开发五子棋游戏,在游戏设计过程中充分应用所学习的知识。整个五子棋游戏的开发、设计的过程基本上符合预期的目标,系统功能基本实现且性能较为稳定,也比较智能化,通过测试系统,也证明了五子棋游戏也具有一定的实际应用价值。但设计的比较简易,未来将学习更多的计算机语言,并将其应用到更多的领域当中。
参考文献
[1]张白一,崔尚森;应用JNI实现Java与Prolog的优势互补[J];交通与计算机;2004年06期
[2]蔡雄;缪淮扣;;用JAVA实现P2P网络模型[J];计算机应用与软件;2006年04期
[3]孙静;李晶皎;李海朋;王暄;;基于Java的串口通信技术应用[A];2006中国控制与决策学术年会论文集[C];2006年
[4]仇宾;苏双雷;用Java实现五子棋人机博弈[J];电脑编程技巧与维护;2009年05期
[5]孙卫琴.Java面向对象编程[M].2006北京:电子工业出版社
[6]薛海强,何江玲,苏森.一种新型的Socket通信机制[A].2004第九届全国青年通信学术会议论文集[C]
[7]孙元广,王启荣;基于JAVA的数据访问组件库研究[J];教育信息化;2002年05期
[8]杨睿;金大海;宫云战;马跃;JAVA中空指针引用故障的静态检测方法[A];第十四届全国容错计算学术会议(CFTC'2011)论文集[C];2011年
[9]杨克峤;Java程序优化与数据竞争检测的研究[D];复旦大学;2010年