Os dois artigos anteriores: Java implementa dois jogos Gozi (dois) para desenhar um quadro de xadrez; Java implementa dois jogos Gozi (dois) para desenhar uma peça de xadrez; Java implementa dois jogos Gozi (quatro) para realizar a mudança de dois jogos Gozi (dois) para vê -lo.
Já desenhamos quadros de xadrez e peças de xadrez antes e podemos fazer movimentos livremente. A próxima função a ser realizada é determinar se existem cinco contas consecutivas (o jogo de xadrez não é considerado por enquanto).
Usamos a posição de travessia, onde a placa já chegou e verificou se existem cinco peças de xadrez consecutivas em qualquer direção de suas quatro direções: para cima e para baixo, esquerda e direita, inferior esquerda e inferior direita.
O primeiro passo é transformar a classe de peças de xadrez. Anteriormente, nossa classe de peças de xadrez tinha apenas informações de cores e status de queda. Agora, precisamos adicionar dados do tipo int para registrar quantas contas são atualmente conhecidas por serem contínuas durante o processo de travessia.
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; }}O segundo passo é determinar primeiro se existem cinco contas consecutivas de uma direção e usar as direções esquerda e direita como uma tentativa aqui.
Uma função de Iswin foi adicionada para fazer um julgamento vencedor, atravessando peças eficazes em toda a placa.
Drawchessboard.java
pacote xchen.test.simplegobang; importar java.awt.graphics; importar java.awt.graphics2d; importar java.awt.RadialGradientPaint; importar java.awt.image; importar java.awt.toolkit; importar java.awt.event.mouseevent; importar java.awt.event.mouselistener; importar java.awt.color; importar javax.swing.jpanel; classe pública drawchessboard estende implementações jpanel mouselistener {final static 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) {//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; }}} Chessman Chessman = New Chessman (preto, verdadeiro); chessstatus [status_x] [status_y] = chessman; repintar (); if (iswin (status_x, status_y, chessstatus)) {system.out.println ("win !!!!"); }}} @Override // public void mouseclicked (mouseevent e) {// TODO Método Auto-Generado Stub} @Override public void mouseLeardeed (mouseevent e) {// todo-generado auto-generado} @Override Void Void MouseEntered (mouseTerdo) Void MouseEntered (mouseevent e) {// TODO Método Geralgrado Stub} @Override public void Mouseexited (mouseevent e) {// TODO Auto-Gerated Method Stub} Boolean Iswin (int Point_x, Int Point_y, Chessman [] [] Cm) { procure (int i = 0; i <linhas+1; i ++) {for (int j = 0; j <linhas+1; j ++) {if (chessstatus [i] [j]! // Procure (int n = 1; n <= 4; n ++) {if ((i+n> = 0) && (i+n) <= linhas) {if (chessstatus [i+n] [j]! 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]! 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}} retorna false; }}}}Etapa 3 : O módulo principal permanece inalterado. Execute e teste se nosso algoritmo está correto.
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); }}Etapa 4 : Agora que fizemos um julgamento em uma direção, concluiremos o código de julgamento nas outras três direções.
Complementando a função iswin () em 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.jpanel; classe pública drawchessboard estende implementações jpanel mouselistener {final static 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) {//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; }}} Chessman Chessman = New Chessman (preto, verdadeiro); chessstatus [status_x] [status_y] = chessman; repintar (); if (iswin (status_x, status_y, chessstatus)) {system.out.println ("win !!!!"); }}} @Override // public void mouseclicked (mouseevent e) {// TODO Método Auto-Generado Stub} @Override public void mouseLeardeed (mouseevent e) {// todo-generado auto-generado} @Override Void Void MouseEntered (mouseTerdo) Void mouseEntered (mouseevent e) {// TODO Método generalizado Stubb} @Override public void mouseexited (mouseevent e) {// TODO Método Auto-Gerado Stows} (Int Point_x, Int Point_y, Chessman [] [] CM) {para (Int Int_x, Int Point_y, Chessman [] [] CM) {para (Int i (int Point_y, i 1; j = 0; j <linhas+1; j ++) {// Pesquisa horizontal viva if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getplaced () == true) {// procure para (int n = 1; n <= 4; n ++) = ((i+) {// n) if (chessstatus [i+n] [j]! = null && chessstatus [i+n] [j] .getPlaced () == true) {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 para o esquerdo n = 1; n <= 4; n ++) {if ((em> = 0) && (in) <= linhas) {if (chessstatus [in] [j]! 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) {// Pesquise para baixo, o canto superior esquerdo é a origem coordenada e a direção positiva do y (j+n) para (int n = 1; n <= 4; n ++) {se if (chessstatus [i] [j+n]! = null && chessstatus [i] [j+n] .getPlaced () == true) {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]! 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) {// Olhe para baixo, o canto superior esquerdo é a origem coordenada, e a direção positiva do eixo y é para baixo para (int n = 1; n <= 4; n ++) { if ((jn> = 0) && (jn) <= linhas && (in)> = 0 && (in) <= linhas) {if (chessstatus [in] [jn]! 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; }}} // Abaixe o 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] [j] .matchcount ++; 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: parte superior esquerda inferior esquerda para (int i = 0; i <linhas+1; i ++) {para (int j = 0; if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getPlaced () == true) {// Olhe para baixo, o canto superior esquerdo é a origem coordenada, 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) <= linhas) {if (chessstatus [in] [j+n]! 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 (chesstatus [i+n [jn]! 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; }}Execute novamente
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.