为什么80%的码农都做不了架构师?>>>
程序说明:大学期间的课程设计,黑棋先行,此程序仅仅试探性的的摸清五子棋程序框架设计的基本思路,其具体的五子棋下棋思路还有待完善,此程序仅从防守的角度给予回应对方棋子,也没有禁手的设置。
其源代码如下:
public class Untitled7 extends javax.swing.JFrame {javax.swing.JButton jbBegin = new javax.swing.JButton("重新开始");javax.swing.JButton jbBack = new javax.swing.JButton("悔棋");javax.swing.JPanel jpButt = new javax.swing.JPanel();int M = 15;int board[][] = new int[M][M];//存储棋盘上的落子状况int FLAG = 1;//胜负状态标志public Untitled7(){jpButt.setLayout(new java.awt.FlowLayout());jpButt.add(jbBegin);jpButt.add(jbBack);gbPanel gp = new gbPanel();this.getContentPane().add(jpButt,java.awt.BorderLayout.NORTH);this.getContentPane().add(gp,java.awt.BorderLayout.CENTER);this.setSize(310,372);this.setResizable(false);this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);this.setVisible(true);}public static void main(String[] args) {new Untitled7();}class gbPanel extends javax.swing.JPanel{public gbPanel(){this.addMouseListener(new mouselis());//落子事件}public void paintComponent(java.awt.Graphics g){super.paintComponent(g);javax.swing.ImageIcon icon1 = new javax.swing.ImageIcon("五子棋_棋盘.jpg");g.drawImage(icon1.getImage(),0,0,this);//在panel中绘制棋盘for(int i=0;i<M;i++)for(int j=0;j<M;j++){if(1==board[i][j]){//重绘黑子g.drawImage(new mouselis().iconB.getImage(),i*20+1,j*20+1,this);}else if(2==board[i][j]){//重绘白字g.drawImage(new mouselis().iconW.getImage(),i*20+1,j*20+1,this);}}}class mouselis extends java.awt.event.MouseAdapter{javax.swing.ImageIcon iconB = new javax.swing.ImageIcon("五子棋_黑子.jpg");javax.swing.ImageIcon iconW = new javax.swing.ImageIcon("五子棋_白子.jpg");String strb = "黑方";String strw = "白方";public void mouseClicked(java.awt.event.MouseEvent e) {int xb = e.getX()/20;//获取黑棋落子的行号int yb = e.getY()/20;//获取黑棋落子的列号int mb = xb*20;//int nb = yb*20;//if(1==FLAG){if (0 == board[xb][yb]) { //该点为空,可以着子getGraphics().drawImage(iconB.getImage(), mb + 1, nb + 1, gbPanel.this);board[xb][yb] = 1;//修改存储信息win(board, xb, yb, strb);//判断胜负if(1==FLAG){int xw = gow(board) / 15;//获取白棋落子的行号int yw = gow(board) % 15;int mw = xw * 20;int nw = yw * 20;getGraphics().drawImage(iconW.getImage(), mw + 1, nw + 1, gbPanel.this);board[xw][yw] = 2;win(board, xw, yw, strw);}} //end if black}}//end void mouseClicked()int gow(int board[][]){int k=0;int max=0;int tagb = 0;int tagw = 0;int bla[] = new int[4];int whi[] = new int[4];java.util.Vector v4= new java.util.Vector();java.util.Vector v3= new java.util.Vector();java.util.Vector v2= new java.util.Vector();java.util.Vector v1= new java.util.Vector();java.util.Vector v0= new java.util.Vector();for(int i=0;i<M;i++){for(int j=0;j<M;j++){for(int t=0;t<4;t++){bla[t] = 0;//init bla[]whi[t] = 0;//init whi[]tagb=0;tagw=0;}//end for forif(0==board[i][j]){ //当前坐标可以着子int buf[][]={{1,0},{1,1},{0,1},{-1,1}};//四个方向for(int m=0;m<4;m++){//向四个方向搜索int num = 1;for(int n=-1;n<2;n+=2){//每个方向的正反两个方向int t=1,row,col;while(t!=0){row = i+buf[m][0]*n*t;//行值++或行值--col = j+buf[m][1]*n*t;if((row>=0)&&(col>=0)&&(row<15)&&(col<15)&&(2==board[row][col])){whi[m]++;//坐标row,col处为白子t++;}else if((row>=0)&&(col>=0)&&(row<15)&&(col<15)&&(1==board[row][col])){tagw = 1;//连续白子后的棋子为对方棋子,默认为空t = 0;}elset=0;}t=1;while(t!=0){row = i+buf[m][0]*n*t;col = j+buf[m][1]*n*t;if((row>=0)&&(col>=0)&&(row<15)&&(col<15)&&(1==board[row][col])){bla[m]++;//坐标row,col处为黑子t++;}else if((row>=0)&&(col>=0)&&(row<15)&&(col<15)&&(2==board[row][col])){tagb = 2;//连续黑子后的棋子为对方棋子,默认为空t = 0;}elset=0;}}}}//end ifint z=0;for(int p = 0;p < 4;p++){for (int q = 0; q < 4; q++) {if (whi[q] > 3 ) {//当前i,j坐标处的四个方向的白色棋子大于3,自己着子后就获胜v4.addElement(new Integer(k));}else if(bla[q]>3){//当前i,j坐标处的四个方向的黑色棋子大于3,自己必须防守,否则就败v3.addElement(new Integer(k));}else if ( (whi[q] == 3)) {//当前i,j坐标处的四个方向的白色棋子等于3,进行冲4v2.addElement(new Integer(k));}else if ( (tagb==0)&&(bla[q]==3)) {//当前i,j坐标处的四个方向的黑色棋子等于3,且为活三v1.addElement(new Integer(k));}else {if (max < (bla[p] + whi[q])) {//选取连接白子和黑子最多的点max = (bla[p] + whi[q]);v0.removeAllElements();v0.addElement(new Integer(k));}else if(max == (bla[p] + whi[q])){v0.addElement(new Integer(k));}}}}k++;}//end for j}//end for iif (!v4.isEmpty()) {return Integer.parseInt(v4.elementAt(0).toString());}else if (!v3.isEmpty()) {return Integer.parseInt(v3.elementAt(0).toString());}else if (!v2.isEmpty()) {return Integer.parseInt(v2.elementAt(0).toString());}else if (!v1.isEmpty()) {return Integer.parseInt(v1.elementAt(0).toString());}elsereturn Integer.parseInt(v0.elementAt(0).toString());}//end int gow()public void win(int qi[][],int m,int n,String str){int buf[][]={{1,0},{1,1},{0,1},{-1,1}};int color = qi[m][n];for(int i=0;i<4;i++){int num = 1;for(int k=-1;k<2;k+=2){int t=1,row,col;while(t!=0){row = m+buf[i][0]*k*t;col = n+buf[i][1]*k*t;if((row>=0)&&(col>=0)&&(row<15)&&(col<15)&&(color==qi[row][col])){num++;if(num==5){javax.swing.JOptionPane.showMessageDialog(Untitled7.this,str+"胜利","结果",javax.swing.JOptionPane.INFORMATION_MESSAGE);FLAG = 2;}t++;}elset=0;}}}}}//end class mouselis}//end class gbpanel
}//end
运行结果截图: