人工智能 井字棋Word格式文档下载.docx

上传人:b****5 文档编号:18771341 上传时间:2023-01-01 格式:DOCX 页数:13 大小:176.68KB
下载 相关 举报
人工智能 井字棋Word格式文档下载.docx_第1页
第1页 / 共13页
人工智能 井字棋Word格式文档下载.docx_第2页
第2页 / 共13页
人工智能 井字棋Word格式文档下载.docx_第3页
第3页 / 共13页
人工智能 井字棋Word格式文档下载.docx_第4页
第4页 / 共13页
人工智能 井字棋Word格式文档下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

人工智能 井字棋Word格式文档下载.docx

《人工智能 井字棋Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《人工智能 井字棋Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。

人工智能 井字棋Word格式文档下载.docx

本设计的主要完成的是井字棋的人机对弈问题,即计算机与人交替落子,当行、列或对角有连续三个以上(包括三个)相同一方棋时,则判定一方胜利,如果所有位置都已经下满,且没有哪一方赢棋,则为和局。

本设计的程序实现了井字棋的人机对弈,具体功能为:

1.在程序界面中挥之游戏棋盘,可以是三乘三,四乘四,五乘五。

显示游戏状态,其中游戏状态包括难度等级,有初级,中级和高级三种模式。

还包括哪方先下,当前轮到哪方下等等。

2.玩家执红,计算机为蓝方。

3.可以设置谁先下,设置游戏难度等级,设置棋盘块数。

要完成此设计则需—判定胜负函数及一计算机自行落子函数,一旦这两个函数完成则此程序主要部分可完成。

本次设计提高了我们程序设计能力、培养自学能力。

提高了我们的分析问题以及解决问题的能力。

还提高了我们收集资料、查找参考书的能力以及锻炼书写报告的能力。

功能分析

此设计是具有简单功能的井字棋游戏。

具体功能模块图如下:

这是一个智能型的井字棋游戏,机器可以模拟人与用户对弈。

当轮到机器来下的时候,机器会根据当前棋局的形势,利用极大极小算法算出一个评价值,判断如何下才对自身最有利,同时也是对方来说对不利的,然后下在评价值最高的地方。

机器在搜索评价值的时候不用扩展不必要的结点,从而提高机器计算的效率。

面向对象设计

系统流程图如下图所示:

图1游戏流程图

井字棋是一个流传已久的传统游戏。

游戏由两个人轮流来下,分别用“X”和“O”来代替自身的棋子。

双方可以在轮到自己下的时候,可以用棋子占领其中一个空的格子。

如果双方中有一方的棋子可以连成一条直线,则这一方判胜,对方判负。

当所有的格子都被占领,但双方都无法使棋子连成一条直线的话,则判和棋。

另外利用α-β剪枝,使机器在搜索评价值的时候不用扩展不必要的结点,从而提高机器计算的效率。

游戏时一方是电脑,另一方是玩家。

所以,这类游戏在开始时有两种方式:

一种是玩家先走;

另一种是电脑先走。

这是我们要考虑的第一个问题。

然后,设计游戏的棋盘数和难易级别等,棋盘数分为三乘三、四乘四、五乘五,以及难易级别分为初级、中级和高级三个级别。

当游戏结束后,又要提示玩家游戏结果,如“恭喜您,您赢了”、“笨蛋,你输了”和与电脑平手的结果。

还有一部分设计的是游戏的管理界面,分为游戏开始、结束和退出。

然后测试该游戏,是否达成预想结果,完成预想功能。

在用户界面方法,用一个3×

3的井字格来显示用户与机器下的结果。

当要求用户输入数据的时候会有提示信息。

用户在下的过程中可以中途按下“0”退出。

当用户与计算机分出了胜负后,机器会显示出比赛的结果。

总体E-R图如下图2所示:

图2游戏总体E-R图

程序实现

源码分析

importjava.awt.*;

importjavax.swing.*;

importjava.awt.event.*;

importjava.lang.*;

importjava.util.*;

//importcom.borland.jbcl.layout.*;

publicclassChessFrameextendsJFrame{

///游戏界面参数

privateContainercontentPane;

privateJPanelupPanel;

privateJPanelleftPanel;

privateJPanelcenterPanel;

privateJPanelrightPanel;

privateJPaneldownPanel;

privateJComboBoxlevel;

//游戏级别

privateJComboBoxsize;

//棋盘大小

privateJRadioButtoncb1;

//单选按钮,玩家先手

privateJRadioButtoncb2;

//单选按钮,电脑先手

privateJButtonb4;

//开始

privateJButtonb5;

//结束

privateJButtonb6;

//退出按钮

privateJButtonb[][];

//棋盘按钮

privateJLabelb1;

//欢迎词

privateJLabelb11;

privateJLabelb12;

privateJLabelb2;

//棋局状况

privateJLabelb3;

//棋局结果

privateJLabelb31;

privateJLabelb32;

//程序参数

privateintstartturn;

//先下棋的一方,1代表玩家,2代表电脑

privateinta[][];

//棋盘信息,0代表无棋子,1代表玩家下的棋子,2代表电脑下的棋子

privateintresult;

//棋局结果,1代表玩家赢,2代表电脑赢,3代表平手

privateintc_size;

//棋盘大小,本游戏中有3乘3,4乘四,5乘5三种棋盘

privateintc_level;

//游戏级别,低级,中级,高级分别对应0,1,2

privateintx;

//玩家出的棋子所在位置的行号

privateinty;

//玩家所出棋子所在的列号

publicChessFrame(){

super("

井字棋人机作战"

);

//调用界面初始化函数

frameInitnew();

//退出程序

WindowListenerw=newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

ChessFrame.this.dispose();

System.exit(0);

}

};

