JAVA黑白棋课程设计Word文档下载推荐.docx

上传人:b****6 文档编号:18889139 上传时间:2023-01-02 格式:DOCX 页数:18 大小:173.69KB
下载 相关 举报
JAVA黑白棋课程设计Word文档下载推荐.docx_第1页
第1页 / 共18页
JAVA黑白棋课程设计Word文档下载推荐.docx_第2页
第2页 / 共18页
JAVA黑白棋课程设计Word文档下载推荐.docx_第3页
第3页 / 共18页
JAVA黑白棋课程设计Word文档下载推荐.docx_第4页
第4页 / 共18页
JAVA黑白棋课程设计Word文档下载推荐.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

JAVA黑白棋课程设计Word文档下载推荐.docx

《JAVA黑白棋课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《JAVA黑白棋课程设计Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。

JAVA黑白棋课程设计Word文档下载推荐.docx

指导教师评语及成绩

成绩:

指导教师签字:

2010年12月24日

目录

第1章课程设计的目的与要求1

1.1课程设计目的1

1.2课程设计的实验环境1

1.3课程设计的预备知识1

1.4课程设计要求1

第2章课程设计内容2

2.1课程设计主要内容2

2.2概要设计2

2.3详细设计5

2.4测试分析17

第3章课程设计总结18

参考资料19

第1章课程设计的目的与要求

1.1课程设计目的

《JAVA程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。

实践教学环节是必不可少的一个重要环节。

本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

1.2课程设计的实验环境

硬件要求能运行Windows9.X操作系统的微机系统。

JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。

1.3课程设计的预备知识

熟悉JAVA语言及ECLIPSE开发工具。

1.4课程设计要求

按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。

要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;

对此能够较好地理解和掌握,能够进行简单分析和判断;

能编写出具有良好风格的程序;

掌握JAVA程序设计的基本技能和面向对象的概念和方法;

了解多线程、安全和网络等编程技术。

同时培养学生进行分析问题、解决问题的能力;

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

第2章课程设计内容

2.1课程设计主要内容

Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展所带来新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。

Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;

二是因为SUN公司不断推出新的版本,完善Java自身的功能。

有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中了。

黑白棋,又叫翻转棋(Reversi)、苹果棋或奥赛罗棋(Othello)。

一般棋子双面为黑白两色,故称“黑白棋”。

因为行棋之时将对方棋子翻转,变为己方棋子,故又称“翻转棋”。

棋子双面为红、绿色的称为“苹果棋”。

黑白棋的前身是英国人发明的翻转棋(Reversi),后来由日本的长谷川五郎加以改进,并改称为奥赛罗棋(Othello),国内习惯上称之为黑白棋。

这个棋类游戏在西方较为流行,但在中国起步较晚,还不很普及。

黑白棋作为一个棋类竞技运动,在民间十分流行,为了熟悉黑白棋规则及技巧,以及研究简单的人工智能,决定用Java开发黑白棋游戏。

主要完成了人机对战功能,有很好的可扩展性。

在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能。

分析估值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它们搜索的节点数进行比较,在这些算法的基础上分析一些提高提高电脑AI方案,如递归算法、电脑学习等。

算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。

尽管黑白棋的规则比较简单,但它所包括的丰富战略,不亚于那些相当“经典”的策略游戏。

其中人工智能部分,由于采用了大量的搜索算法,其中很多被利用到各方面。

2.2概要设计

近来随着计算机的快速发展,各种各样的电脑游戏层出不穷,使得我们能有更多的娱乐项目,而棋类游戏能起到锻炼人的思维和修身养性的作用,而且棋类游戏水平颇高,大有与人脑分庭抗礼之势。

其中战胜过国际象棋世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表,其它像围棋的“手淡”、象棋的“将族”等也以其优秀的人工智能深受棋迷喜爱。

越来越多的具有智能的机器进入了人类的生活,人工智能的重要性如今显而易见。

自己对人工智能比较感兴趣,而黑白棋游戏程序的开发实现这个课题,正好提供给我这样一个研究的机会,通过对人工智能中博弈方面的研究(人机对弈),让我在简单的人机对弈全局设计,以及具体到相关算法上有了深入的了解。

人工智能属于计算机科学的领域,它以计算机技术为基础,近几十年来,它的理论和技术已经日益成熟,应用领域也正在不断扩大,显示出强大的生命力。

