严重痤疮怎么治疗-
计算机工程系课程设计报告
成
绩:
指导教师
(签名)
:
课程名称:
软件工程
课程设计题目:
五子棋游戏
班级
2013
级计科
(4)
班
姓名
许婷娜
学号
2
2015
年
12
月
27
日
目
录
1.
引
言
.
..................... ..............................................
1
1.1
系统的开发背景(可行性分析)
.
........................................
1
1.2
系统简介
................... .........................................
2
1.2.1
系统介绍
........................ ...............................
2
1.2.2
开发本系统所做的工作
...........................................
2
2.
需求分析
.
............... .................................................
3
2.1
需求的描述与分析
............... .....................................
3
2.2
需求定义
......................... ...................................
3
2.2.1
功能需求
.
.................. ....................................
3
2.2.2
性能需求
.
.................. ....................................
4
3.
系统设计
.
............................ ....................................
4
3.1
总体设计
.
..................... .......................................
4
3.1.1
设计思想
........................ ...............................
4
3.1.2
五子棋游戏的功能的结构图
.......................................
5
3.2
程序设计分析
.
................... .....................................
5
4.
五子棋游戏的详细设计
.
...................... ..............................
6
4.1
五子棋游戏的主窗口界面
.
.............. ................................
6
4.2
五子棋游戏的核心模块的详细设计
.
.....................................
10
4.2.1
五子棋游戏程序核心代码
........................................
10
4.2.2
五子棋游戏程序主面板与鼠标事件
................................
13
4.2.3
五子棋游戏程序流程图
..........................................
17
4.3
五子棋游戏的游戏功能模块的详细设计
.
.................................
18
4.3.1
五子棋游戏的开局功能模块
......................................
18
4.3.2
五子棋游戏的棋盘功能模块
......................................
18
4.3.3
五子棋游戏的模式功能模块
......................................
19
4.3.4
五子棋游戏的退出功能模块
......................................
19
4.4
五子棋游戏的外观功能模块的详细设计
.
.................................
19
4.5
五子棋游戏的版本功能模块的详细设计
.
.................................
20
I
5.
五子棋游戏的测试
.
...... .................................................
20
5.1
系统测试的类型
.
........... ..........................................
20
5.2
测试举例
.
..................... ......................................
21
5.2.1
测试用户的对弈结果
............................................
21
5.2.2
测试用户切换棋盘类型功能
......................................
22
5.2.3
测试用户切换模式类型功能
......................................
23
5.2.4
测试用户切换外观类型功能
......................................
24
5.2.5
测试版本功能
...................... ............................
26
小结
.
............................................ ..........................
27
致谢
.
.............................................. ........................
28
参考文献
.
.............................................. ....................
29
II
1.
引
言
1.1
系统的开发背景(可行性分析)
人工智能是一门正在迅速发展的、新 兴的、综合性很强的交叉科学。它与生物工程、
空间技术一起被并列为二十一世纪三大尖端技术。它的中 心任务是研究如何使用计算机去
做那些过去只能靠人的智力才能做的工作。目前各发达国家都把人工智能 作为重点项目,
列入本国的高科技发展计划当中,投入巨大的人力和物力。
随着计算 机的普及,网络的飞速发展和网络技术的成熟,计算机成为了集办公、娱乐
于一体的新式工具。它的研究 为人工智能带来了很多重要的方法和理论,产生了广泛的社
会影响和学术影响。在这一背景下,网络游戏 的需求与日俱增,游戏软件是当今世界发展
最迅速,最有影响力,最有潜力与活力的领域之一。电脑游戏 的出现为人们提供了一个新
的娱乐平台,同时也丰富了人们的业余活动。因此与游戏有关的软件深受广大 青少年的喜
爱,大多数游戏普通人学几分钟就会玩,甚至连老年人也慢慢爱上了它。
计算机对弈也是其中之一。作为智能研究的一个重要分支,计算机博弈是检验人工水
平的一个重要方面。 而五子棋游戏的诞生,更是吸引着不同年龄段的人群,无论男女老少
都可以玩,也都喜欢玩,用电脑来下 五子棋是一种时尚。
五子棋游戏是一款较为常见的小游戏,通过双方下棋来实现胜负。五子棋 相传起源
于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民
间 就已有五子棋游戏。
有关早期五子棋的文史资料与围棋有相似之处,
因为古代五子
棋的 棋具与围棋是完全相同的。五子棋的实现价值方面是无法和围棋相比的,但刚好是
这点,造就了五子棋在 社会上的可推广性。棋是培养习惯的一个载体,它的作用是为社会
培养更多懂得思考的人才。现阶段五子 棋已经逐步被广大群众熟知,因此,一款网络五子
棋小游戏的诞生是符合社会发展趋势和潮流的。
五子棋对弈是计算机博弈中的一种。研究其计算机算法,可以让我们看到人工智能的
雏形, 也有助于智力的开发。五子棋是我国发明的,研究它可以让更多的外国人了解五子
棋,这有助于我国优秀 文化的推广。
使用
Java
语言开发的五子棋游戏程序,将五子棋游戏移植 到网络中,更加符合现代
人的娱乐理念,
满足用户异地自由选择游戏对手,
实现单机和 双人对战的游戏模式。
同时,
从游戏的图形界面上优化,使得
Java
五子棋 游戏软件具有很强的可操作性。
1
1.2
系统简介
1.2.1
系统介绍
五子棋,又被称为“连五子、五子连、串珠、五目、五 目碰、五格、五石、五法、
五联、京棋”
。五子棋相传起源于四千多年前的尧帝时期,比围棋的 历史还要悠久,
可能早在“尧造围棋”之前,民间就已有五子棋游戏。有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。
五子棋是一种两人对弈的 纯策略型棋类游戏。五子棋游戏不但容易上手,而且它区别
于别的游戏,它不但能使人娱乐,而且能增长 智慧。
对战开始时,先由执黑棋一方将一枚棋子落在天元点上,然后由执白棋一方在黑棋周< br>围的交叉点上落子。但是,为了尊重对方和礼貌起见,执白棋的一方通常将盘面的第二着
棋步在自 己河界的一侧,即直止或斜止。此后黑白双方轮流落子,直到某一方首先在棋盘
的横线、纵线或斜线上形 成连续五子,则该方就算获胜。
Java
的广泛流行是与它编写的程序可以在网络上 运行且可以跨平台。事实上,支持
Java
的浏览器内置
Java
虚拟机,< br>使得
Java
的小程序能够在网络上完全的传送和运行,
这
样使得程序 人员及时不具备有关的网络知识,也能编写出高质量的网络通信程序。
本程序是一个基于
Java
的对弈游戏,基本实现了五子棋游戏的一些功能。
我制作的游戏有两种模式:人机对弈和人人对弈,让玩家自己来选择所需要的对弈模
式,进行游 戏,同时也实现了其他的基本功能,如外观的选择、棋盘的大小等。
人机对弈主要是通过使用 线程调用人工智能算法来实现的。选择人机对战时,人工智
能线程启动。当你落下一个棋子之后,人工智 能线程遍历所有棋盘的位置,然后算出所有
棋盘位置的权限值,选择权限值最大的位置落下棋子。然后, 再根据赢的条件判定双方的
胜负。
人人对弈主要是让两个不同的玩家在同一台电脑上 进行游戏,主要是将人机对战中的
人工智能算法去掉,直接由玩家控制棋子的落点,以此来完成游戏。< br>
1.2.2
开发本系统所做的工作
1
)
了解五子棋游戏基本运行流程
2
)
掌握
Java
、
JDK
开发技术
3
)
熟练应用
myEclipse
进行编程
2
4
)熟悉软件开发的流程
:
要用软件工程的结构化程序设计方法的思想开发软件。在软件开发步骤上要按照需
求分析、总体设计、详细设计、功能测试一步一步地进行。
2.
需求分析
2.1
需求的描述与分析
需求分析要根据用 户的功能要求、界面以及其他要求进行分析。当然在此需求分析是
根据我自己对五子棋游戏的基本了解以 及系统所需要的基本功能来进行的。
为了开发出真正满足用户需求量的软件产品,首先必须知 道用户的需求。软件需求中
包括了多个方面来说明用户需求。第一,此系统为智力游戏,适合于各类游戏 爱好者,由
于其经典性和游戏的简单性,各类人士都可以玩。第二,人们在与电脑对战、享受娱乐的同时也能体会到自己智力的提升。
通过需求分析阶段对五子棋的整个应用情况作全面的、 详细的调查,确定五子棋游戏
的目标,收集支持系统总的设计目标的基础数据和并对这些数据进行分析, 确定游戏者的
需求,并把这些写成用户和游戏设计者都能够接受的文档。事实上,需求分析是数据开发< br>中最难的任务之一。
2.2
需求定义
2.2.1
功能需求
该款游戏主要由以下几个模块组成:
(
1
)
人 人对弈模式:选择该模式可以实现人与人之间的对弈,系统默认黑棋先下,然后
玩家之间交替下棋,同时 系统能够准确判断哪一方先将五子连成一行,即获胜者。
如果有一方获胜,则提示玩家是赢还是输,并由 玩家决定是否重新开局。
(
2
)
人机对弈模式:选择该 模式可以实现人与电脑之间的对弈,系统默认玩家先下,玩
家是黑棋,然后人与电脑之间交替下棋,同时 系统能够准确判断哪一方先将五子连
成一行,即获胜者。如果有一方获胜,则提示玩家是赢家还是输家, 并由玩家决定
是否重新开局。
(
3
)
自由选择棋盘大小:此功能用户可以根据需要选择棋盘大小,分为
“标准棋盘”
、
3
“改进棋盘”和“扩大棋盘”三种。如果对弈 双方水平相差较大,不出几个回合就
出现了获胜方,那么小些的棋盘就完全能够满足用户的需要;如果对 弈双方水平旗
鼓相当,一时难分谁赢谁输,那么小些的棋盘就无法满足用户的需要,用户需要更
大的棋盘来进行长时间的对弈。因此这项功能是非常必要的。
(
4
)
自由选择棋盘外观:此功能用户可根据自己的喜好来选择棋 盘的外观,分为“类型
一”
“类型二”
“类型三”三种。由于每个人对外观的喜好不一 样,因此这个功能也
是非常必要的。
2.2.2
性能需求
该款五子棋游戏功能虽然简单,但最重要的还是实现 了“人人对弈”和“人机对弈”
功能。该游戏能够很好的在这两种模式下自由转换。人人对弈模式可以满 足对弈双方的游
戏需求,也能提高对弈双方的水平和能力。同时,在一时找不到对手的情况下,人机对弈
能够满足玩家的游戏需求。在玩家是新手的情况下,人机对弈能够给与新手一定的帮助,
同时也 能提高新手的游戏水平。
3.
系统设计
3.1
总体设计
3.1.1
设计思想
(
1
)本程序要实现五子棋的游戏功能,必须要有一个棋盘,所以,通过继承
JPanel,然
后在
JPanel
上画出一个
14*14
的棋盘,另外还有 三个按钮:游戏、外观和版本,提醒用
户进行相应的操作。当然,
JPanel
必须放 在
JFrame
中,所以,又通过继承
JFrame
得到一
个实例。
(
2
)对于下棋的操作,通过对
JPanel
增加鼠标事 件监听器
MouseListener
,每次当用户
点击鼠标时,先取得点击的坐标值 ,然后换算成对应棋盘上(即棋盘数组)的位置(数组
的下标)
。
(
3
)判断此处是否已经有棋子。如果有,则玩家不能再次在此处下子;如果没有,则通
过Java
里的画图函数在此处画上棋子,重新刷新输出棋盘。
(
4)判断该颜色棋子的上下左右是否满足连续五个,是的话提醒相应玩家获胜,不是的
话,更换玩家下 棋。对于玩家的更换是程序自动的,每次用户点击鼠标后,若本局还未结
4
束则会变换玩家,从而画出对应的黑方白方的棋子,直到有一方获胜为止。
3.1.2
五子棋游戏的功能的结构图
游
戏
标
准
棋
盘
改
进
棋
盘
扩
大
棋
盘
人
人
对
弈
人
机
对
弈
开
局
棋
盘
模
式
退
出
类
型
一
类
型
二
类
型
三
外
观
版
本
五子棋游戏主控界面
五子棋游戏
关
于
图
3.1
五子棋游戏结构图
3.2
程序设计分析
(
1< br>)本款游戏有“游戏”
、
“外观”和“版本”三个选项。其中“游戏”包括“开局”、
“棋
盘”
、
“模式”
、
“退出”四个选项;
“外观”则包含“类型一”
、
“类型二”
、
“类型三”三个
选项;< br>“版本”包含“关于”一个选项。
“棋盘”又包含了“标准棋盘”
、
“改进棋盘 ”和“扩
大棋盘”
;
“模式”包含了“人机对弈”和“人人对弈”
。
5
(
2
)绘制棋盘。以标准棋盘为例,绘制
14
条横线,
14
条竖线,在直线交点处下棋子,棋
子为实心黑白圆形。
(
3
)首先程序会判断是人机对弈模式还是人人对弈模式。若是人机对弈模式,则是玩家< br>先下,玩家为黑棋,电脑为白棋;若是人人对弈模式,则是为黑棋的玩家先下,而后是白
色棋子的 玩家下。不论哪种模式,都是黑白交替下子。
(
4
)棋盘处于鼠标监听状态 。当鼠标在棋盘上有点击操作的时候,程序会获得鼠标点击
的坐标,然后换算成对应的棋盘的位置,再判 断此处是否有棋子,如果没有,那么在此处
画出对应颜色的实心棋子,如果已经有棋子了,那么就不能再 次下棋子。
4.
五子棋游戏的详细设计
4.1
五子棋游戏的主窗口界面
/*main
方法创建了
ChessFrame
类的一个实例对象(
cf
),
并启动屏幕显示显示该实例对象。
*/
public class FiveChessAppletDemo {
public static void main(String args[]){
ChessFrame cf = new ChessFrame();
}
}
//
用类
ChessFrame
创建五子棋游戏主窗体和菜单
import .*;
import .*;
import .*;
import .*;
import tream;
import nent;
import
class ChessFrame extends JFrame implements ActionListener {
6
private String[] strsize={
标准棋盘
改进棋盘
扩大棋盘
private String[] strmode={
人机对战
人人对战
public static boolean
iscomputer
=true,
checkcomputer< br>=true;
private int width,height;
private ChessModel cm;
private MainPanel mp;
//
构造五子棋游戏的主窗体
public ChessFrame() {
le(
五子棋游戏
cm=new ChessModel(1);
mp=new MainPanel(cm);
Container con=tentPane();
(mp,
izable(false);
dowListener(new ChessWindowEvent());
MapSize(14,14);
JMenuBar mbar = new JMenuBar();
nuBar(mbar);
JMenu gameMenu = new JMenu(
游戏
(makeMenu(gameMenu, new Object[] {
开局
棋盘
模式
退出
}, this));
JMenu lookMenu =new JMenu(
外观
(makeMenu(lookMenu,new Object[] {
类型一
类型二
类型三
},this));
JMenu helpMenu = new JMenu(
版本
(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);
else
return null;
for(int i = 0; i < i++)
if(items[i] == null)
arator();
else if(items[i] ==
棋盘
JMenu jm = new JMenu(
棋盘
ButtonGroup group=new ButtonGroup();
JRadioButtonMenuItem rmenu;
for (int j=0;j<;j++){
rmenu=makeRadioButtonMenuItem(strsize[j],target);
if (j==0)
ected(true);
(rmenu);
(rmenu);
}
(jm);
}else if(items[i] ==
模式
JMenu jm = new JMenu(
模式
ButtonGroup group=new ButtonGroup();
JRadioButtonMenuItem rmenu;
for (int h=0;h<;h++){
8
rmenu=makeRadioButtonMenuItem(strmode[h],target);
if(h==0)
ected(true);
(rmenu);
(rmenu);
}
(jm);
}else
(makeMenuItem(items[i], target));
return m;
}
此五子棋游戏的主窗体界面如图
4.1
所示
图
4.1
五子棋游戏的主窗体
本窗口主要显示了该五子棋游戏 的游戏界面,展示了各种选项和功能,其中包括了此
五子棋游戏的游戏、外观、版本等功能按钮。通过继 承
JPanel
,然后在
JPanel
上画出一
个
14*1 4
的棋盘。当然,
JPanel
必须放在
JFrame
中,所以,又 通过继承
JFrame
得到一个
实例。
9
4.2
五子棋游戏的核心模块的详细设计
4.2.1
五子棋游戏程序核心代码
//
用类
ChessModel
实现了整个五子棋程序算法的核心
import .*;
import .*;
import .*;
import .*;
import tream;
import nent;
import
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() {}
//
该构造方法根据不同的棋盘模式(
modeC hess
)来构建对应大小的棋盘
public ChessModel(int modeChess){}
//
按照棋盘模式构建棋盘大小
10
private void PanelInit(int width, int height, int modeChess){}
//
获取是否交换棋手的标识符
public boolean getisOdd(){}
//
设置交换棋手的标识符
public void setisOdd(boolean isodd){}
//
获取某棋盘方格是否有棋子的标识值
public boolean getisExist(){}
//
获取棋盘宽度
public int getWidth(){}
//
获取棋盘高度
public int getHeight(){}
//
获取棋盘模式
public int getModeChess(){}
//
获取棋盘方格上棋子的信息
public int[][] getarrMapShow(){}
//
判断下子的横向、纵向坐标是否越界
private boolean badxy(int x, int y){}
/*
计算棋盘上某一方格上八个方向棋子的最大值,
这八个方向分别是:左、右、上、下、左上、左下、右上、右下
*/
public boolean chessExist(int i,int j){}
//
判断该坐标位置是否可下棋子
public void readyplay(int x,int y){}
//
在该坐标位置下棋子
public void play(int x,int y){}
/*
计算机走棋
说明:用穷举法判断每一个坐标点的四个方向的的最大棋子数,
最后得出棋子数最大值的坐标,下子
*/
public void computerDo(int width,int height){
int max_black,max_white,max_temp,max=0;
11
setisOdd(true);
n(
计算机走棋
...
for(int i = 0; i <= width; i++){
for(int j = 0; j <= height; j++){
//
算法判断是否下子
if(!chessExist(i,j)){
//
判断白子的最大值
max_white=checkMax(i,j,2);
//
判断黑子的最大值
max_black=checkMax(i,j,1);
max_temp=(max_white,max_black);
if(max_temp>max){
max=max_temp;
this.x=i;
this.y=j;
}
}
}
}
setX(this.x);
setY(this.y);
Show[this.x][this.y]=2;
}
//
记录电脑下子后的横向坐标
public void setX(int x){}
//
记录电脑下子后的纵向坐标
public void setY(int y){}
//
获取电脑下子的横向坐标
public int getX(){}
//
获取电脑下子的纵向坐标
12
public int getY(){}
/*
计算棋盘上某一方格上八个方向棋子的最大值,
这八个方向分别是:左、右、上、下、左上、左下、右上、右下
*/
public int checkMax(int x, int y,int black_or_white){}
//
判断胜负
public boolean judgeSuccess(int x,int y,boolean isodd){}
//
赢棋后的提示
public void showSuccess(JPanel jp){}
//
输棋后的提示
public void showDefeat(JPanel jp){}
4.2.2
五子棋游戏程序主面板与鼠标事
/*
用类
MainPanel
主要完成如下功能
1
、构建一个面板,在该面板上画上棋盘;
2
、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等)
*/
import .*;
import .*;
import .*;
import .*;
import tream;
import nent;
import
class MainPanel extends JPanel
implements MouseListener,MouseMotionListener{
//
设定棋盘的宽度和高度
private int width,height;
private ChessModel cm;
//
根据棋盘模式设定面板的大小
13
严重痤疮怎么治疗-
严重痤疮怎么治疗-
严重痤疮怎么治疗-
严重痤疮怎么治疗-
严重痤疮怎么治疗-
严重痤疮怎么治疗-
严重痤疮怎么治疗-
严重痤疮怎么治疗-
本文更新与2021-01-27 05:54,由作者提供,不代表本网站立场,转载请注明出处:http://www.xapfxb.com/yuer/429886.html
-
上一篇:紫微大全 - 06疾厄宫
下一篇:基于JAVA的五子棋游戏系统设计与实现