Две предыдущие статьи: Java реализует две шахматные игры Gozi (две) рисует шахматную доску; Java реализует две шахматные игры Gozi (два) рисует шахматный кусок
Впереди мы нарисовали шахматные доски и шахматы. Далее нам нужно нажать на экран с мышью, чтобы получить позицию и сделать ход (не рассматривая игру в шахмат и в первую очередь победы или победить).
шаг:
1) Захватить положение, в которой нажата мышь
2) После преобразования координат (из положения пикселя -> 0-19 положения шахматной доски)
3) Обновить двухмерный массив, который записывает статус платы
4) Повторно заполнить чертежную доску.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
Шахматный человек. Ява
пакет xchen.test.simplegobang; Public Class Chessman {private int color; // 1-white, 0-черный частный логический Prop = false; 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
пакет xchen.test.simplegobang; импортировать java.awt.graphics; импортировать java.awt.graphics2d; импортировать java.awt.radialgradientpaint; импортировать java.awt.image; импортировать java.awt.toolkit; Импорт java.awt.event.mouseeVent; импортировать java.awt.event.mouselistener; импортировать java.awt.color; импортировать 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 Автогенерированный метод STUB System.out.println ("Draw !!"); Super.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.println ("j] j)"+i; 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-kessman_width/2f, radius_w*2, fracts, colors_w); } else {System.out.println ("Нарисуйте черные шахматы"); 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"); 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) // Если это ширина/2, два соответствующих значения появятся в средней точке {System.out.print.print. "+point_x+" "+(x-chessman_width/2+i*span_x)+" "+(x+chessman_width/2+i*span_x)); status_x = i; }} для (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; }}} Шахматный шахмат = новый шахматный (черный, правда); chessstatus [status_x] [status_y] = шахмат; Repaint (); } System.out.println (status_x+""+status_y+""+chessstatus [status_x] [status_y] .getColor ()+""+chessstatus [status_x] [status_y] .getpled ()); } @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 Автопогенерированный метод stub}}Основной код модуля остается неизменным
пакет 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); }}Запустить это
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.