人工智能大致可以分成几个学科,它们每一个都是独特的,但是它们常常又互相结合起来完成设计任务,这时,这些学科之间的差别就变的很模糊。

人工智能在专家系统,自然语言理解,自动定理证明,自动程序设计,人工智能在机器人学、模式识别、物景分析、数据库的智能检索、机器下棋(实质上是博弈论问题)和家用电器智能化等领域都有广泛的应用。

而这个课题就是和人工智能中的博弈论领域紧密相关的。

这个题目核心是人工智能和Socekt编程,并且人工智能中的博弈部分,由于采用了大量的搜索算法,其中很多被利用到各方面。

它的概念、方法和技术,正在各行各业广泛渗透。

智能已经成为当今各种新产品、新装备的发展方向。

所以,趁着这个机会,对人工智能中比较容易实现的人机博弈进行了解研究学习,也是很实用且很有必要的。

电脑究竟能否最终战胜人脑?

这是大家一直在探索的问题。

自从1997年黑白棋程序Logistello战胜冠军棋手村上健以来,电脑程序已经把人类棋手远远抛在后面。

目前,程序可以记住大量的开局定式、可以正确地判断局面的优劣、可以思考到二十几步之后的局面,这都是人类棋手远不能及的。

然而,电脑的这一切又都是人类所赋予的,因此究竟电脑和人脑孰优孰劣,还难以定论。

2.2.1自定义说明

吃子规则:

采用夹吃的原则,左图用红色标记的是黑方可落子的位置。

当黑方落子之后,则夹在两黑子中间的白子都将变为黑子。

右图是落子后的棋盘布局,蓝色标记的是白方可落子的位置。

夹子的方向包含:

水平、竖直、斜对角

2.2.2程序流程图

(1)落棋位置判断:

(2)输出成绩:

(3)输出最后的胜利者结果:

2.2.3各模块功能及程序说明

落棋位置的判断模块:

判断落子后棋盘的变化,判断棋手的落棋位置和次数,两方交换走棋。

成绩输出模块:

判断输出哪个棋手的分,在不同的位置输出,清空成绩,判断哪方胜利。

输出胜利者信息模块:

开始判断最后的结果,将两人分数分别输出。

2.2.4程序结果

一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己棋子的数目多于对方。

按键盘上的方向键可以上下左右移动棋子,按回车键可以摆放棋子,同时也可以用鼠标左键操作。

在同上操作下到最后谁的棋子多,谁赢。

2.3详细设计

程序详细设计代码如下:

importjava.awt.*;

importjava.awt.event.*;

importjava.io.*;

import.*;

importjavax.swing.*;

importjava.util.*;

importjava.awt.Font;

publicclassMain{

publicstaticvoidmain(Stringargs[]){

BlackAndWhiteDesignb=newBlackAndWhiteDesign();

}

}

