Dua artikel sebelumnya: Java mengimplementasikan dua game Gozi (dua) untuk menggambar papan catur; Java mengimplementasikan dua game Gozi (dua) untuk menggambar sepotong catur; Java mengimplementasikan dua game Gozi (empat) untuk mewujudkan langkah dua game Gozi (dua) untuk melihatnya.
Kami telah menggambar papan catur dan potongan catur sebelumnya, dan dapat dengan bebas bergerak dan menilai apakah ada lima manik -manik berturut -turut di papan catur. Pekerjaan berikutnya adalah menukar sisi catur setelah setiap langkah (yaitu, warna bagian berikutnya adalah putih-> hitam atau hitam-> putih), dan menambahkan kondisi penilaian warna ke penilaian pemenang (ada lima manik-manik berturut-turut di papan catur-> lima manik-manik berturut-turut dengan warna yang sama di papan catur).
Modul utama Main.java dan catur kelas catur.java tetap tidak berubah. Kita perlu melakukan penyesuaian pada fungsi mousepressed dan fungsi penilaian lima manik iswin di drawchessboard.java.
Main.java
paket xchen.test.simplegobang; impor java.awt.container; impor javax.swing.jframe; impor xchen.test.simplegobang.drawchessboard; Kelas Publik Main Memperluas JFrame {Private Drawchessboard Drawchessboard; Public Main () {DrawChessboard = New DrawChessboard (); // bingkai judul settitle ("stand-alone goji"); Container containerpane = getContentPane (); containerpane.add (drawchessboard); } public static void main (string [] args) {main m = baru main (); m.setsize (800, 800); M.SetVisible (true); }} Chessman.java
paket xchen.test.simplegobang; kelas publik catur {private int color; // 1-white, 0-black private boolean ditempatkan = false; int matchcount = 1; catur publik (warna int, boolean ditempatkan) {this.color = warna; this.placed = ditempatkan; } public boolean getplaced () {return ditempatkan; } public void setplaced (boolean ditempatkan) {this.placed = ditempatkan; } public int getColor () {return color; } public void setColor (int color) {this.color = color; }}Langkah pertama adalah memodifikasi fungsi mousepresi sehingga setelah setiap gerakan, permainan catur akan diberikan kepada lawan (yaitu, warna bagian catur akan diubah setiap kali Anda bergerak)
Bagian fungsi mousepressed di drawchessboard.java, selama nilai chesscolor dimodifikasi setiap saat.
@Override // public void mousepressed (mouseEvent e) {int point_x = e.getx (); int point_y = e.gety (); int imgwidth = boardimg.getheight (ini); int imgheight = boardimg.getwidth (ini); int fwidth = getWidth (); int fheight = getHeight (); int x = (fwidth-imgwidth)/2; int y = (fheight-imgheight)/2; int span_x = imgwidth/baris; int span_y = imgheight/baris; //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 "); untuk (int i = 0; i <Baris+1; i ++) {if (point_x> = x-chessman_width/2+1+i*span_x) {if (point_x <= x+chiSman_width/2-1+i*span_x) // Jika lebar/2, dua nilai pencocokan akan muncul pada titik tengah {span_x) // jika lebar/2, dua nilai pencocokan akan muncul pada titik tengah {iN "{poin Midde/point {2-2. "+point_x+" "+(x-chessman_width/2+i*span_x)+" ""+(x+chessman_width/2+i*span_x)); status_x = i; }}} for (int i = 0; i <Buruk+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. "+(y-chessman_width/2+1+i*span_y)+" "+(y+chessman_width/2-1+i*span_y)); status_y = i; }}} Chessman Chessman = catur baru (ChessColor, true); Chessstatus [status_x] [status_y] = catur; System.out.println ("Warna Catur:"+ChessColor); if (chesscolor == hitam) {cyscolor = white; } else {chesscolor = hitam; } repaint (); if (iswin (status_x, status_y, chessstatus)) {System.out.println ("Win !!!"); }}}Jalankan
Langkah kedua adalah menambahkan kondisi penilaian warna ke penilaian yang menang (ada lima manik -manik berturut -turut di papan catur -> Ada lima manik -manik berturut -turut dengan warna yang sama di papan catur)
Tambahkan Penilaian Warna Chessman.getColor ke penilaian fungsi Iswin
Kode fungsi Iswin
boolean iswin (int point_x, int point_y, chessman [] [] cm) {for (int i = 0; i <baris+1; i ++) {for (int j = 0; j <rows+1; j ++) {// landwise search if (chessstatus [i] [j]! MatchColor = Chessstatus [i] [j] .getColor (); // Cari (int n = 1; n <= 4; n ++) {if ((i+n> = 0) && (i+n) <= baris) {if (chessstatus [i+n] [j]! = Null && chiSSstatus [i+n] [j] .getPlaced () == true & & chessstatus [i+n] [j] .getplaced () == true & & chessStatus [i+n] [j] .getplaced () == true & & chessStatus [i+n] [j] .getPlaced () == true & & chessStatus [i+n] [j] .getplaced () == true & & chessStatus [i+n] [j] .getPlaced () == true & & chessStatus [i+n] [j] .getPlaced () == true & & chessStatus [i+n] [j] .getPlaced () == true & & chessStatus [i+n]. {Chessstatus [i] [j] .matchcount ++; System.out.println ("Pos:"+i+""+j+"Hitung Kanan ++:"+(i+n)+""+j+"Count:"+Chessstatus [i] [j] .matchcount); if (chessstatus [i] [j] .matchcount == 5) {return true; }} else {break; }}} // Cari (int n = 1; n <= 4; n ++) {if (in> = 0) && (dalam) <= baris) {if (chiSSstatus [in] [j]! = Null && chessstatus [dalam] [j] .getplaced () == true && chessstatus [in] [j] .getplaced () == true && chessstatus [in] [j] .getPlaced () == true && chessstatus [in] [j] .getPlaced () == true && chessStatus [in] [j] .getPlaced () == true && chessstatus [in] [j] .getPlaced () == true && chessstatus [in] [j]. 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; } merusak; }}}} chessstatus [i] [j] .matchcount = 1; // refresh count}}} untuk (int i = 0; i <baris+1; i ++) {untuk (int j = 0; j <baris+1; j ++) {// longitudinalinal if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getPlaced () == true) {int matchcolor = chessstatus [i] [j] .getColor (); // Lihat ke bawah, sudut kiri atas adalah asal koordinat, dan arah positif sumbu y adalah ke bawah untuk (int n = 1; n <= 4; n ++) {if ((j+n> = 0) && (j+n) <= baris) { 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; }}} // cari (int n = 1; n <= 4; n ++) {if ((jn> = 0) && (jn) <= baris) { if (chessstatus [i] [jn]! = null && chessstatus [i] [jn] .getPlaced () == true && chessstatus [i] [jn] .getColor () == matchcolor) {chessstatus [i] [j] .matcitCount ++; 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; } merusak; }}}} chessstatus [i] [j] .matchcount = 1; // refresh count}}} // arah: kiri atas dan kanan bawah untuk (int i = 0; i <baris+1; i ++) {untuk (int j = 0; j <baris+1; j ++) if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getPlaced () == true) {int matchcolor = chessstatus [i] [j] .getColor (); // Lihat ke bawah, sudut kiri atas adalah asal koordinat, arah positif dari sumbu y adalah untuk (int n = 1; n <= 4; n ++) {if ((jn> = 0) && (jn) <= baris && (dalam)> = 0 && (dalam) <= baris) { if (chessstatus [di] [jn]! = null && chessstatus [in] [jn] .getplaced () == true && chessstatus [in] [jn] .getColor () == matchcolor) {chessstatus [i] [j] .matcitCount ++; 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; }}} // Bawah kanan untuk (int n = 1; n <= 4; n ++) {if ((j+n> = 0) && (j+n) <= baris && (i+n)> = 0 && (i+n) <= baris) { if (chessstatus [i+n] [j+n]! = null && chessstatus [i+n] [j+n] .getPlaced () == true && chessstatus [i+n] [j+n] .getColor () == matchcolor) {chessstatus [i] [j]. System.out.println ("Pos:"+i+""+j+""+"Count Left ++:"+(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; } merusak; }}}} chessstatus [i] [j] .matchcount = 1; // refresh count}}} // arah: bagian kiri atas atas atas untuk (int i = 0; i <baris+1; i ++) {untuk (int j = 0; j <baris+1; j ++) if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getPlaced () == true) {int matchcolor = chessstatus [i] [j] .getColor (); // Lihat ke bawah, sudut kiri atas adalah asal koordinat, dan arah positif dari sumbu y adalah ke bawah untuk (int n = 1; n <= 4; n ++) {if ((j+n> = 0) && (j+n) <= baris && (in)> = 0 && (in) <= bow if (chessstatus [di] [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; }}} // kanan atas untuk (int n = 1; n <= 4; n ++) {if ((jn> = 0) && (jn) <= baris && (i+n)> = 0 && (i+n) <= baris) { if (chessstatus [i+n] [jn]! = null && chessstatus [i+n] [jn] .getplaced () == true && chessstatus [i+n] [jn] .getColor () == matchcolor) {chessstatus [i] [j]. 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; } merusak; }}}} chessstatus [i] [j] .matchcount = 1; // refresh count}}} return false; }Jalankan!
Lengkap DrawChessboard.java
paket xchen.test.simplegobang; impor java.awt.color; impor java.awt.graphics; impor java.awt.graphics2d; impor java.awt.image; impor java.awt.radialgradientpaint; impor java.awt.toolkit; impor java.awt.event.mouseevent; impor java.awt.event.mouselistener; impor javax.swing.jpanel; PBA Publik Drawchessboard Memperluas Implementasi Jpanel MouseListener {final static int black = 0; Final Static Int White = 1; Public Int ChessColor = Hitam; int chessman_width = 30; boardimg citra publik; Baris int privat terakhir = 19; Chessman [] [] ChessStatus = catur baru [baris+1] [baris+1]; Public DrawChessboard () {boardimg = toolkit.getDefaultToolKit (). getImage ("res/drawable/chessboard2.png"); if (boardimg == null) system.err.println ("png tidak ada"); AddMouseListener (ini); } @Override Protected void PaintComponent (Graphics G) {// TODO Metode yang dihasilkan secara otomatis Stub super.paintComponent (g); int imgwidth = boardimg.getheight (ini); int imgheight = boardimg.getwidth (ini); int fwidth = getWidth (); int fheight = getHeight (); int x = (fwidth-imgwidth)/2; int y = (fheight-imgheight)/2; int span_x = imgwidth/baris; int span_y = imgheight/baris; G.DrawImage (boardimg, x, y, null); // Gambarlah garis horizontal untuk (int i = 0; i <baris; i ++) {g.drawline (x, y+i*span_y, fwidth-x, y+i*span_y); } // Gambarlah garis vertikal untuk (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 [] color_b = new java.awt.color [] {color.black, color.white}; Color [] color_w = warna baru [] {color.white, color.black}; Cat RadialGradientPaint; if (chessstatus [i] [j] .getColor () == 1) {//system.out.println(" catur putih "); cat = RadialGradientPaint baru (pos_x-chessman_width/2f, pos_y-chessman_width/2f, radius_w*2, fraksi, warna_w); } else {//system.out.println("draw catur hitam "); cat = RadialGradientPaint baru (pos_x-chessman_width/2f, pos_y-chessman_width/2f, Radius_b*2, fraksi, warna_b); } ((Grafik2d) g) .setPaint (cat); ((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 (ini); int imgheight = boardimg.getwidth (ini); int fwidth = getWidth (); int fheight = getHeight (); int x = (fwidth-imgwidth)/2; int y = (fheight-imgheight)/2; int span_x = imgwidth/baris; int span_y = imgheight/baris; //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 "); untuk (int i = 0; i <Baris+1; i ++) {if (point_x> = x-chessman_width/2+1+i*span_x) {if (point_x <= x+chiSman_width/2-1+i*span_x) // Jika lebar/2, dua nilai pencocokan akan muncul pada titik tengah {span_x) // jika lebar/2, dua nilai pencocokan akan muncul pada titik tengah {iN "{poin Midde/point {2-2. "+point_x+" "+(x-chessman_width/2+i*span_x)+" ""+(x+chessman_width/2+i*span_x)); status_x = i; }}} for (int i = 0; i <Buruk+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. "+(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 || chiSSstatus [status_x] [status_y] .getPlaced () == false) {catur catur = catur baru (ChessColor, true); Chessstatus [status_x] [status_y] = catur; System.out.println ("Warna Catur:"+ChessColor); if (chesscolor == hitam) {cyscolor = white; } else {chesscolor = hitam; } repaint (); if (iswin (status_x, status_y, chessstatus)) {System.out.println ("Win !!!"); } } } } @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 mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited (MouseEvent E) {// TODO Metode yang dihasilkan otomatis Stub} boolean iswin (int point_x, int point_y, chessman [] [] cm) {for (int i = 0; i <baris+1; i ++) {for (int j = 0; j <rows+1; j <bow if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getPlaced () == true) {int matchcolor = chessstatus [i] [j] .getColor (); // Cari (int n = 1; n <= 4; n ++) {if ((i+n> = 0) && (i+n) <= baris) {if (chessstatus [i+n] [j]! = Null && chiSSstatus [i+n] [j] .getPlaced () == true & & chessstatus [i+n] [j] .getplaced () == true & & chessStatus [i+n] [j] .getplaced () == true & & chessStatus [i+n] [j] .getPlaced () == true & & chessStatus [i+n] [j] .getplaced () == true & & chessStatus [i+n] [j] .getPlaced () == true & & chessStatus [i+n] [j] .getPlaced () == true & & chessStatus [i+n] [j] .getPlaced () == true & & chessStatus [i+n]. {Chessstatus [i] [j] .matchcount ++; System.out.println ("Pos:"+i+""+j+"Hitung Kanan ++:"+(i+n)+""+j+"Count:"+Chessstatus [i] [j] .matchcount); if (chessstatus [i] [j] .matchcount == 5) {return true; }} else {break; }}} // Cari (int n = 1; n <= 4; n ++) {if (in> = 0) && (dalam) <= baris) {if (chiSSstatus [in] [j]! = Null && chessstatus [dalam] [j] .getplaced () == true && chessstatus [in] [j] .getplaced () == true && chessstatus [in] [j] .getPlaced () == true && chessstatus [in] [j] .getPlaced () == true && chessStatus [in] [j] .getPlaced () == true && chessstatus [in] [j] .getPlaced () == true && chessstatus [in] [j]. 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; } merusak; }}}} chessstatus [i] [j] .matchcount = 1; // refresh count}}} untuk (int i = 0; i <baris+1; i ++) {untuk (int j = 0; j <baris+1; j ++) {// longitudinalinal if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getPlaced () == true) {int matchcolor = chessstatus [i] [j] .getColor (); // Lihat ke bawah, sudut kiri atas adalah asal koordinat, dan arah positif sumbu y adalah ke bawah untuk (int n = 1; n <= 4; n ++) {if ((j+n> = 0) && (j+n) <= baris) { 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; }}} // cari (int n = 1; n <= 4; n ++) {if ((jn> = 0) && (jn) <= baris) { if (chessstatus [i] [jn]! = null && chessstatus [i] [jn] .getPlaced () == true && chessstatus [i] [jn] .getColor () == matchcolor) {chessstatus [i] [j] .matcitCount ++; 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; } merusak; }}}} chessstatus [i] [j] .matchcount = 1; // refresh count}}} // arah: kiri atas dan kanan bawah untuk (int i = 0; i <baris+1; i ++) {untuk (int j = 0; j <baris+1; j ++) if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getPlaced () == true) {int matchcolor = chessstatus [i] [j] .getColor (); // Lihat ke bawah, sudut kiri atas adalah asal koordinat, arah positif dari sumbu y adalah untuk (int n = 1; n <= 4; n ++) {if ((jn> = 0) && (jn) <= baris && (dalam)> = 0 && (dalam) <= baris) { if (chessstatus [di] [jn]! = null && chessstatus [in] [jn] .getplaced () == true && chessstatus [in] [jn] .getColor () == matchcolor) {chessstatus [i] [j] .matcitCount ++; 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; }}} // Bawah kanan untuk (int n = 1; n <= 4; n ++) {if ((j+n> = 0) && (j+n) <= baris && (i+n)> = 0 && (i+n) <= baris) { if (chessstatus [i+n] [j+n]! = null && chessstatus [i+n] [j+n] .getPlaced () == true && chessstatus [i+n] [j+n] .getColor () == matchcolor) {chessstatus [i] [j]. System.out.println ("Pos:"+i+""+j+""+"Count Left ++:"+(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; } merusak; }}}} chessstatus [i] [j] .matchcount = 1; // refresh count}}} // arah: bagian kiri atas atas atas untuk (int i = 0; i <baris+1; i ++) {untuk (int j = 0; j <baris+1; j ++) if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getPlaced () == true) {int matchcolor = chessstatus [i] [j] .getColor (); // Lihat ke bawah, sudut kiri atas adalah asal koordinat, dan arah positif dari sumbu y adalah ke bawah untuk (int n = 1; n <= 4; n ++) {if ((j+n> = 0) && (j+n) <= baris && (in)> = 0 && (in) <= beink if (chessstatus [di] [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; }}} // kanan atas untuk (int n = 1; n <= 4; n ++) {if ((jn> = 0) && (jn) <= baris && (i+n)> = 0 && (i+n) <= baris) { if (chessstatus [i+n] [jn]! = null && chessstatus [i+n] [jn] .getplaced () == true && chessstatus [i+n] [jn] .getColor () == matchcolor) {chessstatus [i] [j]. 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; } merusak; }}} chessstatus [i] [j] .matchcount = 1; // refresh count}}} return false; }}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.