Two previous articles: Java implements two Gozi game (two) to draw a chess board; Java implements two Gozi game (three) to draw a chess piece; Java implements two Gozi game (four) to realize the move; Java implements two Gozi game (six) to transform the chess side, you can click to view.
The next function we want to implement is to prompt information on the screen when there are five consecutive beads. Just use showMessageDialog in the isWin part of the mousePressed function.
The mousePressed function code is as follows:
@Override //Public void mousePressed(MouseEvent e) { int point_x=e.getX(); int point_y=e.getY(); int imgWidth = boardImg.getHeight(this); int imgHeight = boardImg.getWidth(this); int FWidth = getWidth(); int FHeight= getHeight(); int x=(FWidth-imgWidth)/2; int y=(FHeight-imgHeight)/2; int span_x=imgWidth/ROWS; int span_y=imgHeight/ROWS; //System.out.println("press"); int status_x = 0; int status_y = 0; if(point_x>=x && point_x<=x+imgWidth && point_y>=y && point_y <= y+imgHeight) { //System.out.println("Legal"); for(int i=0;i<ROWS+1;i++) { if(point_x>=x-chessman_width/2+1+i*span_x) { if(point_x<=x+chessman_width/2-1+i*span_x)//If it is width/2, two matching values will appear at the middle point{ //System.out.println("point x "+i+" "+point_x+" "+(x-chessman_width/2+i*span_x)+" "+(x+chessman_width/2+i*span_x)); status_x = i; } } } for(int i=0;i<ROWS+1;i++) { if(point_y>=y-chessman_width/2+1+i*span_y) { if(point_y <= y+chessman_width/2-1+i*span_y) { //System.out.println("point y "+i+" "+point_y+" "+(y-chessman_width/2+1+i*span_y)+" "+(y+chessman_width/2-1+i*span_y)); status_y = i; } } } if(chessStatus[status_x][status_y]==null||chessStatus[status_x][status_y].getPlaced()==false) { Chessman chessman = new Chessman(chessColor, true); chessStatus[status_x][status_y]=chessman; System.out.println("chess color:"+chessColor); if(chessColor==BLACK) { chessColor = WHITE; }else { chessColor = BLACK; } repaint(); //If win, give a prompt message if(isWin(status_x, status_y, chessStatus)) { System.out.println("WIN!!!"); String winner; //If the next child is white, then this time it is black if(chessColor == WHITE) winner = "Black"; else winner = "Blank"; String mString = String.format("Congratulations, %s WIN!!!", winner); JOptionPane.showMessageDialog(this, mString); } } } }Run it:
At this point, we have completed the most basic Gozi function. I'll post the complete code below:
Chessman.java
package xchen.test.simpleGobang; public class Chessman { private int color;//1-white, 0-black private boolean placed = false; int matchCount = 1; public Chessman(int color,boolean placed){ this.color=color; this.placed=placed; } public boolean getPlaced() { return placed; } public void setPlaced(boolean placed) { this.placed = placed; } public int getColor() { return color; } public void setColor(int color) { this.color = color; } } Main.java
package xchen.test.simpleGobang; import java.awt.Container; import javax.swing.JFrame; import xchen.test.simpleGobang.DrawChessBoard; public class Main extends JFrame{ private DrawChessBoard drawChessBoard; public Main() { drawChessBoard = new DrawChessBoard(); //Frame title setTitle("Stand-alone Goji"); Container containerPane =getContentPane(); containerPane.add(drawChessBoard); } public static void main(String[] args) { Main m = new Main(); m.setSize(800, 800); m.setVisible(true); } } DrawChessBoard.java
package xchen.test.simpleGobang; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RadialGradientPaint; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JOptionPane; import javax.swing.JPanel; public class DrawChessBoard extends JPanel implements MouseListener{ final static int BLACK=0; final static int WHITE=1; public int chessColor = BLACK; int chessman_width=30; public Image boardImg; final private int ROWS = 19; Chessman[][] chessStatus=new Chessman[ROWS+1][ROWS+1]; public DrawChessBoard() { boardImg = Toolkit.getDefaultToolkit().getImage("res/drawable/chessboard2.png"); if(boardImg == null) System.err.println("png do not exist"); addMouseListener(this); } @Override protected void paintComponent(Graphics g) { // TODO Auto-generated method stub super.paintComponent(g); int imgWidth = boardImg.getHeight(this); int imgHeight = boardImg.getWidth(this); int FWidth = getWidth(); int FHeight= getHeight(); int x=(FWidth-imgWidth)/2; int y=(FHeight-imgHeight)/2; int span_x=imgWidth/ROWS; int span_y=imgHeight/ROWS; g.drawImage(boardImg, x, y, null); //Draw horizontal line for(int i=0;i<ROWS;i++) { g.drawLine(x, y+i*span_y, FWidth-x,y+i*span_y); } //Draw vertical line for(int i=0;i<ROWS;i++) { g.drawLine(x+i*span_x, y, x+i*span_x,FHeight-y); } //Draw chess pieces for(int i=0;i<ROWS+1;i++) { for(int j=0;j<ROWS+1;j++) { if(chessStatus[i][j]!=null&&chessStatus[i][j].getPlaced()==true) { //System.out.println("draw chessman "+i+" "+j); int pos_x=x+i*span_x; int pos_y=y+j*span_y; float radius_b=40; float radius_w=80; float[] fractions = new float[]{0f,1f}; java.awt.Color[] colors_b = new java.awt.Color[]{Color.BLACK,Color.WHITE}; Color[] colors_w = new Color[]{Color.WHITE,Color.BLACK}; RadialGradientPaint paint; if(chessStatus[i][j].getColor()==1) { //System.out.println("draw white chess"); paint = new RadialGradientPaint(pos_x-chessman_width/2f, pos_y-chessman_width/2f, radius_w*2, fractions, colors_w); }else{ //System.out.println("draw black chess"); paint = new RadialGradientPaint(pos_x-chessman_width/2f, pos_y-chessman_width/2f, radius_b*2, fractions, colors_b); } ((Graphics2D)g).setPaint(paint); ((Graphics2D)g).fillOval(pos_x-chessman_width/2,pos_y-chessman_width/2,chessman_width,chessman_width); } } } } @Override //Public void mousePressed(MouseEvent e) { int point_x=e.getX(); int point_y=e.getY(); int imgWidth = boardImg.getHeight(this); int imgHeight = boardImg.getWidth(this); int FWidth = getWidth(); int FHeight= getHeight(); int x=(FWidth-imgWidth)/2; int y=(FHeight-imgHeight)/2; int span_x=imgWidth/ROWS; int span_y=imgHeight/ROWS; //System.out.println("press"); int status_x = 0; int status_y = 0; if(point_x>=x && point_x<=x+imgWidth && point_y>=y && point_y <= y+imgHeight) { //System.out.println("Legal"); for(int i=0;i<ROWS+1;i++) { if(point_x>=x-chessman_width/2+1+i*span_x) { if(point_x<=x+chessman_width/2-1+i*span_x)//If it is width/2, two matching values will appear at the middle point{ //System.out.println("point x "+i+" "+point_x+" "+(x-chessman_width/2+i*span_x)+" "+(x+chessman_width/2+i*span_x)); status_x = i; } } for(int i=0;i<ROWS+1;i++) { if(point_y>=y-chessman_width/2+1+i*span_y) { if(point_y <= y+chessman_width/2-1+i*span_y) { //System.out.println("point y "+i+" "+point_y+" "+(y-chessman_width/2+1+i*span_y)+" "+(y+chessman_width/2-1+i*span_y)); status_y = i; } } } if(chessStatus[status_x][status_y]==null||chessStatus[status_x][status_y].getPlaced()==false) { Chessman chessman = new Chessman(chessColor, true); chessStatus[status_x][status_y]=chessman; System.out.println("chess color:"+chessColor); if(chessColor==BLACK) { chessColor = WHITE; }else { chessColor = BLACK; } repaint(); //If you win, give a prompt message if(isWin(status_x, status_y, chessStatus)) { System.out.println("WIN!!!!"); String winner; //If the next child is white, then this time it is black if(chessColor == WHITE) winner = "black"; else winner = "white"; String mString = String.format("Congratulations, %s WIN!!!", winner); JOptionPane.showMessageDialog(this, mString); } } } } @Override // public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } boolean isWin(int point_x,int point_y,Chessman[][] cm) { for(int i=0;i<ROWS+1;i++) { for(int j=0;j<ROWS+1;j++) { //Long-side search if(chessStatus[i][j]!=null&&chessStatus[i][j].getPlaced()==true) { int matchColor = chessStatus[i][j].getColor(); //Look for(int n=1;n<=4;n++) { if((i+n>=0)&&(i+n)<=ROWS) { if(chessStatus[i+n][j]!=null&&chessStatus[i+n][j].getPlaced()==true&&chessStatus[i+n][j].getColor()==matchColor) { chessStatus[i][j].matchCount++; System.out.println("pos:"+i+" "+j+" right count++:"+(i+n)+" "+j+" count:"+chessStatus[i][j].matchCount); if(chessStatus[i][j].matchCount==5) { return true; } }else { break; } } } //Look for(int n=1;n<=4;n++) { if((in>=0)&&(in)<=ROWS) { if(chessStatus[in][j]!=null&&chessStatus[in][j].getPlaced()==true&&chessStatus[in][j].getColor()==matchColor) { chessStatus[i][j].matchCount++; System.out.println("pos:"+i+" "+j+" "+"left count++:"+(in)+" "+j+" count:"+chessStatus[i][j].matchCount); if(chessStatus[i][j].matchCount==5) { return true; } }else { if(chessStatus[in][j]!=null) { chessStatus[i][j].matchCount = 1; } break; } } } } chessStatus[i][j].matchCount=1;//refresh count } } } for(int i=0;i<ROWS+1;i++) { for(int j=0;j<ROWS+1;j++) { //Perpendicular if(chessStatus[i][j]!=null&&chessStatus[i][j].getPlaced()==true) { int matchColor = chessStatus[i][j].getColor(); //Look down, the upper left corner is the coordinate origin, the positive direction of the y-axis is down for(int n=1;n<=4;n++) { if((j+n>=0)&&(j+n)<=ROWS) { if(chessStatus[i][j+n]!=null&&chessStatus[i][j+n].getPlaced()==true&&chessStatus[i][j+n].getColor()==matchColor) { chessStatus[i][j].matchCount++; System.out.println("pos:"+i+" "+j+" up count++:"+(i)+" "+(j+n)+" count:"+chessStatus[i][j].matchCount); if(chessStatus[i][j].matchCount==5) { return true; } }else { break; } } } //Look up for(int n=1;n<=4;n++) { if((jn>=0)&&(jn)<=ROWS) { if(chessStatus[i][jn]!=null&&chessStatus[i][jn].getPlaced()==true&&chessStatus[i][jn].getColor()==matchColor) { chessStatus[i][j].matchCount++; System.out.println("pos:"+i+" "+j+" "+"left count++:"+(i)+" "+(jn)+" count:"+chessStatus[i][j].matchCount); if(chessStatus[i][j].matchCount==5) { return true; } }else { if(chessStatus[i][jn]!=null) { chessStatus[i][j].matchCount = 1; } break; } } } chessStatus[i][j].matchCount=1;//refresh count } } } // Direction: upper left and lower right for(int i=0;i<ROWS+1;i++) { for(int j=0;j<ROWS+1;j++) { //Upper left if(chessStatus[i][j]!=null&&chessStatus[i][j].getPlaced()==true) { int matchColor = chessStatus[i][j].getColor(); //Look down, the upper left corner is the coordinate origin, and the positive direction of the y-axis is down for(int n=1;n<=4;n++) { if((jn>=0)&&(jn)<=ROWS&&(in)>=0&&(in)<=ROWS) { if(chessStatus[in][jn]!=null&&chessStatus[in][jn].getPlaced()==true&&chessStatus[in][jn].getColor()==matchColor) { chessStatus[i][j].matchCount++; System.out.println("pos:"+i+" "+j+" up count++:"+(in)+" "+(jn)+" count:"+chessStatus[i][j].matchCount); if(chessStatus[i][j].matchCount==5) { return true; } }else { break; } } } //bottom right for(int n=1;n<=4;n++) { if((j+n>=0)&&(j+n)<=ROWS&&(i+n)>=0&&(i+n)<=ROWS) { if(chessStatus[i+n][j+n]!=null&&chessStatus[i+n][j+n].getPlaced()==true&&chessStatus[i+n][j+n].getColor()==matchColor) { chessStatus[i][j].matchCount++; System.out.println("pos:"+i+" "+j+" "+"left count++:"+(i+n)+" "+(j+n)+" count:"+chessStatus[i][j].matchCount); if(chessStatus[i][j].matchCount==5) { return true; } }else { if(chessStatus[i+n][j+n]!=null) { chessStatus[i][j].matchCount = 1; } break; } } } chessStatus[i][j].matchCount=1;//refresh count } } } // Direction: lower left upper right upper for(int i=0;i<ROWS+1;i++) { for(int j=0;j<ROWS+1;j++) { // Lower left if(chessStatus[i][j]!=null&&chessStatus[i][j].getPlaced()==true) { int matchColor = chessStatus[i][j].getColor(); //Look down, the upper left corner is the coordinate origin, and the positive direction of the y-axis is down for(int n=1;n<=4;n++) { if((j+n>=0)&&(j+n)<=ROWS&&(in)>=0&&(in)<=ROWS) { if(chessStatus[in][j+n]!=null&&chessStatus[in][j+n].getPlaced()==true&&chessStatus[in][j+n].getColor()==matchColor) { chessStatus[i][j].matchCount++; System.out.println("pos:"+i+" "+j+" up count++:"+(in)+" "+(j+n)+" count:"+chessStatus[i][j].matchCount++); if(chessStatus[i][j].matchCount==5) { return true; } }else { break; } } } //Upper right for(int n=1;n<=4;n++) { if((jn>=0)&&(jn)<=ROWS&&(i+n)>=0&&(i+n)<=ROWS) { if(chessStatus[i+n][jn]!=null&&chessStatus[i+n][jn].getPlaced()==true&&chessStatus[i+n][jn].getColor()==matchColor) { chessStatus[i][j].matchCount++; System.out.println("pos:"+i+" "+j+" "+"left count++:"+(i+n)+" "+(jn)+" count:"+chessStatus[i][j].matchCount); if(chessStatus[i][j].matchCount==5) { return true; } }else { if(chessStatus[i+n][jn]!=null) { chessStatus[i][j].matchCount = 1; } break; } } } chessStatus[i][j].matchCount=1;//refresh count } } } return false; } }For more exciting games, please refer to the special topic "Java Classic Games"
The above is all the content of this article. I hope it will be helpful to everyone's learning and I hope everyone will support Wulin.com more.