Java黑白棋技术文档

合集下载

java课程设计---中国象棋对弈系统

java课程设计---中国象棋对弈系统

目录摘要 (1)关键字 (1)正文 (2)1、程序设计说明 (2)1.1 程序的设计及实现 (2)1.1.1搜索引擎的实现(engine包) (2)1.1.2信息传输机制(message包) (3)1.1.3棋子(pieces包) (3)1.2 主控模块(main包) (3)2、运行结果 (5)3、设计体会 (6)附件 (7)程序代码 (7)参考文献资料 (41)1中国象棋对弈系统Java语言程序设计实验报告实验项目名称:中国象棋对弈系统作者姓名与单位:李非计算机101摘要:本文主要是运用java实现具有一定功能的中国象棋对弈系统软件,主要功能如下:a、象棋对弈:红方先走,然后黑方再走,红黑交替,直到一方获胜。

b、新游戏:任何时候可以重新开始一盘新的对弈。

c、悔棋:当走错棋的时候可以悔棋。

d、信息提示:提示当前信息状态。

e、简单的帮助文档:象棋规则介绍、软件的简单介绍和编制说明关键词:java、中国象棋对弈系统2正文:一程序设计说明1.1程序的设计及实现本系统主要有以下4个模块,每个模块对应一个程序包:1、engine:搜索引擎包,系统的核心部分。

2、message:网络对战过程中各种消息及其传递机制的类实现包。

3、main:主界面实现包。

4、pieces:棋子及其相关类实现包。

现就各个包中的要点给与说明。

1.1.1 搜索引擎的实现(engine包)(1) BitBoard.java:位棋盘的实现,见2.4节。

(2) CCEvalue.java:评价函数知识类。

本程序使用开源软件“梦入神蛋”的快速评价函数。

该函数包含子力价值和棋子所在位置的奖励值。

子力价值分别是:帅-0, 仕- 40, 象-40, 马-88, 车-200, 炮-96, 兵-9。

帅是无价的,用0表示。

以马为例,位置的奖励值如下:0,-3,5,4,2,2,5,4,2,2,-3,2,4,6,10,12,20,10,8,2,2,4,6,10,13,11,12,11,15,2,0,5,7,7,14,15,19,15,9,8,2,-10,4,10,15,16,12,11,6,2,0,5,7,7,14,15,19,15,9,8,2,4,6,10,13,11,12,11,15,2,-3,2,4,6,10,12,20,10,8,2,0,-3,5,4,2,2,5,4,2,2上面的每行代表棋盘的一条纵线。

五子棋设计与实现完整版

五子棋设计与实现完整版

哈尔滨商业大学毕业设计(论文)五子棋的设计与实现学生姓名周玉春指导教师李恩林专业计算机科学与技术学院计算机与信息工程2010年06月02日Graduation Project (Thesis)Harbin University of CommerceThe Design and Implementationof GobangStudent Zhou YuchunSupervisor Li EnlinSpecialty Computer Science and Technology School Computer and Information Engineering2010 - 06 - 02毕业设计(论文)任务书姓名:周玉春学院:计算机与信息工程班级:2006级4班专业:计算机科学与技术毕业设计(论文)题目:五子棋的设计与实现立题目的和意义:本程序旨在用JA V A实现一个基本于C/S模式的五子棋网络对战游戏。

玩家作为客户端通过服务器端与其它玩家进行对战,聊天等功能。

通过实现本程序加深对计算机网络编程的了解。

技术要求与工作计划:开发环境:Intel core 2 duo 1.8GHz 1G内存160硬盘;Microsoft® Windows™XP Professional;JDK 1.50;Eclipse 3.3.2运行环境:IntelPentium® 2及以上处理器,32M以上内存,4G以上硬盘;Microsoft® Windows™ 9X/NT/XP 操作系统;800*600或以上的屏幕分辨率工作计划:第一阶段需求分析第二阶段系统设计第三阶段系统实现第四阶段论文初稿,程序调试第五阶段论文终稿,程序修订第六阶段准备论文答辩时间安排:1月--2月收集论文资料,确定毕业设计题目3月--4月实习和调研,编写开题报告4月--5月程序设计和调试5月--6月论文初稿6月--答辩论文终稿及答辩指导教师要求:(签字)年月日教研室主任意见:(签字)年月日院长意见:(签字)年月日毕业设计(论文)审阅评语一、指导教师评语:指导老师签字:年月日毕业设计(论文)审阅评语二、评阅人评语:评阅人签字:年月日毕业设计(论文)答辩评语三、答辩委员会评语:四、毕业设计(论文)成绩:专业答辩组负责人签字:年月日五、答辩委员会主任签章答辩委员会主任单位:(签章)答辩委员会主任职称:答辩委员会主任签字:年月日摘要随着互联网迅速的发展,网络游戏已经成为人们普遍生活中不可或缺的一部分,它不仅能使人娱乐,也能够开发人的智力,就像本文所主要讲的五子棋游戏一样能挖掘人们聪明的才干与脑袋的机灵程度。

