1、课程: 人工智能原理及其应用班别 12 商本学号及姓名小组成员指导老师实验02 井字棋1、 总体要求:1.1 总体功能要求 :利用不同的方法,实现人机对战过程中呈现出不同程度的智能特征:(1) 利用极大极小算法、- 剪枝来提高算法的效率。(2) 使用高级语言,编写一个智能井字棋游戏。(3) 结合极大极小算法的使用方法和 - 剪枝,让机器与人对弈时不但有智能的特征,而且计算的效率也比较高。1.2开发平台要求:开发者开发的软件必须能够在不同系统的电脑上正常运行,因此开发平台为:开发环境:JDK1.6开发工具和技术体系:为了此游戏能够很好的在不同系统中运行,因选择 javaee 进行开发,利用ecl
2、ipse1.3 项目管理要求 :(1)项目程序编写过程中要适当的写一些注释,以便下次作业时能够快速的 上手和以后的修改:(2)项目程序要保存在一个固定的工作区间;(3)确保代码不要太多冗余2、 需求分析:2.1 软件的用户需求:井字棋游戏的用户希望游戏除了有一般的功能之外,还可以通过极大极小算法、- 剪枝等方法是的井字棋游戏能够拥有智能特征,并是的电脑在人机对弈的过程中因玩家的难度选择而体现不同程度的智能状况。2.2 软件的功能需求:本游戏需要实现功能有:(1)游戏的重新设置(2)游戏统计(如:人赢的次数、电脑赢的次数等)(3)游戏的退出(4)不同智能程度下(脑残、懵懂、正常、智能) ,人机对
3、弈(5)既可以选择难度,也可以选择谁走第一步(人 or 电脑)2.3 软件的性能需求:井字棋游戏需要以图形界面的形式表现出来,通过点击图标就可以进入游戏;在游戏进行时,人机对弈时电脑能够快速的反应并根据人的上一步动作作出,通过选择“脑残、懵懂、正常、智能”难度选择,电脑以不同程度的智能与人进行游戏对弈。2.4 运行环境:能够运行 java 程序的环境(装有 jdk 或者 jre)2.5 用户界面设计:用 gridlayout 进行用户界面的设计把界面中分为不同的模块。3、软件概要设计3.1 软件的逻辑设计:就是系统的功能模块结构图井字棋难度选择先手选择游戏游戏结果显示界面脑残电脑先手玩家先手智
4、能正常懵懂双方打平退出系统游戏统计新游戏电脑赢人赢人赢次数游戏状态游戏显示双方打平电脑赢次数4、 软件详细设计4.1 开发平台与环境Eclipse; JDK1.6 4.2 用户界面的详细设计4.3 各个模块的具体设计游戏界面主要是利用 GridLayout 来进行布局管理,把整个 JFrame 分成左右两部分 pwleft 和 pwright。public void Layout() fw = new JFrame(“井字棋“ );fw.setBounds(100, 100, 1000, 600);cw = fw.getContentPane();pwleft = new JPanel();p
5、wleft.setBorder(BorderFactory.createLineBorder(Color.black, 1);pwright = new JPanel();pwright.setBorder(BorderFactory.createLineBorder(Color.black, 1);pwleft.setLayout(new GridLayout(qipanX, qipanY);pwleft 是用来装 3*3 井字棋的 9 个格子for (int i = 0; i qipanX; i+)for (int j = 0; j qipanY; j+) qipanij = new JL
6、abel();qipanij.setBorder(BorderFactory.createEtchedBorder();qipanij.setBackground(Color.RED);qipanij.setEnabled(true);pwleft.add(qipanij);pwright 是用来装游戏设置和游戏状态显示。然后再将 pwright 分为上、中、下三个部分分别命名为 pwright1、pwright2、pwright3pwright1 用来装三个按钮:新游戏、游戏统计、退出游戏;pwright2 用来装难度选择(脑残、懵懂、正常、智能四个级别)和先手选择(玩家先手、电脑先手)两个
7、界面;pwright3 用来显示当前游戏状态。当点击游戏统计按钮的时候,会弹出一个界面,此界面内容是:玩家赢过的次数、电脑赢的次数和两者打平的次数。若是完成游戏,则或弹出一个说明游戏结果的界面(人赢、电脑赢或打平手)一些重要算法的实现部分代码:5 系统实现:以上为设计部分,下面是实现部分,5.1 开发平台:jdk1.6+eclipse 5.2 类图:(1)主函数 main 创建实例对象;(2)Public TicTacToe() 调用类的构造函数,构建游戏的图形界面和游戏记录的读取;(3)playChess()会进入一个死循环,要点击新游戏调用 newGame()使得条件的到初始化 得到条件
8、manTurn = true 才能够开始新的游戏 ;(4)选择不同的难度程度“脑残、懵懂、正常、智能”分别调用 AiChess1()、AiChess2()、AiChess3()、AiChess4()(5)下棋的时候是通过 mouseClicked()来实现的等(6) 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。5.3 结果展示6、总结在做这次的实验,虽然作出了大体的代码,可是有些问题还是没有得到解决。不过,通过做这次的实验,我们也学到了不少的知识点,增加了我们对人工智能的理解,还感受到了自主学习的乐趣,懂得了团队合作的重要性。很有趣的一个小游戏,可惜的是如果选择智能的话,总是赢不了电脑。