java中国象棋报告
基于java语言的中国象棋设计与实现
基于java语⾔的中国象棋设计与实现题⽬:基于JA V A语⾔的中国象棋设计与实现毕业设计(论⽂)原创性声明和使⽤授权说明原创性声明本⼈郑重承诺:所呈交的毕业设计(论⽂),是我个⼈在指导教师的指导下进⾏的研究⼯作及取得的成果。
尽我所知,除⽂中特别加以标注和致谢的地⽅外,不包含其他⼈或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历⽽使⽤过的材料。
对本研究提供过帮助和做出过贡献的个⼈或集体,均已在⽂中作了明确的说明并表⽰了谢意。
作者签名:⽇期:指导教师签名:⽇期:使⽤授权说明本⼈完全了解⼤学关于收集、保存、使⽤毕业设计(论⽂)的规定,即:按照学校要求提交毕业设计(论⽂)的印刷本和电⼦版本;学校有权保存毕业设计(论⽂)的印刷本和电⼦版,并提供⽬录检索与阅览服务;学校可以采⽤影印、缩印、数字化或其它复制⼿段保存论⽂;在不以赢利为⽬的前提下,学校可以公布论⽂的部分或全部内容。
作者签名:⽇期:【摘要】电脑在中国象棋上的运⽤还刚刚起步,尽管国内涌现出⼀⼤批中国象棋的专业⽹站和专业软件,但是由于缺乏必要的基础⼯作,电脑技术在中国象棋上的应⽤优势还⽆法体现出来,随着⼈⼯智能及计算机硬件的发展,计算机象棋程序的⽔平也不断地得到提⾼。
本⽂通过研究中国象棋的国内外研究现状、分析中国象棋的需求和⽤JA V A 语⾔设计中国象棋程序的可⾏性,同时根据国际象棋程序设计的⼀些成功经验,主要借鉴了位棋盘、Zobrist键值等,针对中国象棋程序设计的⼀系列问题,总结出⼀些中国象棋程序的设计⽅法。
根据该⽅法设计出了符合中国象棋⾏棋和吃⼦规则,能够判断胜负,能够实现悔棋、重新开始等多种功能,⽽且界⾯⼗分美观的中国象棋程序,并给出了JA V A语⾔的实现⽅法。
关键词:中国象棋,位棋盘,Zobrist键值,着发⽣成【Abstract】The implement of playing Chinese Chess on computer has just started. Although large numbers of professional websites and professional chess software arised in domestic, the lack of necessary basic work causes the advantage of computer technology applications in Chinese chess can’t be reflected. With the development of artificial intelligence and computer hardware, the level of computer chess program continues to be improved.This paper studies the research status of Chinese chess, analyzes the demand of Chinese chess, and learns the feasibility of Chinese chess that is designed by Java language. At the same time, the function is designed with the successful experience of chess program, such as the place board, Zobrist keys, etc. Chinese chess program is summarized some ways to design Chinese chess program for solve a range of issues. Follow this ways, it designs all the rules and funtions which adapt to the requirement of Chinese chess, including of movement, judgement, undo, re-start and so on.The application gives the implementation method in JA V A language and beautiful interface.Keywords: Chinese Chess, bit board, zobrist keys⽬录1绪论 (1)1.1研究背景 (1)1.2研究意义 (1)1.3预期⽬标 (1)2分析 (3)2.1需求分析 (3)2.2可⾏性分析 (3)2.3功能分析 (3)2.4硬件环境 (4)2.4.1开发环境 (4)2.4.2运⾏环境 (4)3界⾯设计框架 (5)3.1程序的框架 (5)3.2.基本数据结构——位棋盘 (5)3.2.1 什么是位棋盘 (5)3.2.2 位棋盘的作⽤ (6)3.2.3 位棋盘的基本运算 (6)3.2.4 Java中位棋盘的实现 (6)3.3.基本数据结构——Zobrist键值 (9)3.3.1 ⽐较局⾯的⽅法 (9)3.3.2 Zobrist键值的⼯作原理 (9)3.3.3 Zobrist键值的实现⽅法 (10)3.3.4 Java中实现Zobrist键值 (10)4系统实现 (12)4.1着法⽣成 (12)4.1.1伪合法着法的⽣成 (12)4.1.2 合法着法的⽣成 (17)4.2算法实现 (20)4.2.1 ⾏棋规则算法实现 (20)4.2.2界⾯功能算法实现 (23)5结论 (26)参考⽂献 (27)附录 (28)附录1算法主程序 (28)附录2程序截图 (53)外⽂⽂献与翻译 (54)致谢 (63)1绪论1.1研究背景计算机现在已经成为每天⼯作和⽣活必不可少的⼀部分,电⼦游戏在计算机产业的带动下也逐步深⼊我们每个⼈的娱乐活动中,棋牌游戏作为休闲类电⼦游戏,相对于⾓⾊扮演类游戏和即时战略类游戏等其它游戏,具有上⼿快、游戏时间短的特点,更利于⽤户进⾏放松休闲,为⼈们所喜爱,特别是棋类游戏,⽅便、快捷、操作简单,在休闲娱乐中占主要位置。
中国象棋java版
这是我自己新编的中国象棋,发上来和大家共享我先说一下这个一共我创建了3个类需要把下面的代码分开copy,图片我不知道怎么弄了,只能你们自己弄了,你们可以看最后一个类,这个类也比较的小很好看懂的,图片的的路径弄好就可以了要是也想jar文件的,可以联系我,我的邮箱是suqin909@。
我希望能互相学习交流,因为我也是刚试着开始做的。
我把制作的好的文件也发上去只要解压就可以用了(电脑一定要装jdk,不要说你没有虚拟机,就想运行的。
)不过百度文库好像不能传压缩文件,我就不知道怎么办了。
要是用人告诉我好方法我也上传一个。
第一个类:package chess.test;import java.awt.Color;import java.awt.Container;import java.awt.Graphics;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.event.KeyEvent;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.KeyListener;import java.awt.image.BufferedImage;import java.io.File;//import java.io.IOException;import javax.imageio.ImageIO;//import javax.imageio.stream.ImageInputStream;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JToolBar;public class Chess extends JFrame implements MouseListener ,Runnable,KeyListener{ /****/private static final long serialVersionUID = 1L;//获取屏幕尺寸private int with=Toolkit.getDefaultToolkit().getScreenSize().width;private int height=Toolkit.getDefaultToolkit().getScreenSize().height;private BufferedImage bgImage =null;// private String isred = "红方先行";//标志是否有子//如果要时时变化就就要创建线程对像Thread t= new Thread();//记录棋子所在位置private boolean isXia = false;public static ChessMan chessBoard[][];//鼠标的位置int x;int y;//拿起棋子时的位置int Ox;int Oy;//初始状态下,棋盘上就有每个棋子//蓝方棋子private ChessMan LanChe1;private ChessMan LanChe2;private ChessMan LanMa1;private ChessMan LanMa2;private ChessMan LanXiang1;private ChessMan LanXiang2;private ChessMan LanShi1;private ChessMan LanShi2;private ChessMan LanJiang;private ChessMan LanPao1;private ChessMan LanPao2;private ChessMan LanBing1;private ChessMan LanBing2;private ChessMan LanBing3;private ChessMan LanBing4;private ChessMan LanBing5;//红方棋子private ChessMan HongChe1;private ChessMan HongChe2;private ChessMan HongMa1;private ChessMan HongMa2;private ChessMan HongXiang1;private ChessMan HongXiang2;private ChessMan HongShi1;private ChessMan HongShi2;private ChessMan HongJiang;private ChessMan HongPao1;private ChessMan HongPao2;private ChessMan HongBing1;private ChessMan HongBing2;private ChessMan HongBing3;private ChessMan HongBing4;private ChessMan HongBing5;// private boolean canEat = false;// //工具栏// JToolBar jmain;// //重新开始// JButton anew;// //悔棋// JButton repent;// //打开// JButton showOpen;// //保存// JButton showSave;// //退出// JButton exit;//// //当前信息// JLabel text;//临时棋子private ChessMan temChessMan = null;public Chess(){this.setTitle("中国象棋"+101/50);this.setSize(530,630);this.setLocation((with-530)/2, (height-630)/2);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/*//窗格Container con = null;//获行客格引用con = this.getContentPane();con.setLayout(null);//创建工具栏jmain = new JToolBar();text = new JLabel(" 热烈欢迎");text.setToolTipText("提示信息");anew = new JButton(" 新游戏" );anew.setToolTipText("重新开始新的一局");exit = new JButton(" 退出");exit.setToolTipText("退出本程序");repent = new JButton(" 悔棋");repent.setToolTipText("返回到上次走棋的位置");showOpen = new JButton("打开");showOpen.setToolTipText("打开以前棋局");showSave = new JButton("保存");showSave.setToolTipText("保存当前棋局");//把组件添加到工具栏jmain.setLayout(new GridLayout(0,6));jmain.add(anew);jmain.add(repent);jmain.add(showOpen);jmain.add(showSave);jmain.add(exit);jmain.add(text);jmain.setBounds(0,500,450,30);con.add(jmain);*/StaticValue.init();t.start();//添加KeyListenerthis.addKeyListener(this);this.addMouseListener(this);// chess=new int [9][10];//调整棋子的两个变量;setChessMan();resetChessMan();this.setVisible(true);this.repaint();}//初始化每个棋子public void setChessMan(){LanChe1 = new ChessMan(55,75,nChe1,"LanChe1");LanChe2 = new ChessMan(455,75,nChe2,"LanChe2");LanMa1 = new ChessMan(105,75,nMa1,"LanMa1");LanMa2 = new ChessMan(405,75,nMa2,"LanMa2");LanXiang1 = new ChessMan(155,75,nXiang1,"LanXiang1");LanXiang2 = new ChessMan(355,75,nXiang2,"LanXiang2");LanShi1 = new ChessMan(205,75,nShi1,"LanShi1");LanShi2 = new ChessMan(305,75,nShi1,"LanShi2");LanJiang = new ChessMan(255,75,nJiang,"LanJiang");LanPao1 = new ChessMan(105,175,nPao1,"LanPao1");LanPao2 = new ChessMan(405,175,nPao1,"LanPao2");LanBing1 = new ChessMan(55,225,nBing1,"LanBing1");LanBing2 = new ChessMan(155,225,nBing1,"LanBing2");LanBing3 = new ChessMan(255,225,nBing1,"LanBing3");LanBing4 = new ChessMan(355,225,nBing1,"LanBing4");LanBing5 = new ChessMan(455,225,nBing1,"LanBing5");HongChe1 = new ChessMan(55,525,StaticValue.HongChe1,"HongChe1");HongChe2 = new ChessMan(455,525,StaticValue.HongChe2,"HongChe2");HongMa1 = new ChessMan(105,525,StaticValue.HongMa1,"HongMa1");HongMa2 = new ChessMan(405,525,StaticValue.HongMa2,"HongMa2");HongXiang1 = new ChessMan(155,525,StaticValue.HongXiang1,"HongXiang1");HongXiang2 = new ChessMan(355,525,StaticValue.HongXiang2,"HongXiang2");HongShi1 = new ChessMan(205,525,StaticValue.HongShi1,"HongShi1");HongShi2 = new ChessMan(305,525,StaticValue.HongShi2,"HongShi2");HongJiang = new ChessMan(255,525,StaticValue.HongJiang,"HongJiang");HongPao1 = new ChessMan(105,425,StaticValue.HongPao1,"HongPao1");HongPao2 = new ChessMan(405,425,StaticValue.HongPao2,"HongPao2");HongBing1 = new ChessMan(55,375,StaticValue.HongBing1,"HongBing1");HongBing2 = new ChessMan(155,375,StaticValue.HongBing2,"HongBing2");HongBing3 = new ChessMan(255,375,StaticValue.HongBing3,"HongBing3");HongBing4 = new ChessMan(355,375,StaticValue.HongBing1,"HongBing4");HongBing5 = new ChessMan(455,375,StaticValue.HongBing1,"HongBing5");}public void paint(Graphics g){BufferedImage image =new BufferedImage(530,595,BufferedImage.TYPE_3BYTE_BGR) ;Graphics g2 = image.createGraphics();try{bgImage = ImageIO.read(new File(System.getProperty("user.dir")+"/bin/chessImage2.jpg"));}catch(Exception e){e.printStackTrace();}// System.out.println(System.getProperty("user.dir")+"/bin/"+"1.jpg");//一般情况下应该先绘制背景,因为是先绘制的先显示,//如果背景最后绘制,那么背景会覆盖其他已绘制的。
中国象棋实验报告
本科学生综合性实验报告课程名称:Java程序设计中国象棋项目成员学号班级B02班项目名称中国象棋指导教师开课学期2013 至2014 学年第1 学期完成时间2013 年12 月25 日1.引言 (1)1.1开发背景 (1)1.2国内外象棋发展状况 (1)1.3开发目标 (2)1.4开发环境 (2)2.设计思路 (2)2.1设计步骤 (2)2.2设计流程图 (3)3.设计技术 (3)3.1io技术 (3)3.2多线程 (4)3.3swing (4)4.设计规则 (4)4.1走棋规则 (4)4.2吃棋规则 (4)5.代码实现 (4)6.程序测试 (5)6.1步骤一:点击运行 (5)6.2步骤二: (6)7.总结与提升 (10)1.引言1.1开发背景中国象棋游戏流传至今已经有数千年的历史了,是一种古老的文化,它集文化、科学、艺术、竞技于一体,有利于开发人的智慧,锻炼人的思维,培养人的毅力,增强人的竞争意识。
自从计算机发明,向各个领域发展,到成为我们现在每天工作和生活必不可少的一部分的这个过程中,电子游戏也逐步渗入我们每个人的娱乐活动中。
在计算机已经普及的今天,对于可以用计算机进行程序编辑的人来说,开发属于自己的游戏,已经不再是梦想,中国象棋历史悠久不仅源远流长,而且基础广泛,作为一项智力运动更成为我们游戏开发的首选对象。
中国象棋是一项智力游戏,以往都是人和人下棋,现在有了计算机我们可以和计算机竞技,人可以与计算机进行对弈。
控制计算机的是人类,而人工智能是综合性很强的一门边缘学科,它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。
因此,对游戏开发过程中的人工智能技术的研究自然也就成了业界的一个热门研究方向。
1.2国内外象棋发展状况中国象棋游戏流传至今已经有数千年的历史了,是一种古老的文化,它集文化、科学、艺术、竞技于一体,有利于开发人的智慧,锻炼人的思维,培养人的毅力,增强人的竞争意识。
中国象棋棋谱设计Java课程设计实验报告
课程设计报告课程名称:Java程序设计设计题目:中国象棋棋谱设计专业:信息与计算科学班级:信111**:***学号:**********指导教师:***河北建筑工程学院数理系2014 年5 月5 日一、基本界面设计:1.棋子的设计;(1)声明一个ChessPiece类,完成各个棋子的外观设计;public class ChessPiece extends JLabel{String name;Color backColor=null,foreColor;String 颜色类别=null;ChessBoard board=null;{int j=0;for(j=minJ+1;j<=maxJ-1;j++){if(point[startI][j].isPiece()){可否走棋=false;break;} }if(j==maxJ){可否走棋=true;}}else if(startJ==endJ) { int i=0;for(i=minI+1;i<=maxI-1;i++) { if(point[i][startJ].isPiece()){可否走棋=false;break;} }if(i==maxI){可否走棋=true;}}else{可否走棋=false;}}else if(piece.getName().equals("马"))…..//以及各个棋子规则的设计(5)实现棋子按对弈规则的移动并记录棋子移动的位置;界面如下:e=SwingUtilities.convertMouseEvent(piece,e,this); } if(e.getSource()==this){if(move&&piece!=null){x=e.getX(); y=e.getY();if(红方走棋&&((piece.棋子类别()).equals(红方颜色))){piece.setLocation(x-piece.getWidth()/2,y-piece.getHeight()/2);}if(黑方走棋&&(piece.棋子类别().equals(黑方颜色))){ piece.setLocation(x-piece.getWidth()/2,y-piece.getHeight()/2);}}}} public void mouseReleased(MouseEvent e){ …}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}public void mouseClicked(MouseEvent e){ }}2.图中中国象棋是个菜单包括制作棋谱、保存棋谱、演示棋谱三个菜单项(1)保存棋谱设计界面为:当你制作棋谱文件时可以选择路径保存棋谱文件(2)演示棋谱设计界面为:A.可以从文件中选择你要演示的棋谱文件B选择文件后开始演示棋谱文件自动演示中可以按照你设计棋谱时的步骤一次生成保存的棋谱文件,也可以设置时间间隔,使得生成文件时一步和下一步的时间安装你设置的时间进行,也可以收手动操作,一步一步的进行。
基于Java的中国象棋游戏设计 论文03854
本科毕业论文(设计)题目:基于Java的中国象棋游戏设计摘要:随着社会的发展,科学技术不断提高,人们的娱乐活动不断地增加,中国象棋作为中华民族的传统文化,不仅在国内深受群众喜爱,而且流传国外。
开发中国象棋游戏软件,推广我们传统的象棋文化。
本文通过运用Java语言、软件工程的知识,参考网上一些文献资料的设计思路,开发出中国象棋对弈游戏系统,程序实现了游戏计时、悔棋、和棋、认输等功能。
通过对系统进行详细地需求分析,设计出了系统的逻辑模型,并且对各个功能进行了详细的分析,对中国象棋规则进行了详细地算法描述,最后对该程序的功能进行了测试与总结。
关键词:JA V A;中国象棋;对弈;游戏目录1 绪论 (1)1.1 项目开发的背景及意义 (1)1.2 研究现状及发展趋势 (1)1.3 研究目标 (1)2 可行性研究 (2)2.1 技术可行性 (2)2.1.1 使用java技术的优点 (2)2.1.2 Eclipse简介 (3)2.2 经济可行性 (3)2.3 社会可行性 (3)3 需求分析及总体设计 (4)3.1 需求分析 (4)3.2 总体设计 (4)3.2.1 总体结构设计 (4)3.2.2 棋盘棋子的设计 (5)3.3 类图说明 (6)4 详细设计 (9)4.1 程序流程设计 (9)4.2 开始游戏设计 (9)4.3 功能设计 (12)4.3.1 计时功能 (12)4.3.2 悔棋功能 (12)4.3.3 求和和认输 (12)4.3.4 信息帮助 (13)4.4 界面设计 (14)4.5 走棋和吃棋规则设计 (14)5 系统测试与总结 (16)5.1 系统测试 (16)5.1.1 系统功能测试 (16)5.1.2 运行效果测试 (17)5.2 总结与展望 (18)参考文献 (20)1 绪论1.1项目开发的背景及意义随着电子信息技术的不断发展以及网络技术的普及,网络能够提供多样、便捷的服务,已经成为人们生产生活中不可缺少的重要组成部分。
中国象棋打谱系统 JAVA课程设计报告
题目中国象棋打谱系统第一章总体设计1.1本系统的主要功能中国象棋打谱系统可以把对弈过程保存成文件,并可以重新演示对弈过程,即复盘。
1.2系统包含的类及类之间的关系本系统共包括10个java源文件。
如图1-1所示。
图1-1 类之间的关系2.2 java源文件及其功能1.ChinaChess.java该文件负责创建中国象棋打谱系统的主窗口。
2.ChessBoard.java该文件负责创建键盘。
3.ChessPiece.java该文件负责创建棋盘中的棋子。
4.Point.java该文件负责确定棋子在棋盘中的位置。
5.ChessBox.java该文件负责创建棋盘中的棋盒。
6.InitPieceLocation.java该文件负责安排棋子在棋盘中的初始位置。
7.InitCanju.java该文件使用户需要制作残局棋谱时,棋盘的开局要由用户来确定。
8.HandleMouse.java该文件负责处理鼠标事件,以便用户拖动棋子走棋。
9.MoveRule.java该文件负责验证用户的走法是否符合象棋规则。
10.DemoManulDialog.java该文件负责演示棋谱。
第二章详细设计2.1主类ChinaChess.java(1)成员变量见表2-1(2)方法见表2-2(3)源代码见文件ChinaChess.java2.2类ChessBoard(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件ChessBoard.java 2.3类ChessPiece(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件ChessPiece.java 2.4类Point(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件Point.java 2.5类ChessBox(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件ChessBox.java2.6类InitPieceLocation(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件InitPieceLocation.java 2.7类InitCanju(1)成员变量见表2-3(2)方法见表2-4表2-4 主要方法(3)源代码见文件InitCanju.java 2.8类HandleMouse(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件HandleMouse.java 2.9类MoveRule(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件MoveRule.java2.10类DemoManulDialog(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件DemoManulDialog.java第三章运行效果3.1 系统主界面图3-1 系统主窗口3.2 ×××录入界面。
中国象棋游戏开发设计报告
中国象棋游戏开发设计报告班级:小组编号:小组成员:指导老师:一、开发的目的和意义面向对象程序设计作为一门软件设计的课程,具有极强的实践性,要求学生具备灵活应用理论知识的能力及面向对象程序设计技能的基础。
通过游戏开发,学生能了解C++面向对象的设计方法与技巧,有效地、深刻地理解课程内容,体会理论、方法和设计原则,培养分析实际问题和解决问题的能力,具备使用面向对象程序设计开发工具设计实际系统的能力。
还能够了解并通过使用MFC,掌握一种可视化编程的方法,并通过游戏的开发加深对可视化编程的理解。
同时,可以提高运用C++编程语言解决实际问题的能力。
棋牌游戏属于休闲类游戏,具有上手快、游戏时间短的特点,更利于用户进行放松休闲,为人们所喜爱,特别是棋类游戏,方便、快捷、操作简单,在休闲娱乐中占主要位置。
中国象棋作为中国自古以来的经典棋牌游戏之一,一直都是人之间的较量,将中国象棋制作成游戏,可以实现人与计算机之间的对弈。
而且人工智能是综合性很强的一门边缘学科,它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。
开发出了计算机象棋游戏,以后不仅仅可以进行休闲游戏,还能锻炼自己的智力和象棋技术,更加方便了人们的日常生活。
二、功能描述和分析(用户需求分析)2.1 开发背景我们周围有许多同学喜欢下象棋,尤其是男同学,希望能有人可以和自己下象棋,但这种意愿常因为受到条件的限制而难以如愿,比如说需要身边刚好有现成的棋盘棋子,比如说需要是同样懂得中国象棋的对手,但是大家都知道我们这所大学男性同学占少数,即便是条件都满足了,还要考虑这位对手是否有何自己下棋的心情。
这时,如果有一台计算机,一个能够支持人机对弈的程序,上面的问题迎刃而解。
而我们小组的这个想起游戏设计,正是希望能够做出一款拥有良好性能,良好的智能,能够满足大多数爱好象棋的同学的需求中国象棋人机对弈程序。
2.2 用户需求分析一款能够与用户对弈,满足用户需求的中国象棋程序,需要有棋盘棋子的局面、鼠标响应控制棋子移动、棋子的走法规则、人机对弈的搜索算法、避免异常引入的多线程、胜负判断,具体分析如下:2.2.1 棋盘棋子的局面作为中国象棋的这项游戏,其必不可少的是就是棋子和棋盘,没有这两个部分,想起功能无法实现,不仅仅如此,如果,仅仅有棋子和棋盘,而没有将两者结合起来,那么,也将无法实现中国象棋的游戏功能,所以,棋子和棋盘的设计在这个游戏设计中至关重要。
java象棋课程设计报告书
课程名称:JAVA课程设计题目:“网络象棋”游戏的设计与开发系名:信息工程系专业班级:软件工程姓名:学号:指导教师:2012年 6 月18日课程设计任务书学生:专业班级:指导教师:工作单位:信息工程系设计题目:“网络象棋”游戏的设计与开发初始条件:《网络象棋》,网络版的棋类游戏。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)使用JAVA开发一个网络版的象棋游戏。
该游戏包括网络功能,棋盘功能和辅助功能。
本系统使用JAVA SWING技术和事件处理机制进行棋盘界面的设计,开发和功能实现, 使用Socket网络编程和多线程技术进行多客户端之间的对战。
系统总体架构如下:设计报告撰写格式要求:一、课程设计说明书(或报告书)正文容【设计题目】例如:“即时通”网络通信系统的设计与开发【开发环境】硬件环境:微机系列,存在1G以上,软件环境:Microsoft Windows XP 【开发工具】 NetBeans IDE【完成时间】2012.6 .4-----2012.6.15【需求分析】分析阐述要实现的系统应具有什么样的功能。
【系统总体设计方案】在明确了所要解决的问题后,很自然地就要提出自己解决问题的思路和方案。
让读者了解方案的总体设计和关键技术。
要阐述自己的设计方案,说明为什么要选择或设计这样的方案。
具体包括:系统总的设计思路,体系结构, 总体架构, 功能模块图;各功能模块所要达到的设计目标的简单介绍;设计的数据字典(数据库、表的结构);使用的设计软硬件环境和开发技术和平台等。
【系统详细设计】在这部分中,要将整个开发工作的容进行详细的介绍。
一般按照功能模块分成几部分来介绍。
每部分应包括文字叙述、界面图片、关键实现技术(操作或代码)等几个方面综合说明问题。
【系统调试和测试】调试:介绍设计过程中遇到的问题和解决方法。
测试:介绍如何测试系统,测试中发现的问题和解决方案。
【结束语】这部分篇幅不大,对整个设计中做的工作、获得的成果、心得体会等做一个简单小结。
Java实训项目中国象棋设计报告
广西科技大学鹿山学院面向对象程序设计实训报告题目:网络中国象棋系别:电气与计算机工程系专业班级:计软141班姓名:邓康言学号: 20141409成绩评定:指导教师签字:2016 年 1 月10 日目录目录1、需求分析1.1 开发的背景·中国象棋有着悠久的历史,象棋爱好者更是不计其数,但是由于人们的工作地点从、时间的限制,原始的那种面对面的下棋方式已经不再适应人们的生活,人们已经开始走向网络象棋博弈·网络象棋有着很多的优点,通过网络象棋,对弈的双方是网络上任意的两个象棋爱好者,甚至是不认识。
网络让对弈的范围更加的广泛,让象棋爱好者可以与更多的象棋爱好者切磋棋艺。
1.2 算法·指定服务器端口号·支持多人同时在线··显示在线用户信息·显示当前在线所有用户·从在线用户列表中选择玩家进行挑战·接受或拒绝挑战1.3 要求·用Java语言实现系统,源程序要有适当的注释,使程序容易阅读·函数功能要划分好(结构化程序设计)·可以增加新功能模块2、总体分析与设计2.1 总体设计方案·系统功能模块图:2.2 功能描述2.2.1服务器端·可以指定服务器端口号。
·可以支持多人同时在线。
·可以显示在线用户信息。
·不允许玩家同名2.2.2客户端·能够通过主机IP号及端口号登陆到服务器。
·可以显示当前在线所有用户。
·可以从在线用户列表中选择玩家进行挑战。
·可以接受或拒绝挑战。
·如果对方在和其他玩家对弈中,则应该给与相应的提示信息。
·象棋规则一定要严密。
·棋子样式采用最普通的橡胶式象棋。
棋子为黑色,字为红色和白色2.3 算法设计----本程序功能模块根据程序设计的需要。
综合程序的实用性、智能化的考虑。
中国象棋java源码
东北大学秦皇岛分校信息与计算科学系Java程序设计实验报告专业名称信息与计算科学班级学号*******学生姓名彭军指导教师王薇完成时间2011.04.15一、设计题目中国象棋。
二、设计说明2.1 引言象棋水平的发展是需要靠信息技术来推动的,国际象棋有两个很好的范例,一个是象棋棋谱编辑和对弈程序的公共平台——WinBoard平台,另一个是商业的国际象棋数据库和对弈软件——ChessBase,他们为国际象棋爱好者和研究者提供了极大的便利。
国际象棋软件有着成功的商业运作,已发展成一种产业。
然而,电脑在中国象棋上的运用还刚刚起步,尽管国内涌现出一大批中国象棋的专业网站和专业软件,但是由于缺乏必要的基础工作,电脑技术在中国象棋上的应用优势还无法体现出来。
在设计中国象棋软件过程中,国际象棋软件有很多值得借鉴的成功经验和优秀的思想。
例如B. Moreland,微软(Microsoft)的程序设计师,业余从事国际象棋引擎Ferret的开发,他的一系列关于国际象棋程序设计的文章非常值得其他棋类程序设计人员借鉴。
然而,中国象棋与国际象棋存在着很大的差异,因此国际象棋的某些成熟技术,无法直接应用于中国象棋,需要对其加以改进和创新。
本文针对中国象棋程序设计的一系列问题,总结出一些搜索引擎的设计方法,并给出java 语言的实现2.2程序的设计及实现本系统主要有以下4个模块,每个模块对应一个程序包:1、engine:搜索引擎包,系统的核心部分。
2、message:网络对战过程中各种消息及其传递机制的类实现包。
3、main:主界面实现包。
4、pieces:棋子及其相关类实现包。
现就各个包中的要点给与说明。
2.2.1 搜索引擎的实现(engine包)(1) BitBoard.java:位棋盘的实现,见2.4节。
(2) CCEvalue.java:评价函数知识类。
本程序使用开源软件“梦入神蛋”的快速评价函数。
该函数包含子力价值和棋子所在位置的奖励值。
java中国象棋课程设计系统
贵州航天职业技术学院Java课程设计报告————中国象棋专业:软件技术班级:软件(1)班学号: A093GZ053020129姓名:龚吉祥指导老师:肖宏启时间: 2011 – 6 - 01目录摘要21绪论 (3)1. 1休闲类游戏开发简述 (3)1. 2中国象棋发展现状 (4)2相关技术简介 (4)2. 1面向对象程序设计方法 (5)2. 2 Java技术 (5)3需求分析 (5)3. 1系统功能需求 (5)3. 2系统功能实现分析 (5)3. 3小结 (6)4系统总体设计 (6)4. 1设计内容 (6)4. 2系统结构图 (7)4. 3游戏流程图 (9)5系统实现与测试 (11)5. 1系统开发环境 (11)5. 2系统实现 (11)5. 3系统测试 (21)6总结 (21)参考文献 (21)附录 (25)摘要【摘要】随着信息技术的飞速发展和日趋激烈的商业竞争,企业已不再满足于独立、零散的办公自动化应用,企业需要的是协同工作、综合、集成化的解决方案。
而网络是解决由于物理距离造成的信息交流不畅、协商沟通不便的办公瓶颈问题的最佳方式。
企业网上办公自动化通过对各办公自动化要素的闭环整合,实现了工作流、信息流、知识流和办公自动化系统的整合管理,提供了一个科学、开放、先进的信息化办公平台,实现办公自动化,并进行远程办公或在家办公。
企业网上办公自动化将人从繁琐、无序、低序、低端的工作中解放出来从事核心事务,整体提高了单位办事效率和对信息的可控性,降低办公成本,提高执行力,使管理趋于完善。
中国象棋被誉为中国的国粹,从诞生到现在已经成为国人最喜欢的棋类竞技游戏,对青少年的影响也是很广泛。
双方在象棋的对弈过程中,体验着智慧和快乐,可以说中国象棋游戏完全代表了博弈游戏。
中国象棋游戏的设计工作是非常复杂和重要的,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。
在这个游戏的设计中,将牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中还会应用类的继承机制以及一些设计模式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
贵州航天职业技术学院Java课程设计报告专业:计算机软件技术班级:09软件二学号:A093GZ053020152 姓名:韦治成指导老师:肖宏启时间:目录摘要 ------------------------------------------------------------------- 3【摘要】 ------------------------------------------------------------ 3【关键字】 --------------------------------------------------------- 4系统概述 ---------------------------------------------------------------- 41.棋盘表示 ---------------------------------------------------------- 43.人人对弈 ---------------------------------------------------------- 4系统分析 ---------------------------------------------------------------- 41. 设计内容--------------------------------------------------------- 42. 设计要求--------------------------------------------------------- 53.中国象棋软件-------------------------------------------------- 6 4.运行效果-------------------------------------------------------- 8系统设计 ---------------------------------------------------------------- 81.总体设计 ---------------------------------------------------------- 8运行界面: ------------------------------------------------------- 102.运行输出结果 -------------------------------------------------- 103.总结与说明 ----------------------------------------------------- 114.象棋界面实现: ----------------------------------------------- 115.对弈功能的实现: -------------------------------------------- 15 参考文献 -------------------------------------------------------------- 16中国象棋摘要【摘要】中国象棋系统将计算机知识和中国象棋知识结合起来的一种新型的游戏方式。
本文结合在中国象棋机器博弈方面的实践经验,在分析了中国象棋游戏需求基础上,设计并实现了中国象棋系统。
该系统为人人对战。
人人对战规则明确,包含了中国象棋所有的招法。
方便了不同水平人群的不同选择,其它些小功能也增加了本象棋游戏增加了乐趣。
本系统的实现满足了人们对中国象棋的基本需求,解决了传统象棋游戏学习性差、不易演示等问题。
【关键字】中国象棋,人人对战系统概述1.棋盘表示棋盘表示就是使用一种方法来描述棋盘及棋盘上的棋子,以方便计算机处理。
中国象棋的棋盘表示还没有形成统一的或者公认的哪种为最佳的数据格式。
最直观也是最典型的方式是使用10x9的二维棋盘数组表示,也有使用棋子数组。
2.走法生成走法生成就是找到某个局面所有合法的走法。
它与棋盘表示的数据结构密切相关,一般需要大量繁琐的判断,伴随着搜索进行,并且调用频繁,是相当复杂而且耗费运算时间。
在一定程度上形成了程序的性能瓶颈。
当前为了提高着法生成的效率通常采用以空间换时间的方法:与先求出棋子的在某位置的所有走法(有此功能模块,但未完无全实现)。
3.人人对弈用来在单机状态下,还未连网的状态下实现同一台电脑多人或一人的操作,或在后期的自我研习而用。
系统分析1. 设计内容中国象棋打谱软件提供给用户的一个能将对弈过程保存成文件并可以重新演示对弈过程即复盘2. 设计要求1. 中国象棋是双方在有着9条竖线和10条横线的棋盘上对弈,对弈的竖线与横线的交叉点称做棋点,每个棋子都是在棋点上行走而不是在方格中行走河界将棋盘分成两个等份。
每一边都有一块由9个点组成的九宫棋子。
将、帅、士只能在九宫内移动,并且将帅每一步只可以水平或垂直移动一个棋点。
士,它只能在九宫内移动,并且它每一步只可以沿对角线方向移动一个棋点;象,它必须一步沿对角线方向走两个棋点,但它既不能过河,也不能跳过或穿越障碍,即象在走的过程中不能被别眼;马,每一步只可以水平或垂直移动一个棋点,但必须按对角线方向,向左或右移动,中国象棋的马不能跳过障碍,即在走的过程中不能被别腿;车,可以水平或垂直方向移动任意个无阻碍的点;炮,移动起来和车很类似,但它必须跳过一个棋子来吃掉对方的一个棋子,被跳过的那个棋子称为桥或者屏风;兵,每步只能向前移动一个棋点,过河以后,它便增加了向左右移动的能力,兵不允许向后移动。
2.单击“中国象棋”菜单可以选择“制作棋谱”、“保存棋谱”和“演示棋谱”菜单项。
3.选择“制作棋谱”将出现相应的棋盘,该棋盘可进行实战对弈选择“保存棋谱”可以随时将对弈过程保存成一个棋谱文件,棋谱文件的扩展名可以任意指定选择“演示棋谱”,将出现打开文件对话框,用来选择曾保存过的棋谱文件,选择棋谱文件后,将出现用来演示棋谱的棋盘,用户可以选择自动或手动来演示对弈过程自动演示时还可以控制每步之间的间隔时间也可以暂停演示或继续演示等。
3.中国象棋软件共有8 个Java 源文件Chess.java该java 文件的类负责创建中国象棋的主窗口该文件含有main 方法程序从该类开始执行。
ChessBoard.java该文件生成的类负责创建“对弈棋盘”对象,用户可以用鼠标拖动棋盘上棋子进行对弈当松开鼠标时将棋子固定到棋点,该棋盘使得用户不能将棋子拖放到非棋点上,棋盘的Rule对象负责判断走棋是否遵守了中国象棋的规则。
例如:马走日、象走田、小卒一去不回头等等,如果用户的走法不符合规则,棋子将被放回原处重新走,棋盘的MakeChessManual对象负责记录棋谱,当用户选择“保存棋谱”菜单时,可以将该棋谱保存成文件。
另外,该棋盘还能进行悔棋,悔棋不被记录到棋谱。
ChessPoint.java该文件生成的类负责创建棋盘的棋点对象,棋点对象可以判断该棋点上是否有棋子,可以指定当前棋点上的棋子,获取当前棋点上的棋子,移掉当前棋点上的棋子。
ChessPiece.java该文件生成的类负责创建棋子对象,并绘制棋子的外观。
棋子对象可以获取本身的颜色、大小和名字也可以设置和获取本身的类别红棋或黑棋。
MakeChessManual.java该文件生成的类负责创建记录棋谱的对象,该对象可以将棋谱记录到一个链表中,并在一个文本区中显示棋谱。
当对弈者悔棋时,该对象将修改棋谱,并更新文本区中的信息。
Rule.java该文件生成的类负责为创建走棋法则对象,该对象负责判断用户的走着是否遵守了中国象棋规则。
Demon.java该文件生成的类负责创建“棋谱演示”对象,该对象可以演示保存过的棋谱对象。
MoveStep.java该类创建的对象负责记录一步走棋。
4.运行效果将8个java 文件保存到一个文件夹中,比如:C \chess 将8个Java 文件分别编译生成相应的字节码(class)文件,然后用java 解释器运行主类。
C \ chess\java Chess效果如图:演示棋谱系统设计1.总体设计整个象棋系统将要实现的主要功能是:人人对战。
该系统的功能结构图如图所示:运行界面:2.运行输出结果对弈和保存棋谱3.总结与说明在程序代码基本完成后,经过不断的调试与修改,最后测试本次所涉及的人工智能象棋游戏能够正常运行。
人人对战,没有发现bug。
每一方所走步路都能够清晰显示出来,方便研究学习。
所有的基本功能都能够正常使用,没有出现明显的错误和漏洞,但是在一些细节方面仍然需要完善,比如系统界面不够美观,搜索算法还处在初级阶段导致电脑棋力不够强大。
还可以在游戏中加入一些声音的提示,在游戏完成和失败时弹出一些小的Flash动画,以便进一步增加游戏的趣味性。
总的来说本次设计在功能上已经基本达到要求,其他细节方面有待以后改善。
4.象棋界面实现:界面的实现分为棋盘的表示和棋子的表示两部分,棋盘和棋子通过数组连接起来,形成一个完整的界面系统。
首先定义一个棋子类(ChessPiece),来获取棋子的颜色以及类别:public class ChessPiece extends JLabel{String name;Color backColor=null,foreColor;String 颜色类别=null;ChessBoard board=null;int width,height;public ChessPiece(String name,Color fc,Color bc,int width,int height,ChessBoard board){=name;this.board=board;this.width=width;this.height=height;foreColor=fc;backColor=bc;setSize(width,height);setBackground(bc);addMouseMotionListener(board);addMouseListener(board);}public void paint(Graphics g){g.setColor(foreColor);g.fillOval(2,2,width-2,height-2);g.setColor(Color.white);g.setFont(new Font("隶书",Font.BOLD,28));g.drawString(name,7,height-8);g.setColor(Color.yellow);g.drawOval(2,2,width-2,height-2);}public int getWidth(){return width;}public int getHeight(){return height;}public String getName(){return name;}public Color 获取棋子颜色(){return foreColor;}public void set棋子类别(String 类别){颜色类别=类别;}public String 棋子类别(){return 颜色类别;}}然后在棋盘类(ChessBoard)里定义棋盘的表示、棋子的类别、颜色以及棋子在棋盘上的位置表示:public class ChessBoard extends JPanel implements MouseListener,MouseMotionListener{public ChessPoint point[][];public int unitWidth,unitHeight;int x轴长,y轴长;int x,y;boolean move=false;public String 红方颜色="红色",黑方颜色="黑色";ChessPiece 红车1,红车2,红马1,红马2,红相1,红相2,红帅,红士1,红士2,红兵1,红兵2,红兵3,红兵4,红兵5,红炮1,红炮2;ChessPiece 黑车1,黑车2,黑马1,黑马2,黑将,黑士1,黑士2,黑卒1,黑卒2,黑卒3,黑卒4,黑卒5,黑象1,黑象2,黑炮1,黑炮2;如何监视棋子在棋盘中移动和消失的实现:public void mousePressed(MouseEvent e)//按下鼠标时发生事件的情况{}public void mouseDragged(MouseEvent e){}public void mouseReleased(MouseEvent e){{record.记录吃掉的棋子(pieceRemoved) ;if(piece.棋子类别().equals(红方颜色)){}if(piece.棋子类别().equals(黑方颜色)){}record.记录棋谱(piece,startI,startJ,m,n) ;record.记录吃掉的棋子("没吃棋子");}实现界面后,就可以在此基础上实现象棋系统的其它功能。