搜档网
当前位置:搜档网 › Java中国象棋对弈系统毕业论文

Java中国象棋对弈系统毕业论文

毕业设计(论文)中国象棋对弈系统

系别:计算机科学与技术系

专业(班级):计算机科学与技术09级本2班作者(学号):XXX(学号)

指导教师:XXX(括号内填写职称或学位)完成日期: 2013年06月06日

XXXXX教务处制

目录

中国象棋对弈系统.................................................................................................................................... - 1 -Chinese chese playing system............................................................................................................ - 2 -第一章引言(概述)........................................................................................................................ - 3 -第二章系统可行性分析.......................................................................................................................... - 4 -2.1 总体分析............................................................................................................................................. - 4 -2.2 开发环境介绍..................................................................................................................................... - 4 -

2.2.1硬件开发环境 (4)

2.2.2软件开发环境 (4)

第三章系统需求设计.............................................................................................................................. - 5 -第四章详细设计.................................................................................................................................... - 6 -4.1 功能设计............................................................................................................................................. - 6 -

4.1.1功能说明 (6)

4.1.2对弈规则 (6)

4.1.3相关类图 (6)

4.1.4相关类的类图 (7)

4.2功能的实现.......................................................................................................................................... - 7 -

4.2.1图形界面的实现 (7)

4.2.2棋谱的实现 (10)

4.2.3棋子的添加 (10)

4.2.4背景音乐 (12)

4.2.5版本信息 (12)

4.2.6新游戏 (13)

4.2.7保存与打开 (13)

4.2.8悔棋 (15)

4.3棋子移动和吃棋规则.................................................................................................................. - 16 -

4.3.1本节说明 (16)

4.3.2详细规则介绍 (17)

4.3.2.1卒的移动及吃棋规则 (17)

4.3.2.2炮和车的移动及吃棋规则 (17)

4.3.2.3马的移动和吃棋规则 (17)

4.3.2.4相(象)的移动和吃棋规则 (17)

4.3.2.5士(仕)的移动和吃棋规则 (18)

4.3.2.6将(帅)的移动和吃棋规则 (19)

4.4 测试说明........................................................................................................................................... - 19 -4.5 测试结果........................................................................................................................................... - 20 -

4.5.1运行结果 (20)

4.5.2新游戏实现 (22)

4.5.3棋谱的打开与保存 (24)

结束语.............................................................................................................................................. - 26 -谢词.............................................................................................................................................. - 27 -参考文献............................................................................................................................................ - 28 -

XXXX本科毕业设计(论文)

中国象棋对弈系统

摘要:

1、任务

据统计,中国有2亿人会下中国象棋,这相当于平均6至7个人中就有1人会下,可见它有着广泛的群众基础。中国象棋对弈系统正是为这一可行性而

开发设计的,玩家可以通过它很好的研究棋谱,学习中国象棋技术,提高水平。

简单的棋规,便捷的载体,使得他成为雅俗共赏的竞技项目。该程序是一个图

形界面的java中国象棋对弈系统,本系统主要实现如下目标:

(1)系统实现:下棋界面,走棋与吃棋,胜负判断;

(2)设计象棋菜单:新游戏,保存,打开,退出,悔棋,信息提示。

2、着重培养的能力

本课题旨在对大学期间所学基础和专业知识的全面检验与总结;提高综合运用所学专业知识分析、解决实际问题的能力;通过本课程设计使学生加深理解、巩固课堂理论知识和实验知识,使学生初步具备综合运用所学Java语言基础知

识,面向对象程序设计的基本思想、方法与技术,数据结构技术等开发简单应

用系统的基本能力,初步掌握软件开发中系统分析、系统设计、系统实现和系

统测试等阶段的基本方法与技术,培养学生的创新意识,提高实践应用能力,

为培养应用型人才服务;进行撰写技术报告、学术论文等方面的基本训练。

3、成果形式

软件系统和设计论文

关键词: JAVA;象棋;对弈;游戏;大学;专业;能力;论文

姓名:中国象棋对弈系统

Chinese chese playing system

Abstract:1, task

According to statistics, China has 200 million people can play Chinese chess, it is

equivalent to an average of six to one in 7 people in people, it has a broad mass

base. China chess system is designed for the feasibility and development, the

player can move through it very good research, learning Chinese chess

technology, improve the level. Simple chess rule, convenient carrier, make him fit

athletic project. The program is a graphical interface Java Chinese chess game

system, this system mainly realize the following goals:

(1) system implementation: chess interface, playing chess and chess, the outcome,

