Dieser Artikel beschreibt den in Java implementierten Gozi -Schachspielcode. Es wird Ihnen als Referenz mit Ihnen geteilt. Der spezifische Code ist wie folgt
1. Praktische Ziele
1. Meister Sie das Javagui -Schnittstellendesign
2. Meister Sie die Überwachung von Mausereignissen (Mouselistener, MousemotionListener)
2. Praktischer Inhalt
Entwerfen Sie ein einfaches Gochi -Programm, das den Gochi -Schachspielprozess realisieren kann. Wie in der Abbildung unten gezeigt
1. Gozi Schachbrett
Paket cn.edu.ouc.fivechess; Import Java.awt.Color; import Java.awt.cursor; Import Java.awt.Dimension; importieren java.awt.graphics; Import Java.awt.Graphics2d; import Java.awt.image; import Java.awt.RadialgradientPaint; importieren java.awt.renderingHINDINTS; import Java.awt.toolkit; import Java.awt.event.mouseeEvent; import Java.awt.event.mouselistener; Import Java.awt.event.MousemotionListener; Import Java.awt.geom.ellipse2d; Javax.swing importieren.*; /*** Goziqi-chess-scharde Klasse*/Public Class Chessboard erweitert JPanel implementiert Mouselistener {public static final int margin = 30; // Margin Public static Final int grid_span = 35; // Grid Spacing Public statische endgültige Int-Reihen = 15; // Schachstatik-Chessboard-Publikum. Punkt [(Zeilen+1)*(cols+1)]; // Initial Jedes Array -Element ist null boolean isblack = true; // Der Standard beginnt mit schwarzem Schach erster boolean gameover = false; // ist das Spiel beendet int. Bildschatten; Color Colortemp; public chessboard () {// retbackground (color.Blue); // Setzen Sie die Hintergrundfarbe auf orange img = Toolkit.getDefaulttoolkit (). getImage ("board.jpg"); Shadows = Toolkit.getDefaulttoolkit (). getImage ("Shadows.jpg"); addmouselistener (dies); addmousemotionListener (new MousemotionListener () {public void mouseDragged (MouseEvent e) {} public void Mousemoved (MouseEvent e) {int x1 = (e.getX ()-Margin+Grid_span/2)/Grid_span; y1 = (e.gety ()-Margin+grid_span/2)/grid_span; setCursor (neuer Cursor (Cursor.Default_Cursor)); } // public void PaintComponent zeichnen (Grafik g) {Super.PaintComponent (g); // Schachbrett int imgwidth = img.getwidth (this); int imgHeight = img.Getheight (this); // Holen Sie sich die Breite und Höhe des Bildes int fwidth = getWidth (); int fheight = getheight (); // Holen Sie sich die Breite und Höhe des Fensters int x = (fwidth-imgwidth)/2; int y = (fheight-imgheight)/2; g.drawimage (img, x, y, null); für (int i = 0; i <= Zeilen; i ++) {// Horizontale Zeile g.drawline zeichnen (Rand, Margin+i*grid_span, margin+cols*grid_span, margin+i*grid_span); } für (int i = 0; i <= cols; i ++) {// vertikale Zeile g.drawline (margin+i*grid_span, margin+i*grid_span); } // Schachstücke zeichnen für (int i = 0; i <chessCount; i ++) {// Grid Intersection x, y Koordinate int xpos = chesslist [i] .getX ()*grid_span+margin; int ypos = chesslist [i] .gety ()*grid_span+margin; G.SetColor (Schachliste [i] .GetColor ()); // Farbe setzen // G.Filloval (xpos-point.Diameter/2, ypos-point.diameter/2, //point.iameter, point.diameter); //g.drawimage(shadows, xpos-point.iameter/2, ypos-point.diameter/2, point.diameter, point.diameter, null); colortemp = chesslist [i] .getColor (); if (colortemp == color.black) {radialgradientPaint Paint = new radialgradientPaint (xpos-point.AiMeter/2+25, ypos-point.AiMeter/2+10, 20, new Float [] {0f, 1f}, New Color [] {Color.white, Color.Black {0F}); ((Graphics2d) g) .SetPaint (Farbe); ((Graphics2d) g) .setRenderingHint (renderingHints.key_antialiasing, renderingHints.value_antialias_on); ((Graphics2d) g) .setRenderingHint (renderingHints.key_alpha_interpolation, renderingHints.value_alpha_interpolation_default); } else if (colortemp == color.white) {radialgradientPaint Paint = new radialgradientPaint (xpos-point.AiMeter/2+25, ypos-point.diameter/2+10, 70, new float [] {0f, 1f}, new color [] {{color.withite, color.black.black}); ((Graphics2d) g) .SetPaint (Farbe); ((Graphics2d) g) .setRenderingHint (renderingHints.key_antialiasing, renderingHints.value_antialias_on); ((Graphics2d) g) .setRenderingHint (renderingHints.key_alpha_interpolation, renderingHints.value_alpha_interpolation_default); } Ellipse2d e = new ellipse2d.float (xpos-point.iameter/2, ypos-point.iameter/2, 34, 35); ((Graphics2d) g) .Fill (e); // Die rote rechteckige Box markiert das letzte Schachstück, wenn (i == chesscount-1) {// Wenn es das letzte Schachstück G.SetColor (color.red) ist; g.drawrect (xpos-point.iameter/2, ypos-point.iameter/2, 34, 35); }}} public void mousePressed (MouseEvent e) {// Die Maus wird aufgerufen, wenn sie auf die Komponente gedrückt wird // Das Spiel kann nicht mehr spielen, wenn (GameOver) zurückkehren kann; String colorname = isblack? "Black": "Weißes Schach"; // Die Koordinatenposition der Maus konvertieren. Klicken Sie in den Grid-Index XIndex = (e.getX ()-Margin+grid_span/2)/grid_span; yIndex = (e.gety ()-margin+grid_span/2)/grid_span; // Wenn Sie außerhalb des Schachbretts fallen, können Sie es nicht einsetzen, wenn (xIndex <0 || xIndex> Zeilen || yIndex <0 || yIndex> cols) zurückgeben; // Wenn es ein Schachstück in der X- und Y -Position gibt, können Sie es nicht einsetzen, wenn (findchess (xindex, yIndex)) zurückkehren; // Wenn Sie es tun können, wenn es fertig ist, können Sie es nicht setzen, wenn es fertig ist. Point (xindex, yIndex, isblack? Color.black: color.white); Chesslist [CHESSCOUNT ++] = CH; Repaint (); // benachrichtigen Sie das System, um neu zu drawieren // Wenn Sie gewinnen, geben Sie eine schnelle Nachricht und können Sie nicht weiter Schach spielen, wenn (iswin ()) {String msg = string.format ("Herzlichen Glückwunsch, %s gewonnen!", Colorname); Joptionpane.showMessagedialog (this, msg); gameover = true; } isblack =! isblack; } // Methode zum Überschreiben von Mouselistener public void mouseclicked (MouseEvent e) {// Aufgerufen, wenn die Maustaste auf die Komponente klickt} public void Mausented (MouseeEvent e) {// gerufen wird, wenn die Maus bezeichnet wird. MouSerLeased (MouseEvent e) {// Aufgerufen, wenn die Maustaste auf der Komponente freigegeben wird } return false; } private boolean iswin () {int continueCount = 1; // Die Anzahl der kontinuierlichen Schachstücke // Horizontal nach Westen aussehen (int x = xIndex-1; x> = 0; x-) {color c = isblack? black: color.white; if (getChess (x, yIndex, c)! = null) {continuEcount ++; } sonst brechen; } // Horizontal nach Osten nach Osten aussehen (int x = xIndex+1; x <= cols; x ++) {color c = isblack? Color.black: color.white; if (getChess (x, yIndex, c)! = null) {continuEcount ++; } sonst brechen; } if (continuEcount> = 5) {return true; } else continueCount = 1; // eine andere Suche vertikal fortsetzen // Suchen Sie nach oben nach (int y = yIndex-1; y> = 0; y-) {color c = isblack? Color.black: color.white; if (getChess (xIndex, y, c)! = null) {continuEcount ++; } sonst brechen; } // nach unten nach unten nach (int y = yIndex+1; y <= Zeilen; y ++) {color c = isblack? Color.black: color.white; if (getChess (xindex, y, c)! = null) continuEcount ++; sonst brechen; } if (continuEcount> = 5) return true; sonst ContinuEcount = 1; // Suchen Sie nach einer anderen Situation fort: schräg // Northeast-Suche nach für (int x = xIndex+1, y = yIndex-1; y> = 0 && x <= cols; x ++, y-) {color c = isblack? if (getChess (x, y, c)! = null) {continuEcount ++; } sonst brechen; } // Southwest-Suche nach für (int x = xIndex-1, y = yIndex+1; x> = 0 && y <= Zeilen; x-, y ++) {color c = isblack? Color.black: color.white; if (getChess (x, y, c)! = null) {continuEcount ++; } sonst brechen; } if (continuEcount> = 5) return true; sonst ContinuEcount = 1; // Suchen Sie in einer anderen Situation fort: schräg // Nordwestsuche nach (int x = xindex-1, y = yIndex-1; x> = 0 && y> = 0; x-, y-) {color c = isblack? Color.black: color.white; if (getChess (x, y, c)! = null) continuEcount ++; sonst brechen; } // Southeast suchen nach (int x = xIndex+1, y = yIndex+1; x <= cols && y <= Zeilen; x ++, y ++) {color c = isblack? Color.black: color.white; if (getChess (x, y, c)! = null) continuEcount ++; sonst brechen; } if (continuEcount> = 5) return true; sonst ContinuEcount = 1; false zurückgeben; } private point getChess (int xIndex, int yIndex, Farbe Farbe) {für (Punkt P: Schachliste) {if (p! = null && p.getX () == xIndex && p.gety () == yIndex && p.getColor () == Farbe) return p; } return null; } public void restartGame () {// Schachsteine für (int i = 0; i <chesslist.length; i ++) {Chesslist [i] = null; } // Wiederherstellen Sie den variablen variablen Wert isblack = true; gameover = false; // ist das Spiel endend chesscount = 0; // die aktuelle Anzahl der Schachbretter und Stücke repaint (); } // antworte auf schach public void goeback () {if (chessCount == 0) return; Schachliste [chesscount-1] = null; Chesscount--; if (chessCount> 0) {xIndex = chesslist [chessCount-1] .getX (); yIndex = chesslist [chesscount-1] .gety (); } isblack =! isblack; Repaint (); } // Rechteckdimension öffentliche Dimension getPreferredSize () {Neue Dimension zurückgeben (Margin*2 +grid_span*cols, Margin*2 +grid_span*Zeilen); }} 2. Schachstücke
Paket cn.edu.ouc.fivechess; Import Java.awt.Color; /*** Schachklasse*/public class Point {private int x; // x Index in der Schachkarte private int y; // y Index in der Schachbrett Private Color Color; // Farbe öffentlich statische endgültige int dimeter = 30; // Durchmesser öffentlicher Punkt (int x, int y, farbfarben) {this.x = x; this.y = y; this.color = color; } public int getX () {// den Index von X in der Schachkarte zurückholen x; } public int gety () {return y; } public Color getColor () {// Holen Sie sich die Farbe des Schachstücks Return Color; }} 3. Gozi Hauptrahmenklasse
Paket cn.edu.ouc.fivechess; import Java.awt.event.*; import Java.awt.*; Javax.swing importieren.*; /* Goji Hauptgerüst, Programm*/ öffentliche Klasse startChessJFrame erweitert JFrame {private Schachbrettschachbrett; Private JPanel -Symbolleiste; Privat Jbutton Startbutton, Backbutton, Exitbutton; Privat Jmenubar Menubar; Privat Jmenu Sysmenu; Private JMenuitem StartMenuitem, ExitMenuitem, BackMenuitem; // Menüpunkt neu starten, beenden und bedauern, öffentliche startchessjframe () {settitle ("Stand-Alone Goji"); // Setzen Sie den Titel chessboard = new chessboard (); Container contentPane = getContentPane (); contentPane.add (Schachbrett); Schachbrett.Setopaque (true); // Menü Menu (New JMenubar () erstellen und hinzufügen; // Menüleiste initialisieren sysmenu = new JMenu ("System"); // Menü initialisieren // Menüpunkt initialisieren startMenuitem = new JMenuitem ("restart"); exitMenuitem = new JMenuitem ("exit"); BackMenuitem = new JMenuitem ("Buße"); // Fügen Sie dem Menü sysmenu.add (startMenuitem) drei Menüelemente hinzu. sysmenu.add (exitMenuitem); sysmenu.add (BackMenuitem); // Initialisieren Sie die interne Klasse myItemListener lis = new MyItemListener (); // Drei Menüs an den Event -Hörer this.startMenuitem.AddactionListener (LIS) registrieren; BackMenuitem.AddactionListener (LIS); exitMenuitem.addactionListener (lis); MenuBar.Add (SysMenu); // Fügen Sie das Systemmenü der Menüleiste setJMenuBar (MenuBar) hinzu; // MenuuBar in MenuBar Toolbar = new jpanel (); // Instanzipen des Werkzeugpanels // Drei Buttons initialisieren startbutton = new Jbutton ("Start -Neustart"); exitbutton = new Jbutton ("exit"); Backbutton = New Jbutton ("Buße"); // Layout Die Schaltflächen für die Werkzeugpanel mit FlowLayout -Symbolleiste. // Fügen Sie der Symbolleiste der Symbolleiste (StartButton) drei Tasten hinzu. Symbolleiste.Add (ExitButton); Symbolleiste (Backbutton); // Registrieren Sie die drei Schaltflächen, um das Ereignis zu hören. exitbutton.addactionListener (lis); Backbutton.AddactionListener (LIS); Backbutton.AddactionListener (LIS); // Legen Sie das Werkzeugfeld an die Schnittstelle "South", dh add (Symbolleiste, BorderLayout.South); Add (Schachbrett); // Fügen Sie dem Formular das Formular hinzu. // setSize (800.800); pack (); // adaptive Größe} private Klasse MyItemListener implementiert actionListener {public void actionPerformed (actionEvent e) {Object obj = E.getSource (); // Erhalten Sie die Ereignisquelle, wenn (obj == startchessjframe.tartmenuitemuitem || obj == startbutton) {//start/jfiveFrame. System.out.println ("start"); Schachbrett.RestartGame (); } else if (obj == exitMenuitem || obj == exitbutton) system.exit (0); sonst if (obj == BackMenuitem || obj == Backbutton) {System.out.println ("Buße Schach ..."); Schachbrett.goback (); }}} public static void main (String [] args) {startChessjframe f = new StartChessJFrame (); // Erstellen Sie den Hauptrahmen f.setvisible (true); // Zeigen Sie den Hauptrahmen}} 3. Zusammenfassung
1. Design und Umsetzung von Menüs?
2. Wie zeichne ich Schachstücke, nachdem die Maus auf das Schachbrett geklickt habe? Wie zeichne ich eine rote Schachtel für das Schachstück, das Sie gerade eingerichtet haben?
3. Was ist eine Datenstruktur für Schachwerte?
Das obige dreht sich alles um diesen Artikel. Ich hoffe, dass es für alle hilfreich sein wird, Java -Programme zu lernen.