Zwei frühere Artikel: Java implementiert zwei Gozi -Schachspiele (zwei) zeichnen ein Schachbrett. Java implementiert zwei Gozi -Schachspiele (zwei) zeichnen ein Schachstück
Vorne haben wir Schachbretter und Schachstücke gezogen. Als nächstes müssen wir mit der Maus auf den Bildschirm klicken, um die Position zu erhalten und den Umzug zu machen (wenn man das Schachspiel und das Urteil Sieg oder zuerst besiegen).
Schritt:
1) Erfassen Sie die Position, an der die Maus gedrückt wird
2) nach Koordinatentransformation (aus Pixelposition -> 0-19 Schachbrettposition)
3) Aktualisieren Sie das zweidimensionale Array, das den Status der Karte aufzeichnet
4) Neuen Sie das Zeichenbrett erneut.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Ein chessman.java
Paket xchen.test.simlegobang; öffentliche Klasse Chessman {private int color; // 1-White, 0-schwarz private boolean platziert = false; public chessman (int color, boolean platziert) {this.color = color; this.placed = platziert; } public boolean getPlace () {return platziert; } public void setPlate (boolean platziert) {this.placed = platziert; } public int getColor () {return color; } public void setColor (int color) {this.color = color; }} Drawchessboard.java
Paket xchen.test.simlegobang; importieren java.awt.graphics; Import Java.awt.Graphics2d; import Java.awt.RadialgradientPaint; import Java.awt.image; import Java.awt.toolkit; import Java.awt.event.mouseeEvent; import Java.awt.event.mouselistener; Import Java.awt.Color; import Javax.swing.jpanel; öffentliche Klasse Drawchessboard erweitert JPanel -Implementierungen Mouselistener {endgültige statische int schwarz = 0; endgültige statische int weiß = 1; public int chesscolor = schwarz; int chessman_width = 30; öffentliches Image Boardimg; endgültige private intreihen = 19; Chessman [] [] schachstatus = neuer Schachmann [Zeilen+1] [Zeilen+1]; public drawchessboard () {boardimg = toolkit.getDefaulttoolkit (). getImage ("res/Drawable/chessboard2.png"); if (boardimg == null) system.err.println ("PNG nicht existieren"); addmouselistener (dies); } @Override Protected void PaintComponent (Grafik g) {// Todo automatisch generierter Methode Stub System.out.println ("Draw !!"); 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/Zeilen; int span_y = imgHeight/Zeilen; G.Drawimage (Boardimg, X, Y, Null); // Horizontale Zeile für (int i = 0; i <Zeilen; i ++) {g.drawline (x, y+i*span_y, fwidth-x, y+i*span_y); } // vertikale Zeile zeichnen (int i = 0; i <Zeilen; i ++) {g.drawline (x+i*span_x, y, x+i*span_x, fheight-y); } // Schachstücke zeichnen für (int i = 0; i <Zeilen+1; i ++) {für (int j = 0; j <Zeilen+1; j ++) {if (schessstatus [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 [] fraktions = 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 -Farbe; if (chessstatus [i] [j] .getColor () == 1) {System.out.println ("weißes Schach zeichnen"); Paint = new radialgradientPaint (POS_X-CHESSMAN_WIDTH/2F, POS_Y-CHESSMAN_WIDTH/2F, radius_w*2, Fraktionen, Colors_W); } else {System.out.println ("Schwarzes Schach zeichnen"); Paint = new radialgradientPaint (POS_X-CHESSMAN_WIDTH/2F, POS_Y-CHESSMAN_WIDTH/2F, radius_b*2, Fraktionen, Colors_B); } ((Graphics2d) g) .setPaint (Farbe); ((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 (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/Zeilen; int span_y = imgHeight/Zeilen; 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"); für (int i = 0; i <Zeilen+1; i ++) {if (point_x> = x-shessman_width/2+1+i*span_x) {if (point_x <= x+chessman_width/2-1+i*span_x) // if es ist width/2, zwei Matching-Werte werden am mittleren Punkt angezeigt. "+point_x+" "+(x-shessman_width/2+i*span_x)+" "+(x+chessman_width/2+i*span_x)); status_x = i; }} für (int i = 0; i <Zeilen+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.outln ("point y"+"+"+"+"+"+" "+(y-chessman_width/2+1+i*span_y)+" "+(y+chessman_width/2-1+i*span_y)); status_y = i; }}} Chessman chessman = new chessman (schwarz, wahr); chessstatus [status_x] [status_y] = chessman; Repaint (); } System.out.println (status_x+""+status_y+""+chessStatus [status_x] [status_y] .getColor ()+""+chessstatus [status_x] [status_y] .getPlaced ()); } @Override // public void mouseclicked (MouEeEvent e) {// Todo automatisch generierter Methode Stub} @Override public void mouSereleased (MouseEvent e) {// Todo auto-generierter Methode Stub} @Override public void mousevented (mousevent e) {/ // todo-modi- @modentrouviDerated (MOUSEVEvent e) {/. todo-auto-gentroy- @modentros | void mouseexited (MouseeEvent e) {// Todo automatisch generierter Methode Stub}}Der Hauptmodulcode bleibt unverändert
Paket xchen.test.simlegobang; import Java.awt.Container; importieren javax.swing.jframe; import xchen.test.simlegobang.drawchessboard; öffentliche Klasse Main erweitert JFrame {private Drawchessboard Drawchessboard; public main () {drawchStboard = new Drawchessboard (); // Rahmen Titel settitle ("Stand-Alone Goji"); Container ContainerPane = getContentPane (); Containerpane.add (Drawchessboard); } public static void main (String [] args) {main m = new Main (); M.Setsize (800, 800); m.setvisible (true); }}Führen Sie es aus
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.