计算机博弈之黑白棋

计算机博弈之黑白棋

JAVA黑白棋之算法浅析一、黑白棋人机博弈思想1.棋局阶段应合理划分(一般分为三个阶段),开局应尽量用优秀的定式之所以要使用开局定式,个人的观点为:即使最顶级的机器能够从第一步一直搜索到最后一步,也必然不能断定谁最终会赢,要不然这个游戏就没有存在的价值了。

基于上面的观点,必然走到某一种局面的时候,才可以断定输赢,当然这个输赢不是绝对的,更不是最终意义上的输赢,因为对方有可能不按最优路线行棋。

于是我们便需要利用优秀的开局为自己争取尽可能大的优势,迫使对方失误或者为自己争取胜利的保障。

2.稳定子具有绝对优势所谓稳定子,就是指再后续的行棋过程中始终不会被翻转的棋子。

最明显的稳定子就是角位置的棋子,同时当角位置被占取之后,角周围的棋子,尤其是两条边上的,也会较容易成为稳定子。

棋局终了时棋盘上的所有子都可以看做是稳定子。

当然,稳定子有绝对的优势,并不意味着我们见角就夺,比如斯通纳陷阱就是一个很好的例子。

3.内部子具有相对的优势所谓内部子,就是被一方的棋子围困在内部的另一方的棋子。

内部子的优势主要体现在:①内部子是半稳定子或者稳定子,不易被对方吃掉;②拥有较多的内部子,可以提高己方的行动力(可下子位置的数量),限制对方的行动力,从而更容易设置陷阱,迫使对方走出很差的棋步,进而使自己占有一定的优势。

4.边缘子具有相对的劣势所谓边缘子,可以看作是除去边角之外的周围有空位的棋子,或者可以理解为包围内部子且与内部子异色的周围有空位的棋子。

边缘子实际上是相对于内部子而言的,因为边缘子的劣势也恰好是与内部子相对的:①边缘子在现有棋局下多数是不稳定的,但在后续行棋过程中可能成为对方或者己方的稳定子;②为对方制造陷阱提供了更多的机会。

5.奇偶性理论所谓奇偶性,就是指如果在对弈过程中没有任何一方停步,那么当黑棋下完后,棋盘总会有奇数个空位,而当白棋下完后,棋盘总会有偶数个空位。

我们可以推断,如果没有任何一方停步,那么白棋会走完最后一步棋并应该略微占优一定的优势。

JAVA课程设计黑白棋

JAVA课程设计黑白棋

大连科技学院Java课程设计报告题目黑白棋小游戏学生姓名专业班级指导教师职称讲师所在单位教研室主任目录1.总体设计 (1)1.1功能要求 (1)1.2 系统性能要求 (1)2.总体设计 (1)2.1系统功能模块划分 (1)3.详细设计与实现 (4)3.1 测试分析 (4)附录1 软件源程序 (5)课程设计实践总结: (17)1.总体设计1.1功能要求本系统按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。

要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JA V A程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。

同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。

1.2 系统性能要求能够完整完成黑白棋游戏的对弈2.总体设计2.1系统功能模块划分为了实现黑白棋游戏的开发,通过流程图的分析,计划采用以下几大模块。

1、绘图模块:本模块用来负责主界面的绘制,包括棋盘、棋子、棋子个数的显示、以及其它需要显示的部分。

2、人机模块:人机模块是本程序得以运行的基础,并通过规则模块决定能否下子。

3、规则模块:本模块主要负责判断下棋是否符合规则。

4、按键模块:本模块通过判断用户按键的位置,判断出该坐标所处棋盘中响应位置。

