///////////////////////////////////////////////【递归实现Java五子棋算法自创的】////////////////////设置下图标就OK了呵呵。。package javaapplication3;import java.awt.*;import java.awt.image.*;import java.awt.event.*;import javax.swing.*;import java.util.*;/**** author zhangbilei*/class 五子棋 extends JFrame implements ActionListener{private int x;private int y;int row;int column;private JButton button[][];private boolean 甲[][];private boolean 乙[][];private boolean 记录[][];private int count;private JFrame f;private JTextField text;//private JButton 重开new JButton(重新开局);//Image iconToolkit.getDefaultToolkit().getImage(zhangbilei/图片/icon.jpg);public 五子棋(int column,int row){super();//重开.setPreferredSize(new Dimension(20,20));fnew JFrame();this.rowrow;this.columncolumn;count1;//////////////////////////////setLayout(new FlowLayout());FlowLayout flownew FlowLayout();flow.setHgap(0);flow.setVgap(0);setLayout(flow);buttonnew JButton[row][column];甲new boolean[row][column];乙new boolean[row][column];记录new boolean[row][column];//避免重复点击的。。。for(int i0;irow;i)for(int j0;jcolumn;j){button[i][j]new JButton();button[i][j].setPreferredSize(new Dimension(20,20));button[i][j].setIcon(null);add(button[i][j]);button[i][j].addActionListener(this);}//重开.addActionListener(this);setBounds(200,200,20*column20,20*row40);setVisible(true);validate();}public void actionPerformed(ActionEvent e){for(int i0;irow;i)for(int j0;jcolumn;j){if(e.getSource()button[i][j]记录[i][j]!true)//点击过的不能再点{记录[i][j]true;System.out.println(ii;jj ,count count);if(count%2!0){//button[i][j].setIcon(甲方);button[i][j].setText(#);/////////////////////甲[i][j]true;//System.out.println(甲ii;jj甲[i][j]);}else{//button[i][j].setIcon(new ImageIcon(Icon));//Graphics gbutton[i][j].getGraphics();//一定要将窗口显示出来,g画的东西才有效//g.drawImage(icon,0,0,button[i][j].getSize().width,button[i][j].getSize().height,button[i][j]);//button[i][j].setText();//button[i][j].setIcon(乙方);乙[i][j]true;//button[i][j].setIcon(); /////////////}count;}}if(赢的是(甲)){textnew JTextField(甲方赢了,10);System.out.println(甲方赢);f.add(text);//f.add(重开);f.setBounds(100,100,100,100);f.setVisible(true);f.validate();}if(赢的是(乙)){textnew JTextField(乙方赢了,10);System.out.println(乙方赢);f.add(text);//f.add(重开);f.setBounds(100,100,100,100);f.setVisible(true);f.validate();}/* if(e.getSource()重开){for(int i0;irow;i)for(int j0;jcolumn;j){button[i][j].setText(null);甲[i][j]false;乙[i][j]false;}// f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);}*/}public boolean 赢的是(boolean 选手[][]){boolean 赢false;for(int i0;irow;i)for(int j0;jcolumn;j){int flag_L_to_R0;//左向右斜的个数棋子int flag_R_to_L0;//右向左斜的个数int flag_row0;//横向个数int flag_column0;//纵向个数if(jcolumn-4)//判断横向for(int k0;k5;k){if(选手[i][kj]true)flag_row;}if(irow-4)//判断纵向for(int k0;k5;k){if(选手[ik][j]true)flag_column;}///////判断斜向(都是以左边第一个为开头if(jcolumn-4)//以最后四列任意一个开头的是没有斜向的以左边第一个为开头{if(irow-4)//判断左向右斜(\)当irow-4没有左向右斜{for(int k0;k5;k){if(选手[ik][jk]true)flag_L_to_R;}}if(i4)////////判断右向左斜/){for(int k0;k5;k){if(选手[i-k][jk]true)flag_R_to_L;}}}if (flag_L_to_R5||flag_R_to_L5||flag_row5||flag_column5)赢true;}return 赢;}}public class Main{/*** param args the command line arguments*/public static void main(String[] args){五子棋 wnew 五子棋(30,20);//可以设置长宽。。。会自己调节(列行}}