(2) design chess menu: a new game, save, open, quit, HuiQi, information prompt.

2, focus on training the ability

This topic aims to the foundation and professional knowledge during the period of

university comprehensive inspection and summary; To improve the integrated use

of professional knowledge to analysis, the solution actual problem ability;

Through this course design to make the students deepen understanding,

consolidate the classroom theoretical knowledge and experimental knowledge,

make students have integrated use of learned basic knowledge of Java language,

the object-oriented program design basic ideas, methods and technology, data

structure, technology development simple application system such as the basic

ability, preliminary grasp software development, system analysis, system design,

system implementation and system test phase of the basic methods and

technology, cultivate the students' innovation consciousness, improving practical

application ability, to cultivate applied talents service; Write technical reports and

academic papers of basic training.

3, production forms

Software system and the design paper

Keywords:JA V A;chese game;game;university;magor;ability;dissertation

XXXX本科毕业设计(论文)

第一章引言(概述)

随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。中国象棋发展至今已有二千三、四百年的历史了,早在战国时期就有正式记载,堪称中国的国粹。想必在未来的几年随着中国象棋在各个领域的推广,必定会带来巨大的影响和经济效益。

中国象棋对弈在中国有着悠久的历史,是二人对抗性游戏中的一种。由于用具简单,趣味性很强,很快成为流行极为广泛的棋艺活动。也是我国正式开展的78个体育项目之一,为促进该游戏在世界范围内的推广和普及,在中国历史上,象棋被列为士大夫们的修身之艺,现在被视为怡神益智的一种有益的游戏。在棋艺对战中,玩家们可以从攻与防、虚与实、整体与局部等复杂关系的变化中悟出某种各种哲理。象棋博弈是由两个玩家轮流走子,以“将死”或“困毙”对方将或帅为胜的一种棋类运动,有着数以万亿计的爱好者。它不仅能丰富人们的文化生活,陶冶情操,更有助于开发个人智力,启迪思维,锻炼辨证分析能力和培养顽强的意志等等。

随着计算机的使用的深入普及,计算机应用技术的日益完善,人们已经和计算机有着密切的关联,在计算机上玩游戏已经大众化,给人们带来了无限的欢悦,本系统是一个小程序,只要在装有jdk中的虚拟机的计算机上即可运行,中国象棋对弈系统实现了双人对弈这个功能,可用于多人一起游戏。而实现中国象棋对弈系统就为象棋在网络应用平台提供多人对弈打下基础。中国象棋对弈系统主要要实现的是棋子的走法和规则,中国象棋讲究车,马,象,仕,卒,炮,将的活用;只有当将被对方玩家的棋子吃掉,则首先吃掉对方将或帅的一方就是胜利的一方。玩家对局时,由红棋的一方先走,双方轮流各走一次,直至分出胜负,对局即结束。轮到走棋的一方,要将某个棋子从一个十字交叉点走到另一个十字交叉点,或者吃掉对方的棋子而占领其十字交叉点,都算走一次。双方各走一次,称为一个回合。象棋是中华民族的传统文化,不仅在国内深受群众喜爱,而且流传国外。

姓名:中国象棋对弈系统

第二章系统可行性分析

2.1 总体分析

此次对弈系统的开发研究是大学专业知识的一次综合应用于提高,计算机主要安装jdk运行环境和Eclipse应用程序开发工具。

在技术方面,开发过程中会出现很多问题,有预想之中的,也有预想之外的,特别在图形界面的设计上遇到了很多问题,但通过进一步的学习和与指导老师的沟通,一些问题逐一被解决。运用java,gui监听器和标准类库等知识,首先编写一个主类ChineseChess,构造一个主窗口,在中国象棋-Java版上添加一块可显示的棋盘,再插入图片CChess.GIF图片作为棋谱,再在棋盘上添加32个棋子按钮,再插入相应图片作为棋子,然后再在主窗口下面添加一块面板作为设计象棋菜单,用此菜单来用来对“新游戏,悔棋,保存,打开,退出棋谱,走棋提示”进行操作。

1.中国象棋对弈系统是:图形界面,线程,监听器与文件等技术的综合运用。

2.图形界面的实现:考虑到中国象棋的特点本身程序使用GridLayout布局来实现由于使用鼠标操作本身程序使用Jbutton组件。

3.对弈的实现:利用鼠标的监听来实现对象棋走法的操作。

2.2 开发环境介绍

2.2.1 硬件开发环境

本系统硬件环境在操作系统在Windows Server 2003 上完成编码及测试,硬件要求不高,只要有台电脑即可。

