1、软件工程课程设计五子棋游戏计算机工程系课程设计报告成 绩:指导教师签名:课程名称: 软件工程课程设计题目: 五子棋游戏班级 2021 级计科 (4) 班姓名 许婷娜学号 202109054282021 年 12 月 27 日1.引 言 . .1系统的开发背景可行性分析 . .1系统简介 .2系统介绍 .2开发本系统所做的工作 .22.需求分析 . .3需求的描述与分析 .3需求定义 .3功能需求 . .3性能需求 . .43.系统设计 . .4总体设计 . .4设计思想 .4五子棋游戏的功能的结构图 .5程序设计分析 . .54.五子棋游戏的详细设计 . .6五子棋游戏的主窗口界面 . .6五
2、子棋游戏的核心模块的详细设计 . .10五子棋游戏程序核心代码 .10五子棋游戏程序主面板与鼠标事件 .13五子棋游戏程序流程图 .17五子棋游戏的游戏功能模块的详细设计 . .18五子棋游戏的开局功能模块 .18五子棋游戏的棋盘功能模块 .18五子棋游戏的模式功能模块 .19五子棋游戏的退出功能模块 .19五子棋游戏的外观功能模块的详细设计 . .19五子棋游戏的版本功能模块的详细设计 . .20I5. 五子棋游戏的测试 . 205.1 系统测试的类型 . 205.2 测试举例 . 215.2.1 测试用户的对弈结果 215.2.2 测试用户切换棋盘类型功能 225.2.3 测试用户切换模式
3、类型功能 235.2.4 测试用户切换外观类型功能 245.2.5 测试版本功能 26小结 . 27致谢 . 28参考文献 . 29II1.引 言1.1 系统的开发背景可行性分析人工智能是一门正在迅速开展的、新兴的、综合性很强的交叉科学。它与生物工程、空间技术一起被并列为二十一世纪三大尖端技术。它的中心任务是研究如何使用计算机去做那些过去只能靠人的智力才能做的工作。目前各兴旺国家都把人工智能作为重点工程,列入本国的高科技开展方案当中,投入巨大的人力和物力。随着计算机的普及,网络的飞速开展和网络技术的成熟,计算机成为了集办公、娱乐于一体的新式工具。它的研究为人工智能带来了很多重要的方法和理论,产
4、生了广泛的社会影响和学术影响。在这一背景下,网络游戏的需求与日俱增,游戏软件是当今世界开展最迅速,最有影响力,最有潜力与活力的领域之一。电脑游戏的出现为人们提供了一个新的娱乐平台,同时也丰富了人们的业余活动。因此与游戏有关的软件深受广阔青少年的喜爱,大多数游戏普通人学几分钟就会玩,甚至连老年人也慢慢爱上了它。计算机对弈也是其中之一。作为智能研究的一个重要分支,计算机博弈是检验人工水平的一个重要方面。而五子棋游戏的诞生,更是吸引着不同年龄段的人群,无论男女老少都可以玩,也都喜欢玩,用电脑来下五子棋是一种时尚。五子棋游戏是一款较为常见的小游戏,通过双方下棋来实现胜负。五子棋相传起源于四千多年前的尧
5、帝时期,比围棋的历史还要悠久,可能早在“尧造围棋之前,民间就已有五子棋游戏。 有关早期五子棋的文史资料与围棋有相似之处, 因为古代五子棋的棋具与围棋是完全相同的。五子棋的实现价值方面是无法和围棋相比的,但刚好是这点,造就了五子棋在社会上的可推广性。棋是培养习惯的一个载体,它的作用是为社会培养更多懂得思考的人才。现阶段五子棋已经逐步被广阔群众熟知,因此,一款网络五子棋小游戏的诞生是符合社会开展趋势和潮流的。五子棋对弈是计算机博弈中的一种。研究其计算机算法,可以让我们看到人工智能的雏形,也有助于智力的开发。五子棋是我国创造的,研究它可以让更多的外国人了解五子棋,这有助于我国优秀文化的推广。使用 J
6、ava 语言开发的五子棋游戏程序,将五子棋游戏移植到网络中,更加符合现代人的娱乐理念, 满足用户异地自由选择游戏对手, 实现单机和双人对战的游戏模式。 同时,从游戏的图形界面上优化,使得 Java 五子棋游戏软件具有很强的可操作性。11.2 系统简介1.2.1 系统介绍五子棋,又被称为“连五子、五子连、串珠、五目、五目碰、五格、五石、五法、五联、京棋 。五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋之前,民间就已有五子棋游戏。有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。五子棋是一种两人对弈的纯策略型棋类游戏。五子棋游戏不但容
7、易上手,而且它区别于别的游戏,它不但能使人娱乐,而且能增长智慧。对战开始时,先由执黑棋一方将一枚棋子落在天元点上,然后由执白棋一方在黑棋周围的交叉点上落子。但是,为了尊重对方和礼貌起见,执白棋的一方通常将盘面的第二着棋步在自己河界的一侧,即直止或斜止。此后黑白双方轮流落子,直到某一方首先在棋盘的横线、纵线或斜线上形成连续五子,那么该方就算获胜。Java 的广泛流行是与它编写的程序可以在网络上运行且可以跨平台。事实上,支持Java 的浏览器内置 Java 虚拟机,使得 Java 的小程序能够在网络上完全的传送和运行, 这样使得程序人员及时不具备有关的网络知识,也能编写出高质量的网络通信程序。本程
8、序是一个基于 Java 的对弈游戏,根本实现了五子棋游戏的一些功能。我制作的游戏有两种模式:人机对弈和人人对弈,让玩家自己来选择所需要的对弈模式,进行游戏,同时也实现了其他的根本功能,如外观的选择、棋盘的大小等。人机对弈主要是通过使用线程调用人工智能算法来实现的。选择人机对战时,人工智能线程启动。当你落下一个棋子之后,人工智能线程遍历所有棋盘的位置,然后算出所有棋盘位置的权限值,选择权限值最大的位置落下棋子。然后,再根据赢的条件判定双方的胜负。人人对弈主要是让两个不同的玩家在同一台电脑上进行游戏,主要是将人机对战中的人工智能算法去掉,直接由玩家控制棋子的落点,以此来完成游戏。1.2.2 开发本
9、系统所做的工作1 了解五子棋游戏根本运行流程2 掌握 Java、 JDK开发技术3 熟练应用 myEclipse 进行编程24熟悉软件开发的流程 :要用软件工程的结构化程序设计方法的思想开发软件。在软件开发步骤上要按照需求分析、总体设计、详细设计、功能测试一步一步地进行。2.需求分析2.1 需求的描述与分析需求分析要根据用户的功能要求、界面以及其他要求进行分析。当然在此需求分析是根据我自己对五子棋游戏的根本了解以及系统所需要的根本功能来进行的。为了开发出真正满足用户需求量的软件产品,首先必须知道用户的需求。软件需求中包括了多个方面来说明用户需求。第一,此系统为智力游戏,适合于各类游戏爱好者,由
10、于其经典性和游戏的简单性,各类人士都可以玩。第二,人们在与电脑对战、享受娱乐的同时也能体会到自己智力的提升。通过需求分析阶段对五子棋的整个应用情况作全面的、详细的调查,确定五子棋游戏的目标,收集支持系统总的设计目标的根底数据和并对这些数据进行分析,确定游戏者的需求,并把这些写成用户和游戏设计者都能够接受的文档。事实上,需求分析是数据开发中最难的任务之一。2.2 需求定义2.2.1 功能需求该款游戏主要由以下几个模块组成:(1 人人对弈模式:选择该模式可以实现人与人之间的对弈,系统默认黑棋先下,然后玩家之间交替下棋,同时系统能够准确判断哪一方先将五子连成一行,即获胜者。如果有一方获胜,那么提示玩
11、家是赢还是输,并由玩家决定是否重新开局。(2 人机对弈模式:选择该模式可以实现人与电脑之间的对弈,系统默认玩家先下,玩家是黑棋,然后人与电脑之间交替下棋,同时系统能够准确判断哪一方先将五子连成一行,即获胜者。如果有一方获胜,那么提示玩家是赢家还是输家,并由玩家决定是否重新开局。 3 自由选择棋盘大小:此功能用户可以根据需要选择棋盘大小,分为 “标准棋盘、3“改良棋盘和“扩大棋盘三种。如果对弈双方水平相差较大,不出几个回合就出现了获胜方,那么小些的棋盘就完全能够满足用户的需要;如果对弈双方水平旗鼓相当,一时难分谁赢谁输,那么小些的棋盘就无法满足用户的需要,用户需要更大的棋盘来进行长时间的对弈。因
12、此这项功能是非常必要的。(4 自由选择棋盘外观:此功能用户可根据自己的喜好来选择棋盘的外观,分为“类型一“类型二“类型三三种。由于每个人对外观的喜好不一样,因此这个功能也是非常必要的。2.2.2 性能需求该款五子棋游戏功能虽然简单,但最重要的还是实现了“人人对弈和“人机对弈功能。该游戏能够很好的在这两种模式下自由转换。人人对弈模式可以满足对弈双方的游戏需求,也能提高对弈双方的水平和能力。同时,在一时找不到对手的情况下,人机对弈能够满足玩家的游戏需求。在玩家是新手的情况下,人机对弈能够给与新手一定的帮助,同时也能提高新手的游戏水平。3.系统设计3.1 总体设计3.1.1 设计思想 1本程序要实现
13、五子棋的游戏功能,必须要有一个棋盘,所以,通过继承 JPanel ,然后在 JPanel 上画出一个 14*14 的棋盘,另外还有三个按钮:游戏、外观和版本,提醒用户进行相应的操作。当然, JPanel 必须放在 JFrame 中,所以,又通过继承 JFrame得到一个实例。(2对于下棋的操作,通过对 JPanel 增加鼠标事件监听器 MouseListener ,每次当用户点击鼠标时,先取得点击的坐标值,然后换算成对应棋盘上即棋盘数组的位置数组的下标。(3判断此处是否已经有棋子。如果有,那么玩家不能再次在此处下子;如果没有,那么通过 Java 里的画图函数在此处画上棋子,重新刷新输出棋盘。(
14、4判断该颜色棋子的上下左右是否满足连续五个,是的话提醒相应玩家获胜,不是的话,更换玩家下棋。对于玩家的更换是程序自动的,每次用户点击鼠标后,假设本局还未结4束那么会变换玩家,从而画出对应的黑方白方的棋子,直到有一方获胜为止。3.1.2 五子棋游戏的功能的结构图五子棋游戏五子棋游戏主控界面外 观游 戏 版 本类类类开棋模退型型型关局盘式出一二三于标改扩人人准进大人机棋棋棋对对盘盘盘弈弈图 五子棋游戏结构图3.2 程序设计分析(1本款游戏有“游戏、“外观和“版本三个选项。其中“游戏包括“开局 、“棋盘、“模式、“退出四个选项; “外观那么包含“类型一 、“类型二、“类型三三个选项;“版本包含“关于
15、一个选项。 “棋盘又包含了“标准棋盘 、“改良棋盘和“扩大棋盘;“模式包含了“人机对弈和“人人对弈 。5(2绘制棋盘。以标准棋盘为例,绘制 14 条横线, 14 条竖线,在直线交点处下棋子,棋子为实心黑白圆形。(3首先程序会判断是人机对弈模式还是人人对弈模式。假设是人机对弈模式,那么是玩家先下,玩家为黑棋,电脑为白棋;假设是人人对弈模式,那么是为黑棋的玩家先下,而后是白色棋子的玩家下。不管哪种模式,都是黑白交替下子。(4棋盘处于鼠标监听状态。当鼠标在棋盘上有点击操作的时候,程序会获得鼠标点击的坐标,然后换算成对应的棋盘的位置,再判断此处是否有棋子,如果没有,那么在此处画出对应颜色的实心棋子,如
16、果已经有棋子了,那么就不能再次下棋子。4.五子棋游戏的详细设计4.1 五子棋游戏的主窗口界面/*main 方法创立了 ChessFrame类的一个实例对象 cf ,并启动屏幕显示显示该实例对象。 */public class FiveChessAppletDemo public static void main(String args)ChessFrame cf = new ChessFrame();/用类 ChessFrame创立五子棋游戏主窗体和菜单import java.awt.*;import java.awt.event.*;import java.applet.*;import j
17、avax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class ChessFrame extends JFrame implements ActionListener 6private String strsize= 标准棋盘 , 改良棋盘 , 扩大棋盘 ;private String strmode= 人机对战 , 人人对战 ;public static boolean iscomputer =true, checkcomputer =true;priv
18、ate int width,height;private ChessModel cm;private MainPanel mp;/构造五子棋游戏的主窗体public ChessFrame() this.setTitle( 五子棋游戏 );cm=new ChessModel(1);mp=new MainPanel(cm);Container con=this.getContentPane();con.add(mp,Center);this.setResizable(false);this.addWindowListener(new ChessWindowEvent();MapSize(14,14
19、);JMenuBar mbar = new JMenuBar();this.setJMenuBar(mbar);JMenu gameMenu = new JMenu( 游戏 );mbar.add(makeMenu(gameMenu, new Object 开局 , null, 棋盘 ,null, 模式 , null, 退出 , this);JMenu lookMenu =new JMenu( 外观 );mbar.add(makeMenu(lookMenu,new Object 类型一 , 类型二 , 类型三 ,this);JMenu helpMenu = new JMenu( 版本 );mba
20、r.add(makeMenu(helpMenu, new Object 关于 , this);7/构造五子棋游戏的主菜单public JMenu makeMenu(Object parent, Object items, Object target) JMenu m = null;if(parent instanceof JMenu)m = (JMenu)parent;else if(parent instanceof String)m = new JMenu(String)parent);elsereturn null;for(int i = 0; i items.length; i+)if
21、(itemsi = null)m.addSeparator();else if(itemsi = 棋盘 )JMenu jm = new JMenu( 棋盘 );ButtonGroup group=new ButtonGroup();JRadioButtonMenuItem rmenu;for (int j=0;jstrsize.length;j+)rmenu=makeRadioButtonMenuItem(strsizej,target);if (j=0)rmenu.setSelected(true);jm.add(rmenu);group.add(rmenu);m.add(jm);else
22、if(itemsi = 模式 )JMenu jm = new JMenu( 模式 );ButtonGroup group=new ButtonGroup();JRadioButtonMenuItem rmenu;for (int h=0;hstrmode.length;h+)8rmenu=makeRadioButtonMenuItem(strmodeh,target);if(h=0)rmenu.setSelected(true);jm.add(rmenu);group.add(rmenu);m.add(jm);elsem.add(makeMenuItem(itemsi, target);ret
23、urn m;此五子棋游戏的主窗体界面如图 4.1 所示图4.1 五子棋游戏的主窗体本窗口主要显示了该五子棋游戏的游戏界面,展示了各种选项和功能,其中包括了此五子棋游戏的游戏、外观、版本等功能按钮。通过继承 JPanel ,然后在 JPanel 上画出一个14*14 的棋盘。当然, JPanel 必须放在 JFrame 中,所以,又通过继承 JFrame得到一个实例。94.2 五子棋游戏的核心模块的详细设计4.2.1 五子棋游戏程序核心代码/用类 ChessModel 实现了整个五子棋程序算法的核心import java.awt.*;import java.awt.event.*;import
24、java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class ChessModel /规定棋盘的宽度、高度、棋盘的模式private int width,height,modeChess;/规定棋盘方格的横向、纵向坐标private int x=0,y=0;/* 棋盘方格的横向、纵向坐标所对应的棋子颜色,数组 arrMapShow只有 3 个值: 1,2,3, -1 ,其中 1 代表该棋盘方格上下的棋子为黑子,2代表该棋盘方格上下的棋子为白子,3代表为该棋盘方格上没有棋子,-1 代表该棋盘方格不能够下棋子 */private int arrMapShow;/交换棋手的标识,棋盘方格上是否有棋子的标识符private boolean isOdd,isExist;public ChessModel() /该构造方法根据不同的棋盘模式 modeChess来构建对应大小的棋盘public ChessModel(int modeChess)