Две предыдущие статьи: Java реализует две игры Gozi (две), чтобы нарисовать шахматную доску; Java реализует две игры Gozi (две), чтобы нарисовать шахматный кусок; Java реализует две игры Gozi (четыре), чтобы реализовать движение двух игр Gozi (два), чтобы просмотреть ее.
Мы раньше нарисовали шахматные доски и шахматы и можем свободно делать ходы и судить, есть ли пять последовательных бусин в шахматной доске. Следующая задача состоит в том, чтобы обмениваться шахматной стороной после каждого шага (то есть цвет следующего произведения-белый-> черный или черный белый) и добавить условия оцветного суждения к победному суждению (на шахматной доске есть пять последовательных бусинок).
Основной модуль Main.java и шахматный шахматный шахмат. Java остаются неизменными. Нам необходимо внести коррективы к функции мыши, а функция суждения из пяти человек-в Drawchessboard.java.
Main.java
пакет xchen.test.simplegobang; импортировать java.awt.container; импортировать javax.swing.jframe; Импорт xchen.test.simplegobang.drawchessboard; Общедоступный класс Extends jframe {Private Drawchessboard Drawchessboard; public main () {drawchessboard = new Drawchessboard (); // кадр заголовок Settitle ("автономный goji"); Контейнер -контейнер = getContentPane (); Containerpane.add (Drawchessboard); } public static void main (string [] args) {main m = new main (); M.SetSize (800, 800); M.SetVisible (True); }} Шахматный человек. Java
пакет xchen.test.simplegobang; Public Class Chessman {private int color; // 1-white, 0-черный частный логический Prop = false; int MatchCount = 1; public Chessman (int color, логический переметчик) {this.color = color; это. } public boolean atepled () {return Put; } public void setpled (boolean pret) {this.placed = put; } public int getColor () {return Color; } public void setColor (int color) {this.color = color; }}Первый шаг состоит в том, чтобы изменить функцию мыши, чтобы после каждого хода была передана шахматная игра противнику (то есть цвет шахматной части будет изменен каждый раз, когда вы двигаетесь)
Функциональная часть мыши в drawchessboard.java, если значение Chesscolor модифицируется каждый раз.
@Override // public void mousepressed (mouseevent e) {int point_x = e.getx (); int point_y = e.gety (); int imgwidth = boardimg.getheight (это); int imgheight = boardimg.getWidth (это); int fwidth = getWidth (); int fheight = getheight (); int x = (Fwidth-imgwidth)/2; int y = (fheight-imgheight)/2; int span_x = imgwidth/ряд; 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 "); для (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) // Если это ширина/2, два соответствия значения будут отображаться в средней точке {//system.out.print. "+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+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+". "+(y-chessman_width/2+1+i*span_y)+" "+(y+chessman_width/2-1+i*span_y)); status_y = i; }}} Шахматный шахмат = новый шахмат (chesscolor, true); chessstatus [status_x] [status_y] = шахмат; System.out.println ("Шахматный цвет:"+chesscolor); if (chesscolor == black) {chesscolor = белый; } else {chesscolor = black; } Repaint (); if (iswin (status_x, status_y, chessstatus)) {System.out.println ("Win !!!"); }}}Запустить это
Второй шаг состоит в том, чтобы добавить условия оценочных суждений к победившему суждению (на шахматной доске есть пять последовательных бусинок -> на шахматной доске есть пять последовательных бусинок одного цвета)
Добавьте цветное суждение Chessman.getColor к суждению функции ISWIN
Код функции ISWIN
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 ++) {// Landwise search if (i] [i] [j]! = null && chessstatus [i] [i] [i] [j]! = null && chessstatus [i]. matchcolor = chessstatus [i] [j] .getColor (); // Ищите (int n = 1; n <= 4; n ++) {if ((i+n> = 0) && (i+n) <= rows) {if (chessstatus [i+n] [j]! = Null && chessstatus [i+n] [j] .getpled () == true && chessstatus [i+n]. {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; }}} // Ищите (int n = 1; n <= 4; n ++) {if (in> = 0) && (in) <= rows) {if (chessstatus [in] [j]! = Null && chessstatus [in]. 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; } перерыв; }}}} chessstatus [i] [j] .matchcount = 1; // Обновление count}}} for (int i = 0; i <rows+1; i ++) {for (int j = 0; j <rows+1; j ++) {// lonitudinal if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getpled () == true) {int matchcolor = chessstatus [i] [j] .getColor (); // Посмотрите вниз, верхний левый угол является координатным происхождением, а положительное направление оси Y находится вниз для (int n = 1; n <= 4; n ++) {if ((j+n> = 0) && (j+n) <= row) {if (j+n> = 0) && (j+n) <= row) {if (j+n> = 0) & if (chessstatus [i] [j+n]! = null && chessstatus [i] [j+n] .getpled () == 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; }}} // Посмотреть для (int n = 1; n <= 4; n ++) {if ((jn> = 0) && (jn) <= row) { if (chessstatus [i] [jn]! = null && chessstatus [i] [jn] .getpled () == 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; } перерыв; }}}} chessstatus [i] [j] .matchcount = 1; // Обновление count}}} // Направление: верхнее левое и нижнее справа для (int i = 0; i <Rows+1; i ++) {for (int j = 0; j <rows+1; J ++) {// верхний левый) {for (int j = 0; if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getpled () == true) {int matchcolor = chessstatus [i] [j] .getColor (); // Посмотрите вниз, верхний левый угол-это координатное происхождение, положительное направление оси y внизу (int n = 1; n <= 4; n ++) {if ((jn> = 0) && (jn) <= Row && (in)> = 0 && (in) <= row) { if (chessstatus [in] [jn]! = null && chessstatus [in] [jn] .getpled () == 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; }}} // нижнее право на (int n = 1; n <= 4; n ++) {if ((j+n> = 0) && (j+n) <= row && (i+n)> = 0 && (i+n) <= row) { if (chessstatus [i+n] [j+n]! = null && chessstatus [i+n] [j+n] .getpled () == 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; } перерыв; }}}} chessstatus [i] [j] .matchcount = 1; // Обновление count}}} // Направление: нижний левый верхний верхний верхний верх (int i = 0; i <Rows+1; i ++) {for (int j = 0; j <rows+1; J ++) {// внизу внизу слева). if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getpled () == true) {int matchcolor = chessstatus [i] [j] .getColor (); // Посмотрите вниз, верхний левый угол является координатным происхождением, а положительное направление оси y находится вниз для (int n = 1; n <= 4; n ++) {if ((j+n> = 0) && (j+n) <= row && (in)> = 0 && (in) <= Rows) { if (chessstatus [in] [j+n]! = null && chessstatus [in] [j+n] .getpled () == 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; }}} // Верхнее справа для (int n = 1; n <= 4; n ++) {if ((jn> = 0) && (jn) <= row && (i+n)> = 0 && (i+n) <= row) { if (chessstatus [i+n] [jn]! = null && chessstatus [i+n] [jn] .getpled () == 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; } перерыв; }}}} chessstatus [i] [j] .matchcount = 1; // Обновление count}}} вернуть false; }Запусти!
Полный Drawchessboard.java
пакет xchen.test.simplegobang; импортировать java.awt.color; импортировать java.awt.graphics; импортировать java.awt.graphics2d; импортировать java.awt.image; импортировать java.awt.radialgradientpaint; импортировать java.awt.toolkit; Импорт java.awt.event.mouseeVent; импортировать java.awt.event.mouselistener; импортировать javax.swing.jpanel; открытый класс Drawchessboard расширяет реализации JPanel MouseListener {final Static int Black = 0; окончательный статический int white = 1; public int chesscolor = черный; int Chessman_width = 30; Public Image Boardimg; окончательные частные ряды = 19; Шахматный [] [] chessstatus = новый шахмат [Rows+1] [Rows+1]; public drawchessboard () {boardimg = toolkit.getdefaulttoolkit (). getimage ("res/drawable/chessboard2.png"); if (boardimg == null) system.err.println ("png не существует"); AddMouseListener (это); } @Override Protected void PaintComponent (Graphics G) {// TODO Автогенерированный метод Suple.paintcomponent (g); int imgwidth = boardimg.getheight (это); int imgheight = boardimg.getWidth (это); int fwidth = getWidth (); int fheight = getheight (); int x = (Fwidth-imgwidth)/2; int y = (fheight-imgheight)/2; int span_x = imgwidth/ряд; int span_y = imgheight/rows; g.drawimage (Boardimg, x, y, null); // Нарисуйте горизонтальную линию для (int i = 0; i <rows; i ++) {g.drawline (x, y+i*span_y, fwidth-x, y+i*span_y); } // Нарисуйте вертикальную линию для (int i = 0; i <rows; i ++) {g.drawline (x+i*span_x, y, x+i*span_x, fheight-y); } // Нарисуйте шахматы для (int i = 0; i <Rows+1; i ++) {for (int j = 0; j <Rows+1; j ++) {if (chessstatus [i] [j]! = Null && chessstatus [i] [j] .getpled () == true) {//system.out.out.println. "+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 белые шахматы "); Paint = new RadialGradientPaint (pos_x-chessman_width/2f, pos_y-kessman_width/2f, radius_w*2, fracts, colors_w); } else {//system.out.println(" draw черные шахматы "); Paint = new RadialGradientPaint (pos_x-chessman_width/2f, pos_y-kessman_width/2f, radius_b*2, fracts, colors_b); } ((Graphics2d) g) .setPaint (Paint); ((Graphics2d) g) .filloval (pos_x-chessman_width/2, pos_y-kessman_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 (это); int imgheight = boardimg.getWidth (это); int fwidth = getWidth (); int fheight = getheight (); int x = (Fwidth-imgwidth)/2; int y = (fheight-imgheight)/2; int span_x = imgwidth/ряд; 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 "); для (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) // Если это ширина/2, два соответствия значения будут отображаться в средней точке {//system.out.print. "+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+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+". "+(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] .getpled () == false) {chessman chessman = new Chessman (chesscolor, true); chessstatus [status_x] [status_y] = шахмат; System.out.println ("Шахматный цвет:"+chesscolor); if (chesscolor == black) {chesscolor = белый; } else {chesscolor = black; } Repaint (); if (iswin (status_x, status_y, chessstatus)) {System.out.println ("Win !!!"); }}}} @Override // public void mouseclicked (mouseevent e) {// todo автоматически сгенерированный метод} @override public void mouserealedued (mouseevent e) {// todo-сгенерированный метод. @Override public void mouseexited (mouseevent e) {// todo автоматическое сгенерированное метод 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+) if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getpled () == true) {int matchcolor = chessstatus [i] [j] .getColor (); // Ищите (int n = 1; n <= 4; n ++) {if ((i+n> = 0) && (i+n) <= rows) {if (chessstatus [i+n] [j]! = Null && chessstatus [i+n] [j] .getpled () == true && chessstatus [i+n]. {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; }}} // Ищите (int n = 1; n <= 4; n ++) {if (in> = 0) && (in) <= rows) {if (chessstatus [in] [j]! = Null && chessstatus [in]. 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; } перерыв; }}}} chessstatus [i] [j] .matchcount = 1; // Обновление count}}} for (int i = 0; i <rows+1; i ++) {for (int j = 0; j <rows+1; j ++) {// lonitudinal if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getpled () == true) {int matchcolor = chessstatus [i] [j] .getColor (); // Посмотрите вниз, верхний левый угол является координатным происхождением, а положительное направление оси Y находится вниз для (int n = 1; n <= 4; n ++) {if ((j+n> = 0) && (j+n) <= row) {if (j+n> = 0) && (j+n) <= row) {if (j+n> = 0) & if (chessstatus [i] [j+n]! = null && chessstatus [i] [j+n] .getpled () == 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; }}} // Посмотреть для (int n = 1; n <= 4; n ++) {if ((jn> = 0) && (jn) <= row) { if (chessstatus [i] [jn]! = null && chessstatus [i] [jn] .getpled () == 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; } перерыв; }}}} chessstatus [i] [j] .matchcount = 1; // Обновление count}}} // Направление: верхнее левое и нижнее справа для (int i = 0; i <Rows+1; i ++) {for (int j = 0; j <rows+1; J ++) {// верхний левый) {for (int j = 0; if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getpled () == true) {int matchcolor = chessstatus [i] [j] .getColor (); // Посмотрите вниз, верхний левый угол-это координатное происхождение, положительное направление оси y внизу (int n = 1; n <= 4; n ++) {if ((jn> = 0) && (jn) <= Row && (in)> = 0 && (in) <= row) { if (chessstatus [in] [jn]! = null && chessstatus [in] [jn] .getpled () == 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; }}} // нижнее право на (int n = 1; n <= 4; n ++) {if ((j+n> = 0) && (j+n) <= row && (i+n)> = 0 && (i+n) <= row) { if (chessstatus [i+n] [j+n]! = null && chessstatus [i+n] [j+n] .getpled () == 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; } перерыв; }}}} chessstatus [i] [j] .matchcount = 1; // Обновление count}}} // Направление: нижний левый верхний верхний верхний верх (int i = 0; i <Rows+1; i ++) {for (int j = 0; j <rows+1; J ++) {// внизу внизу слева). if (chessstatus [i] [j]! = null && chessstatus [i] [j] .getpled () == true) {int matchcolor = chessstatus [i] [j] .getColor (); // Посмотрите вниз, верхний левый угол является координатным происхождением, а положительное направление оси y находится вниз для (int n = 1; n <= 4; n ++) {if ((j+n> = 0) && (j+n) <= row && (in)> = 0 && (in) <= Rows) { if (chessstatus [in] [j+n]! = null && chessstatus [in] [j+n] .getpled () == 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; }}} // Верхнее справа для (int n = 1; n <= 4; n ++) {if ((jn> = 0) && (jn) <= row && (i+n)> = 0 && (i+n) <= row) { if (chessstatus [i+n] [jn]! = null && chessstatus [i+n] [jn] .getpled () == 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; } перерыв; }}} chessstatus [i] [j] .matchcount = 1; // Обновление count}}} вернуть false; }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.