2.2.2 软件开发环境

1.结合本系统的特点,只需要一个软件开发工具和一个虚拟机即可,因此需要的软件有:

2.操作系统在Windows Server 2003以上;

3.开发工具使用Eclipse;

4.在操作系统上安装jdk的开发环境以及jre(虚拟机)的运行环境。

XXXX本科毕业设计(论文)

第三章系统需求设计

中国象棋对弈系统要求实现下棋界面,利用鼠标监听来实现走棋与吃棋,胜负判断并伴有信息提示,在下棋界面下端设有象棋菜单,菜单内容包括“新游戏,保存,打开,退出,悔棋,信息提示”等相关功能。详情如下:

1.新游戏:开始一场新的游戏,并重新棋子初始化。

2.打开:打开原保存的文件,并开始棋局。

3.保存:实现棋谱的保存,并生成一个棋谱文件。

4.悔棋:返回到上一步棋局,并开始继续下棋。

5.退出棋谱:对话框提示,是否退出系统。

姓名:中国象棋对弈系统

第四章详细设计

4.1 功能设计

4.1.1 功能说明

这个系统主要实现人人对弈,采用鼠标监听的方法来实现对棋子的移动,双方依次轮流走棋,在状态显示栏有走棋的相关提示,主要提示该轮到哪方走棋。如果一方想要认输,在征求对方认可的情况下,点击“新游戏”开始新的一局开始对弈,如果一方想要悔棋,也是在征求对方同意的情况下,点击“悔棋”按钮,可连续悔棋。如果遇到紧急情况或者疲惫的情况下,可点击“保存”按钮保存当前棋局,当空闲的时候可以点击“打开”按钮并找到上次保存的棋局。为防止误操作关闭下棋界面,在退出时设有信息提示,如果确认退出,则点击“是”按钮,否则点击“否”返回下棋界面。

4.1.2 对弈规则

选择红黑棋子双方可以自由商定选择,但默认是红方先手,黑方后手。打开以前残局可按照信息提示框的提示决定哪方先手,哪方后手。

4.1.3 相关类图

(图)4.1.3-1 包和类

在Eclipse应用程序开发工具新建一个项目ChineseChese项目,在项目中新建包https://www.sodocs.net/doc/0816118363.html,rry.frame,包内包含主类ChineseChese.java,作为该程序的main方法;图形界面类CheseMainFrame.java,对界面进行设计操作;象棋走子规则类CheseRule.java,主要对各个棋子的走法规则进行控制;音乐类

XXXX本科毕业设计(论文)

MusicDemo.java,主要用于背景音乐的控制。

4.1.4 相关类的类图

该类图包括了各个类内的方法,详细的展示了类中的方法。

(图)4.1.4-1相关类的类图

4.2功能的实现

4.2.1 图形界面的实现

图形界面的是实现主要在类ChineseMainFrame类中实现,通过继承Jframe来进行初始化操作以下是相关代码:如(图)4.2.1-1 图形界面

//创建工具栏

jmain = new JToolBar();

showAbout = new Button(" 关于");

showAbout.setToolTipText("关于");

text = new JLabel("热烈欢迎");

text.setToolTipText("提示信息");

anew = new Button(" 新游戏 ");

anew.setToolTipText("重新开始新的一局");

exit = new Button(" 退出 ");

姓名:中国象棋对弈系统

exit.setToolTipText("退出本程序");

repent = new Button("悔棋");

repent.setToolTipText("返回到上次走棋的位置");

showOpen = new Button("打开");

showOpen.setToolTipText("打开以前棋局");

showSave = new Button("保存");

showSave.setToolTipText("保存当前棋局");

//把组件添加到工具栏

jmain.setLayout(new GridLayout(0,7));

jmain.add(anew);

jmain.add(repent);

jmain.add(showOpen);

jmain.add(showSave);

jmain.add(exit);

jmain.add(text);

jmain.add(showAbout);

jmain.setBounds(0,500,470,24);

con.add(jmain);

//注册按扭监听

anew.addActionListener(this);

repent.addActionListener(this);

exit.addActionListener(this);

showAbout.addActionListener(this);

showOpen.addActionListener(this);

showSave.addActionListener(this);

//添加棋盘标签

con.add(image = new JLabel(new

ImageIcon("images//CChess.GIF")));

image.setBounds(0,0,446,497);

image.addMouseListener(this);

//注册窗体关闭监听

this.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent we)

{

System.exit(0);

}

});

//窗体居中让窗体居中

Dimension screenSize =