this.addWindowListener(w);

//定义响应鼠标单击的事件

ActionListenerch=newActionListener(){

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==level){//级别

c_level=level.getSelectedIndex();

elseif(e.getSource()==size){//根据棋盘大小隐藏部分按钮

c_size=size.getSelectedIndex()+3;

if(c_size==3){

b[0][3].setVisible(false);

b[1][3].setVisible(false);

b[2][3].setVisible(false);

b[3][3].setVisible(false);

b[3][0].setVisible(false);

b[3][1].setVisible(false);

b[3][2].setVisible(false);

b[0][4].setVisible(false);

b[1][4].setVisible(false);

b[2][4].setVisible(false);

b[3][4].setVisible(false);

b[4][4].setVisible(false);

b[4][0].setVisible(false);

b[4][1].setVisible(false);

b[4][2].setVisible(false);

b[4][3].setVisible(false);

elseif(c_size==4){

b[0][3].setVisible(true);

b[1][3].setVisible(true);

b[2][3].setVisible(true);

b[3][3].setVisible(true);

b[3][0].setVisible(true);

b[3][1].setVisible(true);

b[3][2].setVisible(true);

else{

b[0][4].setVisible(true);

b[1][4].setVisible(true);

b[2][4].setVisible(true);

b[3][4].setVisible(true);

b[4][4].setVisible(true);

b[4][0].setVisible(true);

b[4][1].setVisible(true);

b[4][2].setVisible(true);

b[4][3].setVisible(true);

elseif(e.getSource()==cb1){//控制单选按钮

cb1.setSelected(true);

cb2.setSelected(false);

cb1.updateUI();

cb2.updateUI();

startturn=1;

elseif(e.getSource()==cb2){

cb1.setSelected(false);

cb2.setSelected(true);

startturn=2;

elseif(e.getSource()==b4){//开始按钮

//调用内部函数,初始化棋盘beginChess();

elseif(e.getSource()==b5){//结束按钮

endChess();

elseif(e.getSource()==b6){//exit

for(intii=0;

ii<

c_size;

ii++){

for(intjj=0;

jj<

jj++){

if(e.getSource()==b[ii][jj]){

x=ii;

y=jj;

playchess();

}//endelse

}//endactionPerformed

//endactionlistener

//将所有按钮加入监听器

for(inti=0;

i<

5;

i++){

for(intj=0;

j<

j++){

b[i][j].addActionListener(ch);

level.addActionListener(ch);

size.addActionListener(ch);

cb1.addActionListener(ch);

cb2.addActionListener(ch);

b4.addActionListener(ch);

b5.addActionListener(ch);

b6.addActionListener(ch);

this.setVisible(true);

}//endChessframe

///界面初始化函数

privatevoidframeInitnew(){

contentPane=this.getContentPane();

//界面的大小和位置

this.setSize(500,500);

this.setResizable(false);

DimensionframeSize=this.getSize();

DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();

this.setLocation((screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2);

//将整个界面划分成五个区域,东南西北中

//西为棋盘

//北为欢迎词

//中为空白区

//东为命令按钮及棋局状况

//南为游戏结果

//初始状态为3乘3棋盘,级别为低级,电脑先手

c_size=3;

c_level=0;

chessboardFormed();

//形成棋盘

//其他是固定的,所以不需单独形成函数

//北区,欢迎词

b1=newJLabel("

欢迎来到井字棋世界!

"

JLabel.CENTER);

b1.setFont(newjava.awt.Font("

Times"

Font.PLAIN,25));

b1.setForeground(Color.darkGray);

b11=newJLabel("

b12=newJLabel("

upPanel=newJPanel();

upPanel.setLayout(newGridLayout(3,1));

upPanel.setPreferredSize(newDimension(500,80));

upPanel.add(b11);

upPanel.add(b1);

upPanel.add(b12);

contentPane.add(upPanel,BorderLayout.NORTH);

//南区,棋局结果,初始状态为空

b3=newJLabel("

*************************"

b31=newJLabel("

b32=newJLabel("

b3.setFont(newjava.awt.Font("

b3.setForeground(Color.darkGray);

downPanel=newJPanel();

downPanel.setPreferredSize(newDimension(500,60));

downPanel.setLayout(newGridLayout(3,1));

downPanel.add(b31);

downPanel.add(b3);

downPanel.add(b32);

contentPane.add(downPanel,BorderLayout.SOUTH);

///东区,包括游戏级别选择,棋盘大小选择,先手方选择,以及开始,结束退出按钮

rightPanel=newJPanel();

运行结果

本设计中的难易程度分为三个级别,分别为:

初级,中级和高级。

玩家可以根据自己的需要来选择适合自己的难易程度进行游戏。

具体如下图所示:

图3玩家游戏难易程度选择界面

游戏在开始时有两种方式:

具体界面设计如下:

图4玩家赢界面

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

当前位置:首页 > 高等教育 > 医学

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

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