2.2 游戏流程图图2.2-1落棋位置判图2.2-2输出成绩图2.2-3胜利结果3.详细设计与实现3.1 测试分析程序运行结果图3.1-1 开始界面图3.1-2 结束界面T参考文献[1] 王克宏编著JA V A语言入门清华大学出版社1996[2] 旭日工作室编著Java 1.1使用大全电子工业出版社1998[3][美]Cay S.Horstmann 程峰等译JA V A2核心技术机械工业出版社2003.6[4] Horstmann C S,Cornell G著Java2核心技术机械工业出版社2008.10[5] 马凡李璠编著JavaScript实例应用中国铁道出版社2001.01[6]朱喜福JA V A程序设计(第二版)上海:人民邮电出版社2007.3[7] 林胜利王坤茹JA V A优化编程(第二版)北京:电子工业出版社2008.10[8] 马军JA V A完全自学手册北京:机械工业出版社2006.5[9] 袁海燕王文涛编著JAVA实用程序设计上海:人民邮电出版社2009.11[10] 刘宝林程序设计与案例上海:高等教育出版社2004.6[11] 马凡李璠编著JA V A核心技术北京:机械工业出版社2000.8[12] 王克宏编著JA V A语言Applet编程技术北京:清华大学出版社2005.3[13] 施霞萍Java程序设计教程第2版机械工业出版社2006-6[14] 宛延闿实用Java程序设计教程机械工业出版社2006-1[15] 陈国君Java2程序设计基础清华大学出版社2006-8附录1 软件源程序import java.awt.*;import java.awt.event.*;import java.io.*;import .*;import javax.swing.*;import java.util.*;import java.awt.Font;public class Main{public static void main(String args[]){BlackAndWhiteDesign b = new BlackAndWhiteDesign();}}class BlackAndWhiteDesign extends Frame implements Runnable{ Go Background = new Go();boolean stepColor = true;int PORT;Socket sendSocket;//主动连接SocketPrintWriter writer;//用来发送messageboolean stopFlag;boolean isInitiative;Point messagePoint;Panel panel1 = new Panel();Panel panel2 = new Panel();Panel panel3 = new Panel();CheckboxGroup checkboxGroup1 = new CheckboxGroup();Checkbox checkbox1 = new Checkbox();Checkbox checkbox2 = new Checkbox();Label label1 = new Label();TextField textField1 = new TextField(10);Panel PtextField1 = new Panel();Button button1 = new Button();Label label2 = new Label();Choice choice1 = new Choice();Button button2 = new Button();Button button3 = new Button();BorderLayout borderLayout3 = new BorderLayout();Panel panel4 = new Panel();Panel panel4_1 = new Panel();Panel panel4_2 = new Panel();Panel panel4_3 = new Panel();Label label3 = new Label("黑棋");Label label4 = new Label("白棋");JTextArea BlackNumber = new JTextArea("02"); //定义并初始化黑棋计数板JTextArea WhiteNumber = new JTextArea("02"); //定义并初始化白棋计数板BlackAndWhiteDesign(){try{bwInit();}catch(Exception e){e.printStackTrace();}}private void bwInit() throws Exception{this.setTitle("网络黑白棋作者:刘茂龙");new Thread(this).start();//启动监听线程this.PORT = 1976;this.isInitiative = false;//是否主动连接this.stopFlag = false;//是否继续监听的标志this.messagePoint = new Point();choice1.setBackground(new Color(236, 190, 98)); this.choice1.addItem("黑");this.choice1.addItem("白");this.setBackground(new Color(236, 190, 98)); this.setSize(580,565);this.setResizable(false);this.setVisible(true);checkbox1.addMouseListener(new MouseAdapter() {public void mouseClicked(MouseEvent e){checkbox1_mouseClicked(e);}});panel1.setLayout(new BorderLayout()); checkbox1.setCheckboxGroup(checkboxGroup1); checkbox1.setLabel("单机");checkbox2.addMouseListener(new MouseAdapter() {public void mouseClicked(MouseEvent e){checkbox2_mouseClicked(e);}});checkbox2.setCheckboxGroup(checkboxGroup1); checkbox2.setLabel("联机");label1.setText("对方地址");button1.setBackground(new Color(236, 190, 98)); button1.setLabel("连接");button1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e){button1_actionPerformed(e);}});label2.setText(" ");button2.setBackground(new Color(236, 190, 98)); button2.setLabel("开始");button2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e){button2_actionPerformed(e);}});button3.setBackground(new Color(236, 190, 98)); button3.setLabel("重新开始");this.button3.setEnabled(false);button3.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e){button3_actionPerformed(e);}});Background.addMouseListener(new MouseAdapter() {public void mouseClicked(MouseEvent e){Background_mouseClicked(e);}});this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e){this_windowClosing(e);}});panel3.setLayout(new GridLayout(9, 1));panel3.setBackground(new Color(236, 190, 98)); panel3.add(checkbox1);panel3.add(checkbox2);panel3.add(label1);PtextField1.add(textField1);panel3.add(PtextField1);panel3.add(choice1);panel3.add(button1);panel3.add(button2);panel3.add(button3);panel3.add(label2);panel4.setLayout(new GridLayout(1, 3));label3.setFont(new Font("h",15,30));panel4_1.add(label3);BlackNumber.setFont(new Font("h",15,30));BlackNumber.setEditable(false);panel4_1.add(BlackNumber);label4.setFont(new Font("h",15,30));panel4_2.add(label4);WhiteNumber.setFont(new Font("h",15,30));WhiteNumber.setEditable(false);panel4_2.add(WhiteNumber);panel4.add(panel4_1);panel4.add(panel4_2);panel4.add(panel4_3);this.panel1.add(this.Background,BorderLayout.CENTER);this.panel1.add(panel3, BorderLayout.EAST);this.panel1.add(panel4, BorderLayout.SOUTH);this.add(panel1, BorderLayout.CENTER);this.disableLink();//废掉控件this.checkboxGroup1.setSelectedCheckbox(this.checkbox1);this.centerWindow();this.Background.setEnabled(false);this.setVisible(true);}void checkbox1_mouseClicked(MouseEvent e){this.button2.setEnabled(true);this.disableLink();//disable联机时用的控件void disableLink(){this.textField1.setBackground(new Color(236, 190, 98));this.textField1.setEnabled(false);this.choice1.setEnabled(false);this.button1.setEnabled(false);}void checkbox2_mouseClicked(MouseEvent e){this.enableLink();}void enableLink(){this.textField1.setBackground(Color.white);this.textField1.setEnabled(true);this.choice1.setEnabled(true);this.button1.setEnabled(true);this.button2.setEnabled(false);}void button1_actionPerformed(ActionEvent e){this.stopFlag = false;this.goToLink(this.textField1.getText().trim(),this.PORT);this.button2.setEnabled(true);//开始void button2_actionPerformed(ActionEvent e){if(e.getActionCommand().equals("开始")){this.stopFlag = false;this.disableLink();this.button3.setEnabled(true);this.checkbox1.setEnabled(false);this.checkbox2.setEnabled(false);this.button2.setLabel("退出");if(this.isSingle())this.Background.setEnabled(true);//判断类型boolean isSingle(){return this.checkbox1.getState();}void button3_actionPerformed(ActionEvent e){if (isSingle()){int Choose;Choose=JOptionPane.showConfirmDialog(null, "您确定要重新开始吗?", "提示", JOptionPane.YES_NO_OPTION);if (Choose == JOptionPane.YES_OPTION){this.Background.Restart();String s1, s2;if (this.Background.BlackNumberc<=9) s1="0"+Integer.toString(this.Background.BlackNumberc);else s1 = Integer.toString(this.Background.BlackNumberc);if (this.Background.WhiteNumberc<=9) s2="0"+Integer.toString(this.Background.WhiteNumberc);else s2 = Integer.toString(this.Background.WhiteNumberc);this.BlackNumber.setText(s1);this.WhiteNumber.setText(s2);this.button1.setEnabled(false);this.button2.setLabel("开始");this.button3.setEnabled(false);this.checkbox1.setEnabled(true);this.checkbox2.setEnabled(true);this.clearMyColor();this.Background.setEnabled(false);this.stepColor = true;}}else this.writer.println("clear");}//显示错误信息void showError(String errorMessage){Graphics g=this.getGraphics();g.setColor(new Color(236,190,98));g.fillRect(10,10,300,15);g.setColor(Color.red);g.drawString(errorMessage,22,20);g.fillOval(10,10,10,10);}private void bwInit() throws Exception{this.setBackground(new Color(236, 190, 98));}}class Listen extends Thread{Socket socket;BlackAndWhiteDesign BlackAndWhiteDesign;public Listen(Socket socket,BlackAndWhiteDesign BlackAndWhiteDesign){this.socket=socket;this.BlackAndWhiteDesign=BlackAndWhiteDesign;}public void run(){try{this.activeListen(this.socket);}catch(IOException ioe){this.BlackAndWhiteDesign.Background.showError("意外中断");} }void activeListen(Socket socket) throws IOException{BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));String message;while(true){message=reader.readLine();this.BlackAndWhiteDesign.doMessage(message);}}}课程设计实践总结:课程设计总结:通过这次毕业设计,对很多东西有了新的认识和新的见解,认识问题的和思考解决办法有了本质上的进步,特别是对一个游戏开发的模式有了更深的认识,对专业技能的运用更熟练。

Java语言程序设计的课程设计项目——利用Java实现人机五子棋游戏项目完整实现实例(第1部分)

Java语言程序设计的课程设计项目——利用Java实现人机五子棋游戏项目完整实现实例(第1部分)

1.1Java语言程序设计的课程设计项目——利用Java实现人机五子棋游戏项目完整实现实例(第1部分)1.1.1项目预演1、新建一个Java项目,名称为BackGammonGame五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。

容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。

2、切换到Navigator视图3、拷贝程序和图像文件4、执行启动程序5、最后出现下面的程序启动画面6、主程序窗口开始游戏时游戏界面是没有棋子ide,也就是棋盘的初始化状态。

传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为15×15,棋子放置于棋盘线交叉点上。

两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。

如何判断输赢:当某方下一子后,计算与当前棋子相邻的四个方向(\ 、/、|和—)的同色棋子的各数,大于四则分出胜负,否则继续下子过程。

1.1.2项目中的各个模块说明1、人机五子棋游戏启动程序类BackGammonGameApp(1)类名称为BackGammonGameApp,包名称为com.px1987.backgammongame(2)程序的主要流程1)系统初始化2)主循环控制模块3)玩家下子4)盘面分析填写棋型表5)电脑下子6)胜负判断(3)主控制程序BackGammonGameApp代码实例package com.px1987.backgammongame;import javax.swing.SwingUtilities;import com.px1987.backgammongame.mainframe.BackGammonGameMainFrame;import com.px1987.backgammongame.splashframe.SplashImageJWindow;import com.px1987.backgammongame.util.BackGammonGameUtils;public class BackGammonGameApp {public BackGammonGameApp() {}public static void main(String[] args){SplashImageJWindow oneSplashImageJWindow=new SplashImageJWindow();BackGammonGameUtils.systemInitAndLoadResource(oneSplashImageJWindow);oneSplashImageJWindow.dispose(); //系统后台初始化完毕,则关闭快闪屏窗口并释放该窗体的资源oneSplashImageJWindow=null;SwingUtilities.invokeLater(new Runnable() { //下面的代码实现实时刷新Swing界面public void run() {BackGammonGameMainFrame backGammonGameMainFrame=new BackGammonGameMainFrame();backGammonGameMainFrame.setVisible(true);}});}}2、人机五子棋游戏全局工具类BackGammonGameUtils(1)类名称为BackGammonGameUtils,包名称为com.px1987.backgammongame.util 工具类的主要作用?类中的方法有声明要求?(2)systemInitAndLoadResource()方法实现系统初始化后台加载主线程是在程序启动时自动创建的,但它可以由一个Thread对象控制。

java五子棋小游戏

java五子棋小游戏

五子棋小游戏1.功能模块图2.游戏说明(1)黑棋先行,白棋随后。

从第一个棋子开始相互顺序落子。

五子棋游戏 开始游戏 执棋子颜色 黑子先行 判断胜负 游戏结束 图1.功能模块图(2)通过坐标索引算出最先在棋盘的横向、竖向、斜向形成连续的相同色五棋子的一方为胜利。

(3)设定游戏界面大小。

(4)在游戏过程中或下完时可选择开局重新开始。

(5)赢家对话框提示。

(6)游戏实现了基本的单机功能但为实现人机对战和人人对战。

3.游戏界面(1)五子棋游戏的主界面,如图2所示。

图2 程序主界面(2)五子棋游戏的结束界面,如图3所示。

图3 游戏结束界面(3)游戏游戏栏中的各个选项,如图4所示。

图4 Game栏中的选项(4)视图设置栏中的各个选项,如图5所示。

图5 Configure栏中的各个选项(5)Help帮助栏中的选项,如图6所示。

图6 Help栏中的选项(6)点击Help栏中的About选项弹出的界面,如图7所示。

图7 About选项弹出时的界面4.设计任务与目的用java语言编程并检验一个学期以来学习java语言的成果,通过编写一个简单的五子棋游戏实践,检验在学习java语言的过程中的特点及不足,进行集资料、查阅文献、方案制定等实践,促进对所学知识应用能力的提高,灵活运用Java使用方法和编程语法,更好的熟练掌握java语言的特点,并及时反省和提高自己的知识和技术。

研究目标:该五子棋游戏应主要包括下述方面:1.初始化界面时棋盘的规格;2.响应鼠标点击并在相应位置画出棋子;3.有一定的智能(可以判断胜负);4.利用java语言中的panel放置棋盘显示棋子(注:其内包含鼠标响应)。

5.参考文献[1]耿祥义.JAVA大学实用教程.北京:电子工业出版社.2005.3:85-113[2]朱战立,沈伟.Java程序设计实用指南.北京:电子工业出版社,2005.1:48-135[3] 唐大仕.Java程序设计[M]. 北京:北方交通大学出版社:2007.05:56-92[4]叶核亚. JAVA2程序设计实用教程[M].北京:电子工业出版社;2008.4:64-98[5]邢素萍. JAVA办公自动化项目方案精解[M].北京:航空工业出版社, 2006.9:35-1206.方法见表方法名功能备注Draw()方法在Graphics类中,绘制一些具体的东西paint()方法重绘图形setColor()设置颜色repaint() 一个具有刷新页面效果consume() 销毁实例的方法Show() 将所建窗口显示出来show()方法将所建窗口显示出来WindowEvent()方法用来处理点击窗体右上角关闭按钮的事件setSize ()方法设定固定大小4.设计任务与目的通过这次五子棋的课程设计,进一步加深对JA V A基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。

(完整版)Java五子棋毕业设计

(完整版)Java五子棋毕业设计

以下文档格式全部为word格式,下载后您可以任意修改编辑。

摘要人工智能是一门正在迅速发展的新兴的,综合性很强的交叉科学。

它与生物工程、空间技术一起被并列为二十一世界三大尖端技术。

它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。

目前各发达国家都把人工智能作为重点项目,列入本国的高科技发展计划当中,投入巨大的人力和物力。

计算机人机对弈也是其中之一。

作为人智能研究的一个重要分支,计算机博弈是检验人工水平的一个重要方面。

它的研究为人工智能带来了很多重要的方法和理论,产生了广泛的社会影响和学术影响。

五子棋人机对弈是计算机博弈中的一种。

研究其计算机算法,可以让我们看到人工智能的稚形,也有助于我们人脑的开发。

五子棋是我国发明的,研究它可以让更多的外国人了解五子棋,这有助于我国优秀文化的推广。

关键词:人工智能,计算人机对弈,五子棋,算法AbstractArtificial intelligence is a rapidly developing new, integrated a strong Frontier Science. It is with bio-engineering, space technology listed as 21 in the world along with the three cutting-edge technology. Its central task is to study the past to rely on intelligence to do. AI is currently regarded as the focus of the developed countries included in this car's and material resources.Man-machine chess computer is one of them. As a study of an important branch of intelligence, the computer game to test the level of an important aspect of the manual. Its research in artificial intelligencemany important methods and theories to produce a wide range of social impact and academic impact.Man-machine chess game Renju in one of the computer. To study the computer algorithm, we can see the beginning of artificial intelligence shadow, but also brain development. Backgammon invented in China, and the research it can allow more foreigners to understand and -machine Cchess Computer,Man-machine Chess, Algorithm目录摘要 (Ⅰ)Abstract (Ⅱ)目录..........................................................................................................................Ⅲ第一章绪论 (1)第二章需求分析 (2)2.1 业务需求 (2)2.2 性能需求 (2)2.3 系统平台需求 (2)第三章五子棋相关基础 (4)3.1 五子棋解释 (4)3.2 五子棋的基本规则 (4)3.3 五子棋的常用术语 (5)第四章开发工具、环境及其技术 (7)4.1 Java简介 (7)4.2 Java编程环境 (9)第五章程序设计思路与实现 (10)5.1 程序设计思路 (10)5.2 程序设计 (13)结论...........................................................................................................................33参考文献....................................................................................................................致谢.......................................................................................................................... ..附录.......................................................................................................................... ..第一章:绪论1.1 前言电脑已经深入到日常工作和生活的方方面面,比如文字处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等。

JAVA黑白棋 毕业设计论文

JAVA黑白棋 毕业设计论文
本文对以下几点内容做了重点研究和探讨:系统整体结构,根据设计目标,结合普通 手机游戏的运行流程,给出了系统总体设计方案,并探讨了系统设计时需要用到的关键技 术。本设计通过一个棋类游戏的开发,阐述了棋类游戏的开发过程,包括软件开发的逻辑 分析,程序设计,软件实现和软件测试几个步骤。 关键词:Java ME;手机游戏;黑白棋
1.3 黑白棋研究意义............................................................................................................. - 4 -
第 2 章 黑白棋游戏简介及需求分析.......................................................................................- 6 -
4.1 系统测试....................................................................................................................... - 15 4.1.1 测试方法................................................................................................................- 15 4.1.2 测试用例及结果....................................................................................................- 15 4.1.3 游戏的发布.............................................................................................................- 16 -
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java黑白棋技术文档
1,程序概览:
程序分成两部分。

第一部分是单机版,第二个是网络版,在进入登录界面的时候会出现选择对话框(如下图所示):
会出现两个选择项一个是“网络版”,一个是“单机版”
a,在单机版中设计三个程序:一个是支持双人对战的,第二个跟第三个是支持人机对战的,第二个是人持黑子,计算机持白子,第三个是人持白子,计算机持黑子。

I,单击“单机版”确定后,会再次出现一个对话框(如下图所示):
单击“单机人人对战”确定后,会出现这样的界面:
在“人人对战”界面包括了棋盘界面,棋子统计面板,计时面板,还有功能面板,功能面板包括悔棋,保存,打开,重启,关闭按钮,在悔棋按钮有一个监听器,
在下棋的对方弹出一个对话框(如左图所示),点击
“保存”按钮会出现一个对话框:表示已存盘,但
是存盘只能存储当前的下棋记录,“打开”按钮可以打开上一次下棋的记录,“重
启”按钮,“重启”按钮有一个监听器,在单击“重启”按钮之后,会出现一个
对话框:,重新回到这个选择对话框,这样可以再次选择你的对战方式。

最后一个“关闭”按钮,会退出程序的运行。

上面面板的是一个时间计数器,按钮“暂停”和“启动”分别是控制计时器的暂停和启动的,初始的时间是21秒。

下面是棋盘主界面:棋盘是8x8型的,棋子分为黑白两
种。

在右边是黑白棋的计步器:根据黑子跟白子的步数来判断输赢。

II,对于人机对战(无论是人黑还是人白),出现的界面跟上述的是一样的,还是分成棋盘面板,计时面板,计歩面板,按钮面板。

b,在执行“网络版”的时候,首先应该执行服务端程序,在这段程序中我们默认是将主机既作为服务端又作为客户端,主要是为了程序的测试方便,其实在程序的执行过程中还可以把服务端和客户端装在不同的主机上,在选择“网络版”单击确定以后,会
弹出一个对话框:,单击确定后会出现如下的界面
在左边的界面跟单机版的界面
是一样的,在右边是添加三个面板。

最上面的面板是系统消息面板,比如假如可以显示玩家的登录还有就是提示玩家的持子种类,在下面的面板是聊天的面板显示玩家的聊天记录,最下面的是聊天的输入框,添加一个键盘监听还有一个按钮监听。

同时该程序还支持双人对战,和多人观战,多人聊天。

2,程序的主要思想:
总体的思想是:棋盘是由64个按钮构成的,白棋下的地方按钮会变成带有白的的按钮,同理黑棋下的地方会变成带有黑的按钮。

在程序的实现方面,是用1表示白棋的,2表示黑棋,0表示没有下棋的位置。

I,对于单机版而言:
a,人人对战:该段程序主要关键是判断是否可下,还有就是判断可下以后的翻子。

在这段程序这种首先构造一个三维数组,数组的第一维是下棋的步数,第二维和第三维分别是代表棋盘的x轴和y轴,前面的第一维的主要作用是为了记录下棋的步数还有下一盘该轮到谁下棋。

在判断某一个位置是否可下的时候,首先是对该位置进行监听,假设这个位置是(x,y),则要对该位置的周边八个位置进行观测,
●O O
●(X,Y)O
●O O
在这段程序就设计一个循环,
1 2 3
4 (x,y) 5
6 7 8
先假设(x,y)位置是黑棋子,先利用一个条件判断语句对一号位置进行判断,假设一号位置是白棋的时候,则对1号位置的上对角进行判断,直到上对角出现一个黑棋则这个条件判断结束,而这个(x,y)位置为可下的,当判断的位置超过了棋盘的位置还有1号位置是黑棋的时候,则换做2号位置进行判断,依此类推,但到八号位置判断都结束时候还没有判断出这个位置是可下的时候,那么这样的就说明这个位置是不可下的,当你点击这个位置时,会跳出一个对话框提示你不能再此处下子。

而对于翻子,当对一个位置进行判断的时候,判断出该位置为可下的时候,这样会把周围的被围住的白棋的坐标位置的数字由1变成2,在对棋盘进行重绘,这样就实现了翻子的功能。

b,人机对战:在人的这一方面跟上述的人人对战是一样的,主要是考虑到对可下的判断还有就是对于翻子的控制,在机器方面就是实现一个循环从开始的(1,1)位置进行判断,从这个位置一直判断有何位置是可下,假设判断出来了,然后就是在该位置下一个子,其实现方式和上述的人人对战是一样的,在这里我们实现的单机版的人机对战的方法是很简单的,在机器这一方面我们实现的是很呆板的循环,这也是这段程序的缺点之一,没有很智能化的判断下棋的位置。

人机对战的关键就是机器的判断下棋的位置,然后就是判断棋子是不是可下,以及翻子,这个跟上述的人人对战是一样的。

II,对于网络版而言:
服务端:在服务端首先是利用套接字serversocket对端口进行监听,利用一个线程实现一个对服务器的功能,同时利用一个循环使得服务器只能够接受10个客户端的连接,这样实现两人游戏,八人观战的局面。

在服务器的关键是对线程里面的run方法的书写,线程的run方法,在下棋方面主要是利用跟上面的单机版一样的
原则利用数字来代表黑白棋棋盘的信息,这样就可以利用dataintputstream和
dataoutputstream形成数组在各组之间进行信息的传递。

客户端:在客户端我们先是进行socket与服务端进行连接,在数据的传递方面还
是利用数字的传出和传入,在接到服务端的传入的时候,在棋盘方面我们再就是
利用这个数据对棋盘进行重绘。

但是是如何的区分棋盘的数据和发送的数据,在
这段程序里我是还是利用数据来区分到底是棋盘的数据还是发送按钮数据,还是
悔棋数据的。

3,程序的主要的缺陷:
a,单机版的人机对战的算法的缺陷,在这段程序之中只是把利用简单的循环来实
现机器的下棋位置的判断,原来有一个想法就是对先把所有的可能的位置记录下
来储存在一个数组里面,然后在利用循环判断来统计每一个位置的可以翻转对方
棋子的个数,然后在可下最多的位置下一个棋子,然后对对方的棋子进行翻转。

b,然后就是没有建立一个游戏大厅,允许多个玩家进行游戏,只能支持一对玩家
进行游戏,其他的玩家只能进行观战。

c,在保存记录方面,只能保存一次数据的结果,而不能保存多次的结果。

d,服务器方面没有更多的管理程序段,比如没有程序界面,没有对每次登陆的玩
家进行记录
4,下棋的记录:
有两次下棋的记录:一则是人机对战的记录,此时人是持黑棋机器是持白棋,
在这次的下棋的记录中步数总共是60步,最后是黑棋赢,黑棋的个数是43,白棋的个数是21
下面是一个网络版的观战玩家的界面:
5,编写程序成员:
刘本俊,王震,王锦辉,黄浩,王雅竹,刘婷婷
6,该次上交的主要是该程序的源代码文件夹,还有执行程序文件夹,里面包括一个服务器
程序,还有一个就是客户端登陆程序,还有一个此文档。

相关文档
最新文档