Toolkit.getDefaultToolkit().getScreenSize();

Dimension frameSize = this.getSize();

XXXX本科毕业设计(论文)

if (frameSize.height > screenSize.height)

{

frameSize.height = screenSize.height;

}

if (frameSize.width > screenSize. Width)

{

frameSize.width = screenSize. Width;

}

this.setLocation((screenSize. Width - frameSize.width) / 2 - 200 ,(screenSize.height - frameSize.height ) / 2 - 290); this.setIconImage(new ImageIcon("images\\象.GIF").getImage()); this.setResizable(false);

this.setTitle(Title);

this.setSize(450,550);

this.show();

(图)4.2.1-1 图形界面

姓名:中国象棋对弈系统

(图)4.2.3-1 棋谱

4.2.2 棋谱的实现

在图形界面的空白处添加棋谱图片CChese.GIF,即可显示棋谱如(图)4.2.2-1 棋谱。以下是相关代码:

//添加棋盘标签

con.add(image = new JLabel(new ImageIcon("image\\CChess.GIF")));

image.setBounds(0,0,446,497);

image.addMouseListener(this);

4.2.3 棋子的添加

在图形界面中添加相关棋子图片后如(图)4.2.3-1

//添加棋子标签

drawChessMan();

这是添加红色棋子的棋子“车”,采用接口的形式实现,其它棋子依此方法依次添加即可形成一个完美的棋谱了。

//车

in = new ImageIcon("image\\车1.GIF");

for (i=0,k=10;i<2;i++,k+=385)

{ play[i] = new JLabel(in);

XXXX本科毕业设计(论文)play[i].setBounds(k,10,40,40);

play[i].setName("车1");

}

(图)4.2.3-1 添加棋子

姓名:中国象棋对弈系统

(图)4.2.5-1 版本信息

4.2.4 背景音乐

在游戏过程中,时间长了往往会感觉到疲惫,来首优雅的背景音乐既可以消除疲劳,也可以缓解压力,从而带来身心的愉悦,本系统添加了一首流行音乐作为背景音乐,背景音乐能使玩家感觉到游戏中的气氛,使玩家容易进入游戏状态,还可以给玩家留下一个好印象,衬托游戏的场景,好的游戏背景也能表现出游戏的水准。

主要用以下方法实现:

try

{

File music = new File("许佳慧 - 预谋.wav");

AudioClip ac = Applet.newAudioClip(music.toURL());

ac.loop();

}

catch(Exception e)

{

e.printStackTrace();

}

}

4.2.5 版本信息

XXXX本科毕业设计(论文)

点击图形界面中的“关于”按钮,即可显示(图)4.2.5-1 所示的内容,主要显示系统名,版本号以及制作者,点击“确定按钮”结束浏览。主要代码设计如下

setBounds(200,100,300,200);

setTitle("版本信息");

this.setIconImage(ico.getImage());

