Dois artigos anteriores: Java implementa dois jogos Gozi (dois) para desenhar um quadro de xadrez; Java implementa dois jogos Gozi (três) para desenhar uma peça de xadrez; Java implementa dois jogos Gozi (quatro) para realizar a mudança; Java implementa dois jogos Gozi (seis) para transformar o lado do xadrez, você pode clicar para visualizar.
A próxima função que queremos implementar é solicitar informações na tela quando houver cinco contas consecutivas. Basta usar o showMessagedialog na parte Iswin da função pressionada pelo mouse.
O código de função pressionado pelo mouse é o seguinte:
@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/linhas; int span_y = imgheight/linhas; //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+imghight) {//system.out.println("legal "); para (int i = 0; i <linhas+1; i ++) {if (point_x> = x-chassman_width/2+1+i*span_x) {if (point_x <= x+chessman_width/2-1+i*span_x) // se for largura/2, dois valores de correspondência aparecerão no Middle Point { "+Point_x+" "+(x-chessman_width/2+i*span_x)+" "+(x+chessman_width/2+i*span_x)); status_x = i; }}} para (int i = 0; i <linhas+1; i ++) {if (Point_y> = y-chessman_width/2+1+i*span_y) {if (Point_y <= y+chessman_width/2-1+i*span) {//system.out.println( furlindh/2-1+i* "+(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 = novo chessman (chesscolor, true); chessstatus [status_x] [status_y] = chessman; System.out.println ("Cor do xadrez:"+chesscolor); if (chesscolor == preto) {chesscolor = white; } else {chesscolor = preto; } repaint (); // Se Win, dê uma mensagem rápida se (iswin (status_x, status_y, chessstatus)) {system.out.println ("win !!!"); Vencedor da string; // Se a próxima criança for branca, desta vez é preto se (chesscolor == branco) vencedor = "preto"; else winner = "em branco"; String mstring = string.format ("Parabéns, %s vitória !!!", vencedor); JoptionPane.ShowMessagedialog (isto, MString); }}}}Execute:
Neste ponto, concluímos a função Gozi mais básica. Vou postar o código completo abaixo:
Chessman.java
pacote xchen.test.simplegobang; classe pública Chessman {private int color; // 1-white, 0-Black Private Boolean colocado = false; int matchCount = 1; public chessman (int cor, boolean colocado) {this.color = color; this.placed = colocado; } public boolean getPlaced () {return colocado; } public void SetPlaced (boolean colocado) {this.Placed = Placed; } public int getColor () {return color; } public void setColor (int cor) {this.color = color; }} Main.java
pacote xchen.test.simplegobang; importar java.awt.container; importar javax.swing.jframe; importar xchen.test.simplegobang.drawchessboard; A classe pública principal estende JFrame {private Drawchessboard drawchessboard; public main () {drawchessboard = new DrawChessboard (); // título de quadro Settitle ("Goji independente"); ContainerPane de contêiner = getContentPane (); Containerpane.add (DrawChessboard); } public static void main (string [] args) {main m = new main (); M.SetSize (800, 800); M.Setvisible (True); }} Drawchessboard.java
pacote xchen.test.simplegobang; importar java.awt.color; importar java.awt.graphics; importar java.awt.graphics2d; importar java.awt.image; importar java.awt.RadialGradientPaint; importar java.awt.toolkit; importar java.awt.event.mouseevent; importar java.awt.event.mouselistener; importar javax.swing.JOptionPane; importar javax.swing.jpanel; A classe pública drawchessboard estende o jpanel implementa MouseListener {final estático int preto = 0; estático final Int branco = 1; public int chesscolor = preto; int chessman_width = 30; Public Image Boardimg; Final Private Int linhas = 19; Chessman [] [] chessstatus = novo chessman [linhas+1] [linhas+1]; public drawchessboard () {boardimg = Toolkit.getDefaultToolkit (). getImage ("res/drawable/chessboard2.png"); if (boardimg == null) system.err.println ("png não existe"); addmouseListener (isto); } @Override Protected Void PaintComponent (Gráfico G) {// TODO Método Gerado automático 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/linhas; int span_y = imgheight/linhas; G.Drawimage (Boardimg, X, Y, Null); // desenhe linha horizontal para (int i = 0; i <linhas; i ++) {g.drawline (x, y+i*span_y, fwidth-x, y+i*span_y); } // desenhe linha vertical para (int i = 0; i <linhas; i ++) {g.drawline (x+i*span_x, y, x+i*span_x, fHeight-y); } // desenhe peças de xadrez para (int i = 0; i <linhas+1; i ++) {for (int j = 0; j <linhas+1; j ++) {if (chessstatus [i] [j]! int pos_x = x+i*span_x; int pos_y = y+j*span_y; Float raius_b = 40; Float raius_w = 80; float [] frações = novo float [] {0f, 1f}; java.awt.color [] colors_b = new java.awt.color [] {color.black, color.white}; Color [] colors_w = nova cor [] {color.white, color.black}; Tinta radialgradientepaint; if (chessstatus [i] [j] .getColor () == 1) {//system.out.println("draw white xadrez "); Paint = new RadialGradientPaint (POS_X-CHESSMAN_WIDTH/2F, POS_Y-CHESSMAN_WIDTH/2F, RADIUS_W*2, FRAÇÕES, 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, FRAÇÕES, COLORS_B); } ((Graphics2d) g) .SetPaint (tinta); ((Graphics2d) G) .Filoval (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/linhas; int span_y = imgheight/linhas; //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+imghight) {//system.out.println("legal "); para (int i = 0; i <linhas+1; i ++) {if (point_x> = x-chassman_width/2+1+i*span_x) {if (point_x <= x+chessman_width/2-1+i*span_x) // se for largura/2, dois valores de correspondência aparecerão no Middle Point { "+Point_x+" "+(x-chessman_width/2+i*span_x)+" "+(x+chessman_width/2+i*span_x)); status_x = i; }} para (int i = 0; i <linhas+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.printlnn""pogust y "+i*span_y) {//system.out.println furt/" "+(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 = novo chessman (chesscolor, true); chessstatus [status_x] [status_y] = chessman; System.out.println ("Cor do xadrez:"+chesscolor); if (chesscolor == preto) {chesscolor = white; } else {chesscolor = preto; } repaint (); // Se você vencer, faça uma mensagem rápida se (iswin (status_x, status_y, chessstatus)) {System.out.println ("Win !!!!"); Vencedor da string; // Se a próxima criança for branca, desta vez é preto se (chesscolor == branco) vencedor = "preto"; else vencedor = "branco"; String mstring = string.format ("Parabéns, %s vitória !!!", vencedor); JoptionPane.ShowMessagedialog (isto, MString); }}}} @Override // public void mouseclicked (mouseevent e) {// TODO Método Auto-Gerado Stub} @Override public void mouseLeardeed (Mouseevent e) {// mouse-generated auto-gente @) @override / setomdo mouseldented (mouseldo mouseldo) @Override public void mouseEntered (mouseevent e) {// TODO Método Auto-Generado Stub} @Override public void mouseexited (mouseevent e) {// todo auto-generated stub} boolean iswin (int point_x, Int Point_y, Chessman [] [] [] cm} cm) (Int Point_x, Int = i 1; para (int j = 0; j <linhas+1; j ++) {// Pesquisa de longa data se (chessstatus [i] [j]! = null && chessstatus [i] [j] .getplaced () == true) {int matchColor = chessstatus [i] [j] .getColor (); // procure (int n = 1; n <= 4; n ++) {if ((i+n> = 0) && (i+n) <= linhas) {if (chessstatus [i+n] [j]! {chessstatus [i] [j] .matchcount ++; System.out.println ("pos:"+i+"" "+j+" contagem à direita ++: "+(i+n)+" "+j+" contagem: "+chessstatus [i] [j] .matchcount); if (chessstatus [i] [j] .matchCount == 5) {return true; }} else {break; }}} // Procure (int n = 1; n <= 4; n ++) {if ((in> = 0) && (in) <= linhas) {if (chessstatus [in] [j]! chessstatus [i] [j] .matchCount ++; System.out.println ("pos:"+i+"" "+j+" "+" contagem esquerda ++: "+(in)+" "+j+" contagem: "+chessstatus [i] [j] .matchcount); if (chessstatus [i] [j] .matchCount == 5) {return true; }} else {if (chessstatus [in] [j]! = null) {chessstatus [i] [j] .matchCount = 1; } quebrar; }}}} chessstatus [i] [j] .matchCount = 1; // contagem de atualização}}} para (int i = 0; i <linhas+1; i ++) {for (int j = 0; if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getPlaced () == true) {int matchColor = chessstatus [i] [j] .getColor (); // Olhe para baixo, o canto superior esquerdo é a origem da coordenada, a direção positiva do eixo y está baixa para (int n = 1; n <= 4; n ++) {if ((j+n> = 0) && (j+n) <= linhas) { 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)+" contagem: "+chessstatus [i] [j] .matchcount); if (chessstatus [i] [j] .matchCount == 5) {return true; }} else {break; }}} // Procure (int n = 1; n <= 4; n ++) {if ((jn> = 0) && (jn) <= linhas) { 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+" "+" contagem esquerda ++: "+(i)+" ""+(jn)+"contagem:"+chessstatus [i] [j] .matchcount); if (chessstatus [i] [j] .matchCount == 5) {return true; }} else {if (chessstatus [i] [jn]! = null) {chessstatus [i] [j] .matchCount = 1; } quebrar; }}} chessstatus [i] [j] .matchCount = 1; // contagem de atualização}}} // direção: parte superior esquerda e inferior direita para (int i = 0; i <linhas+1; i ++) {para (int j = 0; if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getPlaced () == true) {int matchColor = chessstatus [i] [j] .getColor (); // Olhe para baixo, o canto superior esquerdo é a origem coordenada, e a direção positiva do eixo y está baixa para (int n = 1; n <= 4; n ++) {if ((jn> = 0) && (jn) <= linhas && (in)> = 0 && (in) <= linhas) { 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)+" contagem: "+chessstatus [i] [j] .matchcount); if (chessstatus [i] [j] .matchCount == 5) {return true; }} else {break; }}} // inferior direito para (int n = 1; n <= 4; n ++) {if ((j+n> = 0) && (j+n) <= linhas && (i+n)> = 0 && (i+n) <= linhas) { if (chessstatus [i+n] [j+n]! = null && chessstatus [i+n] [j+n] .getplaced () == true && chessstatus [i+n] [j+n] .getColor () == MatchColor) {chessstatus [i] [j] .m. System.out.println ("pos:"+i+"" "+j+" "+" contagem esquerda ++: "+(i+n)+" ""+(j+n)+"contagem:"+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; } quebrar; }}} chessstatus [i] [j] .matchCount = 1; // contagem de atualização}}} // Direção: inferior esquerda superior esquerda superior direita para (int i = 0; i <linhas+1; i ++) {para (int j = 0; j <linhas+1; j ++) {// esquerda inferior if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getPlaced () == true) {int matchColor = chessstatus [i] [j] .getColor (); // Olhe para baixo, o canto superior esquerdo é a origem coordenada, e a direção positiva do eixo y está baixa para (int n = 1; n <= 4; n ++) {if ((j+n> = 0) && (j+n) <= linhas && (in)> = 0 && (in) <= fileiras) { 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)+" contagem: "+chessstatus [i] [j] .matchcount ++); if (chessstatus [i] [j] .matchCount == 5) {return true; }} else {break; }}} // superior direito para (int n = 1; n <= 4; n ++) {if ((jn> = 0) && (jn) <= linhas && (i+n)> = 0 && (i+n) <= linhas) { 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+" "+" contagem esquerda ++: "+(i+n)+" ""+(jn)+"contagem:"+chessstatus [i] [j] .matchcount); if (chessstatus [i] [j] .matchCount == 5) {return true; }} else {if (chessstatus [i+n] [jn]! = null) {chessstatus [i] [j] .matchCount = 1; } quebrar; }}} chessstatus [i] [j] .matchCount = 1; // contagem de atualização}}} retorna false; }}Para jogos mais emocionantes, consulte o tópico especial "Java Classic Games"
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.