说明一下 做的事最简单的五子棋 无美化。。。。。。
private void init() { this.setTitle("五子棋"); this.setSize(700,700); this.setDefaultCloseOperation(3); this.setPreferredSize(null); this.setVisible(true); Graphics g = this.getGraphics(); ChessListener al = new ChessListener(g,array); this.addMouseListener(al); }
简陋的界面
public void paint(Graphics g){ super.paint(g); for(int i=0;i<Config.Rows;i++){ g.drawLine(Config.X, Config.Y+i*Config.SIZE,Config.X+(Config.Rows-1)*Config.SIZE,Config.Y+i*Config.SIZE); } for(int i=0;i<Config.Lines;i++){ g.drawLine(Config.X+i*Config.SIZE, Config.Y,Config.X+i*Config.SIZE,Config.Y+(Config.Rows-1)*Config.SIZE); } //重绘棋子 for(int i=0;i<array.length;i++){ for(int j=0;j<array[i].length;j++){ if(array[i][j]==1){ g.setColor(Color.BLACK); // g.fillOval(Config.X+Config.CHESS_SIZE/2, y-Config.CHESS_SIZE/2, Config.CHESS_SIZE, Config.CHESS_SIZE); int x=Config.X+Config.SIZE*i; int y=Config.Y+Config.SIZE*j; if(array[i][j]==1){ g.setColor(Color.BLACK); g.fillOval(x-Config.CHESS_SIZE/2, y-Config.CHESS_SIZE/2, Config.CHESS_SIZE, Config.CHESS_SIZE); } if(array[i][j]==-1){ g.setColor(Color.WHITE); g.fillOval(x-Config.CHESS_SIZE/2, y-Config.CHESS_SIZE/2, Config.CHESS_SIZE, Config.CHESS_SIZE); } } } }
蹩脚的重绘 :是为了使棋盘永远存在
public boolean WinL(int x,int y){ int count1=0; //往下 for(int i=y;i<array.length;i++){ if(array[x][i]==array[x][y]){ count1++; } else{break;}} //往上 for(int i=y;i>=0;i--){ if(array[x][i]==array[x][y]){ count1++; } else{break;} } System.out.print("当前的的count"+count1); if(count1 >= 6){ return true; } return false; } //行的判断 public boolean WinH(int x,int y){ int count1=0; //往右 for(int i=x;i<array.length;i++){ if(array[i][y]==array[x][y]){ count1++; } else{break;}} //往左 for(int i=x;i>=0;i--){ if(array[i][y]==array[x][y]){ count1++; } else{break;} } System.out.print("当前的的count"+count1); if(count1 >= 6){ return true; } return false; } //右下斜与左上斜的判断 public boolean WinYXZS(int x,int y){ int count1=0; //往右下斜 for(int i=x,j=y;i<array.length&&j<array.length;i++,j++){ if(array[i][j]==array[x][y]){ count1++; } else{break;}} //往左 for(int i=x,j=y;i>=0&&j>=0;i--,j--){ if(array[i][j]==array[x][y]){ count1++; } else{break;} } System.out.print("当前的的count"+count1); if(count1 >=6){ return true; } return false; } //左下斜与右上斜的判断 public boolean WinZXYS(int x,int y){ int count1=0; //往左下斜 for(int i=x,j=y;j>=0&&i<array.length;i++,j--){ if(array[i][j]==array[x][y]){ count1++; } else{break;}} //往右上斜 for(int i=x,j=y;i>=0&&j<array.length;i--,j++){ if(array[i][j]==array[x][y]){ count1++; } else{break;} } System.out.print("当前的的count"+count1); if(count1 >= 6){ return true; } return false; }
效率低下的输赢判断 不过我在里面的斜向判断加入了一些限定 这样 不管我下在哪一个点 我的数组都不会越界
for(int i=0;i<Config.Rows;i++){ for(int j=0;j<Config.Lines;j++){ int x=Config.X+Config.SIZE*i; int y=Config.Y+Config.SIZE*j; if(x1>x-Config.SIZE/3&&x1<x+Config.SIZE/3&&y1>y-Config.SIZE/3&&y1<y+Config.SIZE/3){ if(array[i][j]==0){ if(count==0){ array[i][j]=1; g.setColor(Color.BLACK); g.fillOval(x-Config.CHESS_SIZE/2, y-Config.CHESS_SIZE/2, Config.CHESS_SIZE, Config.CHESS_SIZE); count++; } else if(count==1){ array[i][j]=-1; g.setColor(Color.WHITE); g.fillOval(x-Config.CHESS_SIZE/2, y-Config.CHESS_SIZE/2, Config.CHESS_SIZE, Config.CHESS_SIZE); count--; }
最后的监听机制 实现了画棋子
这样一个垃圾的五子棋游戏就诞生了。。。。。。
而且还只是人人的
接下来的人机 我还没有想法