label=new JLabel("

中国象棋对弈系统

版本号:v1.0
制作者:XXXX
导师:XXXX",JLabel.LEFT);

pane=new JPanel();

ok=new JButton("确定");

ok.addActionListener(this);

pane.add(ok);

add(pane,BorderLayout.SOUTH);

add(label,BorderLayout.CENTER);

在此,也可用此方法为象棋对弈系统添加,对弈规则以及说明书等介绍,为玩家提供更方便的游戏体验。

4.2.6 新游戏

在游戏进行过程中,往往会因某种原因会重新开始游戏,玩家不可能重新开启游戏客户端,为了给玩家更好的游戏体验,设置重新开始游戏是必不可少的功能。

重新开始游戏后,会重新排列棋子返回原位。以下是红子“车”的排列方法,通过坐标把相应的棋子排列,其它棋子排列与此方法相似,只是坐标不同。

//重新排列每个棋子的位置

//车

for (i=0,k=10;i<2;i++,k+=385)

{

play[i].setBounds(k,10,40,40);

}

4.2.7 保存与打开

在一个系统中保存与打开文件是必不可少的操作,保存一个游戏进度可以省去很多不必要的麻烦,当对弈双方遇到得不暂停游戏的情况,双方又不想轻易放弃此局,保存游戏进度的功能就非常人性化的解决了这个问题,以下就是保存游戏进度的相关代码,通过文件流的方式把内存里的数据读出来,在保存在一个新的文件中,并保存所有棋子的坐标是否可见和哪方吃子。

try

{//保存对话框

JFileChooser jfcSave = new JFileChooser("保存当前棋局");

int v=jfcSave.showSaveDialog(this);

if (v != JFileChooser.CANCEL_OPTION)

姓名:中国象棋对弈系统

{

FileVar.removeAllElements();

//保存所有棋子的坐标和是否可见

for (int i=0;i<32;i++)

{

FileVar.addElement(new Integer(play[i].getX()));

FileVar.addElement(new Integer(play[i].getY()));

FileVar.addElement(new Boolean(play[i].isVisible()));

}

//保存当前该哪方吃棋

FileVar.add(text.getText());

//保存到文件

FileOutputStream fileOut = new

FileOutputStream(jfcSave.getSelectedFile());

ObjectOutputStream objOut = new ObjectOutputStream(fileOut);

objOut.writeObject(FileVar);

objOut.close();

fileOut.close();

}

打开理论上和保存一样,首先会弹出一个对话框“打开”,会删除集合里的所有信息,删除过后,打开文件所获得的数据并获得集合内所有棋子的坐标而且被吃掉的棋子不显示,在信息提示框提示当前该那方走子。

try

{//打开对话框

JFileChooser jfcOpen = new JFileChooser("打开棋局");

int v=jfcOpen.showOpenDialog(this);

if (v != JFileChooser.CANCEL_OPTION)

{

//删除集合所有信息

Var.removeAllElements();

FileVar.removeAllElements();

//打开文件获得所有数据

FileInputStream fileIn = new

FileInputStream(jfcOpen.getSelectedFile());

ObjectInputStream objIn = new ObjectInputStream(fileIn);

FileVar = (Vector)objIn.readObject();

fileIn.close();

objIn.close();

//集合内容对应棋子坐标

int k=0;

XXXX本科毕业设计(论文)

for (int i=0;i<32;i++)

{

play[i].setBounds(((Integer)FileVar.get(k)).intValue(),((Integer)FileVar .get(k+1)).intValue(),40,40);

//被吃掉的棋子不显示

if (!((Boolean)FileVar.elementAt(k+2)).booleanValue())

{

play[i].setVisible(false);

}

k+=3;

}

//当前该哪方棋子走棋

if (((String)https://www.sodocs.net/doc/0816118363.html,stElement()).toString().equals(" 红棋走棋"))

{

text.setText(((String)https://www.sodocs.net/doc/0816118363.html,stElement()).toString());

chessPlayClick = 2;

}

else if

(((String)https://www.sodocs.net/doc/0816118363.html,stElement()).toString().equals(" 黑棋走棋"))

{

text.setText(((String)https://www.sodocs.net/doc/0816118363.html,stElement()).toString());

chessPlayClick = 1;

}

else if

(((String)https://www.sodocs.net/doc/0816118363.html,stElement()).toString().substring(5).equals("胜利"))

{

text.setText(((String)https://www.sodocs.net/doc/0816118363.html,stElement()).toString());

chessPlayClick = 3;

}

}

4.2.8 悔棋

在棋类游戏中走错棋是经常存在的,也许误走,也许是走棋后发现危险想要取消上一步,甚至上几步的走棋。为了满足此种要求,该系统实现了悔棋功能,在取得双方同意的情况下,可以回一步,也可以连续回几步,知道双方满意为止。通过获得setVisible属性值获得X和Y坐标并获得索引赋给棋子,然后删除用过的坐标,停止棋子闪烁。

//获得setVisible属性值

姓名:中国象棋对弈系统

String S = (String)Var.get(Var.size()-4);

//获得X坐标

int x = Integer.parseInt((String)Var.get(Var.size()-3));

//获得Y坐标

int y = Integer.parseInt((String)Var.get(Var.size()-2));

//获得索引

int M = Integer.parseInt((String)Var.get(Var.size()-1));

//赋给棋子

play[M].setVisible(true);

play[M].setBounds(x,y,40,40);

if (play[M].getName().charAt(1) == '1')

{

text.setText(" 黑棋走棋");

chessPlayClick = 1;

}

else

{

text.setText(" 红棋走棋");

chessPlayClick = 2;

}

//删除用过的坐标

Var.remove(Var.size()-4);

Var.remove(Var.size()-3);

Var.remove(Var.size()-2);

Var.remove(Var.size()-1);

//停止旗子闪烁

chessManClick=false;

}

catch(Exception e){}

}

4.3棋子移动和吃棋规则

4.3.1 本节说明

俗话说“无规矩不成方圆”,在本系统中也存在各种规则,对各棋子的移动和吃子都有严格的限制。本系统的所有棋子移动和吃棋规则都在类CheseRule中。

相关主题