classBlackAndWhiteDesignextendsFrameimplementsRunnable{

GoBackground=newGo();

booleanstepColor=true;

intPORT;

SocketsendSocket;

//主动连接Socket

PrintWriterwriter;

//用来发送message

booleanstopFlag;

booleanisInitiative;

PointmessagePoint;

Panelpanel1=newPanel();

Panelpanel2=newPanel();

Panelpanel3=newPanel();

CheckboxGroupcheckboxGroup1=newCheckboxGroup();

Checkboxcheckbox1=newCheckbox();

Checkboxcheckbox2=newCheckbox();

Labellabel1=newLabel();

TextFieldtextField1=newTextField(10);

PanelPtextField1=newPanel();

Buttonbutton1=newButton();

Labellabel2=newLabel();

Choicechoice1=newChoice();

Buttonbutton2=newButton();

Buttonbutton3=newButton();

BorderLayoutborderLayout3=newBorderLayout();

Panelpanel4=newPanel();

Panelpanel4_1=newPanel();

Panelpanel4_2=newPanel();

Panelpanel4_3=newPanel();

Labellabel3=newLabel("

黑棋"

);

Labellabel4=newLabel("

白棋"

JTextAreaBlackNumber=newJTextArea("

02"

//定义并初始化黑棋计数板

JTextAreaWhiteNumber=newJTextArea("

//定义并初始化白棋计数板

BlackAndWhiteDesign(){

try

{

bwInit();

catch(Exceptione)

e.printStackTrace();

privatevoidbwInit()throwsException{

this.setTitle("

网络黑白棋作者:

刘茂龙"

newThread(this).start();

//启动监听线程

this.PORT=1976;

this.isInitiative=false;

//是否主动连接

this.stopFlag=false;

//是否继续监听的标志

this.messagePoint=newPoint();

choice1.setBackground(newColor(236,190,98));

this.choice1.addItem("

黑"

白"

this.setBackground(newColor(236,190,98));

this.setSize(580,565);

this.setResizable(false);

this.setVisible(true);

checkbox1.addMouseListener(newMouseAdapter()

publicvoidmouseClicked(MouseEvente)

checkbox1_mouseClicked(e);

});

panel1.setLayout(newBorderLayout());

checkbox1.setCheckboxGroup(checkboxGroup1);

checkbox1.setLabel("

单机"

checkbox2.addMouseListener(newMouseAdapter()

checkbox2_mouseClicked(e);

checkbox2.setCheckboxGroup(checkboxGroup1);

checkbox2.setLabel("

联机"

label1.setText("

对方地址"

button1.setBackground(newColor(236,190,98));

button1.setLabel("

连接"

button1.addActionListener(newActionListener()

publicvoidactionPerformed(ActionEvente)

button1_actionPerformed(e);

label2.setText("

"

button2.setBackground(newColor(236,190,98));

button2.setLabel("

开始"

button2.addActionListener(newActionListener()

button2_actionPerformed(e);

button3.setBackground(newColor(236,190,98));

button3.setLabel("

重新开始"

this.button3.setEnabled(false);

button3.addActionListener(newActionListener()

button3_actionPerformed(e);

Background.addMouseListener(newMouseAdapter()

Background_mouseClicked(e);

this.addWindowListener(newWindowAdapter()

publicvoidwindowClosing(WindowEvente)

this_windowClosing(e);

panel3.setLayout(newGridLayout(9,1));

panel3.setBackground(newColor(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(newGridLayout(1,3));

label3.setFont(newFont("

h"

15,30));

panel4_1.add(label3);

BlackNumber.setFont(newFont("

BlackNumber.setEditable(false);

panel4_1.add(BlackNumber);

label4.setFont(newFont("

panel4_2.add(label4);

WhiteNumber.setFont(newFont("

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);

voidcheckbox1_mouseClicked(MouseEvente)

this.button2.setEnabled(true);

//disable联机时用的控件

voiddisableLink()

this.textField1.setBackground(newColor(236,190,98));

this.textField1.setEnabled(false);

this.choice1.setEnabled(false);

this.button1.setEnabled(false);

voidcheckbox2_mouseClicked(MouseEvente)

this.enableLink();

voidenableLink()

this.textField1.setBackground(Color.white);

this.textField1.setEnabled(true);

this.choice1.setEnabled(true);

this.button1.setEnabled(true);

this.button2.setEnabled(false);

voidbutton1_actionPerformed(ActionEvente)

this.goToLink(this.textField1.getText().trim(),this.PORT);

//开始

voidbutton2_actionPerformed(ActionEvente)

if(e.getActionCommand().equals("

))

this.button3.setEnabled(true);

this.checkbox1.setEnabled(false);

this.checkbox2.setEnabled(false);

this.button2.setLabel("

退出"

if(this.isSingle())

this.Background.setEnabled(true);

//判断类型

booleanisSingle()

returnthis.checkbox1.getState();

voidbutton3_actionPerformed(ActionEvente)

if(isSingle()){

intChoose;

Choose=JOptionPane.showConfirmDialog(null,"

您确定要重新开始吗?

"

"

提示"

JOptionPane.YES_NO_OPTION);

if(Choose==JOptionPane.YES_OPTION){

this.Background.Restart();

Strings1,s2;

if(this.Background.BlackNumberc<

=9)s1="

0"

+Integer.toString(this.Background.BlackNumberc);

elses1=Integer.toString(this.Background.BlackNumberc);

if(this.Background.WhiteNumberc<

=9)s2="

+Integer.toString(this.Background.WhiteNumberc);

elses2=Integer.toString(this.Background.WhiteNumberc);

this.BlackNumber.setText(s1);

this.WhiteNumber.setText(s2);

this.button2.set

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1