好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

五子棋(编程前言).docx

18页
  • 卖家[上传人]:第***
  • 文档编号:34056780
  • 上传时间:2018-02-20
  • 文档格式:DOCX
  • 文档大小:79.58KB
  • / 18 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 五子棋人机对战算法分析(袁飞)——2015.12.11 日方法 1最简单的算法——权值比较法根据棋盘上的情况不同可对不同的点赋予不同的权值,一个好的权值的定义可能导致机器具有更高的智能,反之一个不合理的权值定义会使机器输的更快我的程序中对权值的定义:一个可落子的点的权值由 4 部分组成——即上图中用黑线标记出的 4 个方向的各个方向的权值——上图中灰色的部分表示待落子的空位置,它的权值等于四个方向权值之和每个方向的权值:(白子)权值定义表1. ●空○空空 502. 空○○空 1003. ●○○○空 5004. 空○○○空 10005. ●○○○○空 50004. 空○○○空空 60006. 空○○○○空 100007. ○○○○○ 100000关于攻防:以电脑的身份扫描棋盘空位置得到权值最大的位置落子此处为攻,以电脑的身份扫描棋盘空位置得到权值最大的位置落子此处为防方法 2预测法这样做下来电脑的水准大概在初级左右,其算法的弱点非常明显,只顾眼前利益,不能顾全大局,这就和许多五子棋初学者一样犯了“目光短浅”的毛病要解决这个问题,我们引入‘预测法’,具体方法是这样的: 首先, 让电脑分析一个比较好的落子点,但是这个落子点的估值函数不能用上边所给出的, 但是必须告诉大家的是:猜测法的运算量相当之大,据我的经验, 方法 3机器自学习算法什么是自学习?package game;import java.awt.Button;import java.awt.Canvas;import java.awt.Color;import java.awt.Frame;import java.awt.Graphics;import java.awt.Label;import java.awt.Panel;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;class ChessPad extends Panel implements MouseListener, ActionListener {/*** */private static final long serialVersionUID = 1L;int array[][] = new int[Constant.ROW][Constant.COL];int priArray[][] = new int[Constant.ROW][Constant.COL];//预测棋盘Scan scanp = new Scan();//Scan scanc = new Scan();Evaluate evaluatep = new Evaluate();Evaluate evaluatec = new Evaluate();Suanfa suanfa = new Suanfa(priArray, scanc, scanc, evaluatec, evaluatec);int i = 0;int x = -1, y = -1, chessColor = 1;Button button = new Button("重新开局");TextField text_1 = new TextField("请黑棋落子 "), text_2 = new TextField(),text_3 = new TextField();ChessPad() {setSize(440, 440);setLayout(null);setBackground(Color.pink);addMouseListener(this);add(button);button.setBounds(10, 5, 60, 26);button.addActionListener(this);add(text_1);text_1.setBounds(90, 5, 90, 24);add(text_2);text_2.setBounds(300, 5, 90, 24);add(text_3);text_3.setBounds(200, 5, 80, 24);for (int i = 0; i Constant.CHESS_NUM|| (y - 5) / Constant.SIZE > Constant.CHESS_NUM) {} else {a = (x + 10) / 20;b = (y + 10) / 20;if (array[b - 2][a - 2] == 0 chesspoint_black.setBounds(a * 20 - 9, b * 20 - 9, 18, 18);chessColor = chessColor * (-1);array[b - 2][a - 2] = 1;priArray[b - 2][a - 2] = 1;wanjia = new Point(b - 2,a - 2);if (Judge.judge(array, 1)) {text_1.setText("黑棋赢 !");chessColor = 2;removeMouseListener(this);} else {text_1.setText("请白棋下子 ");}}}removeMouseListener(this);scanc.init();scanp.init();if (chessColor == -1) {Point p = suanfa.yucefa(2, wanjia , chessColor);// Point p= suanfa.tanlansuanfa(array, scanc, scanp, evaluatec, evaluatep);chessColor = chessColor * (-1);this.add(chesspoint_white);text_2.setText(evaluatec.max_x + " " + evaluatec.max_y+ " " + evaluatec.max);chesspoint_white.setBounds((p.getY() + 2) * Constant.SIZE - 9,(p.getX() + 2) * Constant.SIZE - 9, 18, 18);array[p.getX()][p.getY()] = -1;priArray[p.getX()][p.getY()] = -1;if (Judge.judge(array, -1)) {text_2.setText("白棋赢 !");chessColor = 2;removeMouseListener(this);} else {text_1.setText("请黑棋下子 ");}}addMouseListener(this);}}private void initpriArray() {for (int i = 0; i < Constant.ROW; i++){for (int j = 0; j < Constant.COL; j++) {priArray[i][j] = array[i][j];}}}public void mouseReleased(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseClicked(MouseEvent e) {}public void actionPerformed(ActionEvent e) {this.removeAll();chessColor = 1;add(button);button.setBounds(10, 5, 60, 26);add(text_1);text_1.setBounds(90, 5, 90, 24);text_2.setText("");text_1.setText("请黑棋下子");add(text_2);text_2.setBounds(300, 5, 90, 24);add(text_3);text_3.setBounds(200, 5, 80, 24);i = 0;text_3.setText("这是第" + i + "步");for (int i = 0; i < Constant.ROW; i++){for (int j = 0; j < Constant.COL; j++) {array[i][j] = 0;priArray[i][j] = 0;}}scanp.init();scanc.init();addMouseListener(this);}}class ChessPoint_black extends Canvas implements MouseListener {/*** */private static final long serialVersionUID = 2L;ChessPad chesspad = null;ChessPoint_black(ChessPad p) {setSize(20, 20);addMouseListener(this);chesspad = p;}public void paint(Graphics g) {g.setColor(Color.black);g.fillOval(0, 0, 18, 18);}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseClicked(MouseEvent e) {}}class ChessPoint_white extends Canvas implements MouseListener {/*** */private static final long serialVersionUID = 3L;ChessPad chesspad = null;ChessPoint_white(ChessPad p) {setSize(20, 20);addMouseListener(this);chesspad = p;}public void paint(Graphics g) {g.setColor(Color.white);g.fillOval(0, 0, 18, 18);}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseClicked(MouseEvent e) {}}public class Chess extends Frame {privat。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.