Cet article décrit le code de jeu d'échecs chinois implémenté par Java. Il est partagé avec vous pour votre référence. Le code spécifique est le suivant
1. Objectif pratique:
1. Application et différence entre le clic de la souris, le glisser et d'autres événements
2. Enregistrement et lecture des fichiers d'enregistrement d'échecs
3. Améliorer les règles des échecs.
2. Contenu pratique:
Les échecs chinois ont une longue histoire et ont attiré d'innombrables personnes à étudier. Maintenant, nous avons fait la conception et l'explication suivantes des batailles des échecs chinois et la production de scores d'échecs pour votre référence et votre apprentissage.
1. Lorsque vous jouez aux échecs entre les machines et les machines, le côté rouge prend les devants. Faites glisser la pièce d'échecs vers la destination si elle respecte les règles et que l'écureuil est abandonné.
Tout le monde joue aux échecs
2. Faites un record d'échecs. Après avoir sélectionné le menu d'enregistrement d'échecs, le jeu commence et le processus d'échecs est enregistré.
Sélectionnez le menu "Make Chess Record"
Le côté rouge a gagné une fois le score d'échecs terminé
Après un côté qui gagne, la boîte de dialogue Message Victory apparaît. Après avoir cliqué sur OK, sélectionnez le menu "Enregistrer les échecs" pour afficher la boîte de dialogue Enregistrer le fichier.
Enregistrer la boîte de dialogue Enregistrer les échecs
3. Démontrer le score d'échecs. Après avoir sélectionné le menu de score d'échecs de démonstration, une boîte de dialogue ouverte apparaît, sélectionnez le score d'échecs enregistré pour démarrer la démonstration.
Démontrer la boîte de dialogue Enregistrer les échecs
Démontrer le processus d'enregistrement d'échecs (automatique et manuel)
3. Code de référence:
1. Fichier principal d'échecs Chinesechess.java
Package Cn.edu.ouc.ChineseChess; importer javax.swing. *; import java.awt. *; import java.awt.event. *; importer java.io. *; import java.util.linkedlist; / ** * CLASSE principale d'échecs * * @Author Cnlht * / classe publique ChineseChess étend JFrame implémente ActionListener {Chessboard Board = NULL; Démon démon = null; MAKECHESSMANUAL RECORD = NULL; Conteneur con = null; Bar JMenubar; JMenu FileMenu; JMenuItem fait le score d'échecs, sauvegarde le score d'échecs, démontre le score d'échecs; JFileChoOSer FileChoOser = NULL; Score d'échecs LinkedList = null; public chineseChess () {bar = new JMenubar (); filemenu = new Jmenu ("échec chinois"); Make Chess Score = new JMenuItem ("Make Chess Score"); Enregistrer l'échecs Score = new JMenuItem ("Save Chess Score"); Enregistrer le score de Chess.SetEnabled (false); Score d'échecs de démonstration = new JMenuItem ("Score d'échecs de démonstration"); FileMenu.Add (Make Chess Score); fileMenu.Add (Save Chess Score); fileMenu.Add (démontre le score d'échecs); bar.add (filemenu); setjMenubar (bar); setTitle (Make Chess Score.GetText ()); faire des échecs Score.AddactionListener (this); Enregistrer les échecs Score.AddactionListener (this); Démontrez des échecs Score.AddactionListener (This); Carte = Nouveau échec (45, 45, 9, 10); enregistrer = board.record; con = getContentPane (); Jsplitpane Split = new jsplitpane (jsplitpane.horizontal_split, true, carton, enregistrement); Split.SetDividersize (5); Split.setDividerLocation (460); CON.ADD (Split, BorderLayout.Center); addWindowListener (new WindowAdapter () {public void windowclosing (windowEvent e) {System.exit (0);}}); setVisible (true); Setbounds (60, 20, 690, 540); fileChoOser = new JFileChoOser (); con.validate (); valider(); } public void ActionPerformed (ActionEvent e) {if (e.getsource () == faire du score d'échecs) {con.RemoveAll (); Enregistrer le score de Chess.SetEnabled (true); this.setTitle (créer des échecs Score.GetText ()); Carte = Nouveau échec (45, 45, 9, 10); enregistrer = board.record; Jsplitpane Split = new jsplitpane (jsplitpane.horizontal_split, true, carton, enregistrement); Split.SetDividersize (5); Split.setDividerLocation (460); CON.ADD (Split, BorderLayout.Center); valider(); } if (e.getSource () == SAVE SCORE ÉCHET) {int state = fileChooser.showsAveDialog (null); File SaveFile = fileChoOser.getSelectedFile (); if (SaveFile! = null && state == JFileChooser.Approve_Option) {try {fileoutputStream OutOne = new FileOutputStream (SaveFile); ObjectOutputStream outwo = new ObjectOutputStream (OutOne); outwo.writeObject (record.get Chess Score ()); outone.close (); outwo.close (); } catch (ioException Event) {}}} if (e.getsource () == démontre le score d'échec) {con.removeall (); Con.Repaint (); con.validate (); valider(); Enregistrer le score de Chess.SetEnabled (false); int state = filechooser.showopendualog (null); File openfile = filechooser.getSelectedFile (); if (openFile! = null && state == JFileChoOser.Approve_Option) {try {fileInputStream inOne = new FileInputStream (openFile); ObjectInputStream intwo = new ObjectInputStream (enOne); Chess = (LinkedList) intwo.readObject (); inone.close (); intwo.close (); Carte d'échecs = Nouveau échec (45, 45, 9, 10); Demon = nouveau démon (planche); Demon.set Record d'échecs (enregistrement d'échecs); CON.ADD (Demon, BorderLayout.Center); con.validate (); valider(); this.setTitle (Demo Chess Record.getText () + ":" + OpenFile); } catch (événement d'exception) {JLabel Label = new JLabel ("Not Chess Record Fichier"); Label.SetFont (New Font ("Lishu", Font.Bold, 60)); Label.SetForeground (Color.Red); Label.SethorizontalAlignment (SwingConstants.Center); con.add (label, borderlayout.center); con.validate (); this.setTitle ("No Chess Record"); valider(); }} else {JLabel Label = new JLabel ("Aucun fichier d'enregistrement d'échecs n'est pas ouvert"); Label.SetFont (New Font ("Lishu", Font.Bold, 50)); Label.setForeground (Color.pink); Label.SethorizontalAlignment (SwingConstants.Center); con.add (label, borderlayout.center); con.validate (); this.setTitle ("Le fichier d'échecs n'est pas ouvert"); valider(); }}} public static void main (String args []) {new chinesechess (); }} 2. Fichier d'échecs.java
Package Cn.edu.ouc.ChineseChess; importer javax.swing. *; import java.awt. *; import java.awt.event. *; / ** * Classe d'échecs * * @author cnlht * / classe publique Chessboard étend Jpanel implémente MouseListener, MouseMotionListener {public Chesspoint Point [] []; public int Unitwidth, unitheight; Longueur privée de l'axe X, longueur de l'axe y; privé int x, y; image privée img; Image protégée Piède; Déplacement booléen privé = false; Public String Red Square Color = "Red Square", Black Square Color = "Black Square"; Échec de la chariot rouge 1, Carte rouge 2, Rouge Horse 1, Rouge Horse 2, Rouge Horse 1, Rouge Rouge 2, Rouge Horse 3, Soldats Red 4, Soldats Red 5, Canon rouge 1, Red Cannon 2; Échecage Black Cart 1, Black Cart 2, Black Horse 1, Black Horse 2, Black General, Black Soldiers 1, Black Soldiers 2, Black Soldiers 3, Black Soldiers 4, Black Soldiers 5, Black Elephant 1, Black Elephant 2, Black Gun 1, Black Cannon 2; int startx, starty; int starti, startJ; Échec côté booléen rouge = vrai, échec côté noir = faux; Règle règle = null; PUBLIC MAKECHESSMANUAL RECORD = NULL; Public Chessboard (int w, int h, int r, int c) {setLayout (null); AddMouseListener (this); addMousMotionListener (this); Color BC = GetBackground (); UnitWidth = W; unitheight = h; Longueur de l'axe x = r; Longueur de l'axe y = c; Point = new Chesspoint [R + 1] [C + 1]; for (int i = 1; i <= r; i ++) {for (int j = 1; j <= c; j ++) {point [i] [j] = new Chesspoint (i * unitwidth, j * unitheight, false); }} règle = nouvelle règle (this, point); Record = new MakeChessManual (ce, point); img = toolkit.getDefaultToolkit (). getImage ("board.jpg"); PitreImg = Toolkit.getDefaultToolkit (). GetImage ("Pice.gif"); RED CAR 1 = Nouvelle archeur ("", Color.Red, BC, W - 4, H - 4, This); Catégorie de la pièce d'échecs de voiture rouge 1. Couleur carrée rouge); Rouge Car 2 = Nouvelle archeur ("", Color.Red, BC, W - 4, H - 4, This); Catégorie de la pièce d'échecs de la voiture rouge 2.set (couleur carrée rouge); Rouge Horse 1 = Nouvel échec ("", Color.Red, BC, W - 4, H - 4, This); Rouge Horse 1 = Nouvel échec ("", Color.Red, BC, W - 4, H - 4, This); Rouge Horse 2. Catégorie de pièce d'échecs (couleur carrée rouge); Canon rouge 1 = nouveau monstrose ("火", Color.Red, BC, W - 4, H - 4, This); Rouge Cannon 1. Catégorie de pièce d'échecs (couleur carrée rouge); Cannon rouge 2 = Nouveau archeur ("火", Color.Red, BC, W - 4, H - 4, This); Rouge Cannon 2. Catégorie de pièce d'échecs (couleur carrée rouge); Canon rouge 1 = nouveau monstrose ("火", Color.Red, BC, W - 4, H - 4, This); Rouge Cannon 1. Catégorie de pièce d'échecs (couleur carrée rouge); Cannon rouge 2 = Nouveau archeur ("火", Color.Red, BC, W - 4, H - 4, This); Rouge Cannon 1. Catégorie de pièce d'échecs (couleur carrée rouge); Cannon rouge 2 = Nouveau archeur ("火", Color.Red, BC, W - 4, H - 4, This); Rouge 2.set catégorie des pièces d'échecs (couleur carrée rouge); Rouge 1 = Nouveau archeur ("Shi", Color.Red, BC, W - 4, H - 4, This); Catégorie Red 1.Set d'échecs (couleur carrée rouge); Rouge 2 = Nouveau archeur ("Shi", Color.Red, BC, W - 4, H - 4, This); Rouge 2.set catégorie des pièces d'échecs (couleur carrée rouge); Rouge 2.set catégorie des pièces d'échecs (couleur carrée rouge); Rouge 2 = Nouveau archeur ("Shi", Color.Red, BC, W - 4, H - 4, This); Rouge 1 = Nouveau archeur ("Shi", Color.Red, BC, W - 4, H - 4, This); Soldat rouge 1. catégorie de pièces d'échecs (couleur carrée rouge); Soldat rouge 2 = Nouvel échec ("soldat", Color.Red, BC, W - 4, H - 4, This); Catégorie de pièce d'échecs de soldat rouge 2. Coffre (couleur carrée rouge); Soldat rouge 3 = Nouvel échec ("soldat", Color.Red, BC, W - 4, H - 4, This); Soldat rouge 3 = Nouvel échec ("soldat", Color.Red, BC, W - 4, H - 4, This); Soldat rouge 4. Catégorie de pièce d'échecs (couleur carrée rouge); Soldat rouge 5 = Nouvel échec ("soldat", Color.Red, BC, W - 4, H - 4, This); Soldat rouge 5. Catégorie de pièce d'échecs (couleur carrée rouge); Soldat noir = Nouveau échec ("Vendu", Color.Black, BC, W - 4, H - 4, This); Soldat noir 1 = nouvel échec ("soldat", couleur.black, bc, w - 4, h - 4, this); Soldat noir 1 = nouvel échec ("soldat", couleur.black, bc, w - 4, h - 4, this); Soldat noir 1 = Nouvel échec ("Car", Color.Black, BC, W - 4, H - 4, This); Catégorie de pièce d'échecs de voiture noire. (Couleur carrée noire); Voiture noire 2 = nouvelle arme ("voiture", couleur.black, bc, w - 4, h - 4, this); Catégorie de la pièce d'échecs de voiture noire (couleur carrée noire); Canon noir 1 = nouveau monstoral ("canon", couleur.black, bc, w - 4, h - 4, this); Canon noir 1. catégorie de pièces d'échecs (couleur carrée noire); Canon noir 2 = Nouveau archeur ("canon", Color.Black, BC, W - 4, H - 4, This); Catégorie de pièce d'échecs de canon noir 2.set (couleur carrée noire); Éléphant noir 1 = nouveau monstre ("Elephant", Color.Black, BC, W - 4, H - 4, This); Éléphant noir 1. catégorie de pièces d'échecs (couleur carrée noire); Elephant noir 2 = Nouveau échec ("Elephant", Color.Black, BC, W - 4, H - 4, This); Éléphant noir 2.set catégorie de pièces d'échecs (couleur carrée noire); Éléphant noir 1 = nouveau monstre ("Elephant", Color.Black, BC, W - 4, H - 4, This); Éléphant noir 1. catégorie de pièces d'échecs (couleur carrée noire); Elephant noir 2 = Nouveau échec ("Elephant", Color.Black, BC, W - 4, H - 4, This); Catégorie de pièces d'échecs de cheval noir 2.set (couleur noire); Pantalon noir 1 = nouveau monstoral ("zhi", couleur.black, bc, w - 4, h - 4, this); Pantalon noir 1. catégorie de pièces d'échecs (couleur noire); Pantalon noir 2 = nouvel échec ("zhi", couleur.black, bc, w - 4, h - 4, this); Pantalon noir 2. catégorie des pièces d'échecs (couleur noire); Pantalon noir 3 = nouveau monstrose ("zhi", couleur.black, bc, w - 4, h - 4, this); Pantalon noir 3. catégorie des pièces d'échecs (couleur noire); Pantalon noir 4 = nouveau monstrose ("zhi", couleur.black, bc, w - 4, h - 4, this); Phantom noir 4. catégorie des pièces d'échecs (couleur carrée noire); Black Phantom 5 = Nouvel échec ("Zhi", Color.Black, BC, W - 4, H - 4, This); Phantom noir 5. catégorie des pièces d'échecs (couleur carrée noire); point [1] [10] .setpiece (chariot rouge 1, this); Point [2] [10] .Pice. (Red Horse 1, This); point [3] [10] .setpiece (phase rouge 1, ceci); point [4] [10] .setpiece (Sage rouge 1, this); point [4] [10] .setpiece (Sage rouge 1, this); point [4] [10] .setpiece (Sage rouge 1, this); Point [5] [10] .setpiece (Red Soldier, This); Point [6] [10] .setpiece (Red Soldier 2, This); Point [7] [10] .setpiece (Red Soldier 2, This); Point [8] [10] .setpiece (Rouge Horse 2, This); Point [9] [10] .Pice. (Red Soldier 2, This); Point [2] [8] .Piece (soldat rouge 1, this); Point [8] [8] .setpiece (Red Soldier 2, This); Point [1] [7] .setpiece (Red Soldier 2, This); Point [3] [7] .setpiece (Red Soldier 2, This); Point [3] [7] .setpiece (Red Soldier 2, This); Point [3] [7] .setpiece (Red Soldier 2, This); Point [5] [7] .Pice. (Red Soldier 3, This); Point [7] [7] .setpiece (Red Soldier 4, This); Point [9] [7] .Piece (soldat rouge 5, this); point [1] [1] .setpiece (voiture noire 1, ceci); Point [2] [1] .Pice. (Black Horse 1, This); Point [3] [1] .Pice. (Elephant noir 1, this); Point [4] [1] .Pice. (Elephant noir 1, this); Point [5] [1] .setpiece (Black General, This); Point [6] [1] .Piece (Elephant noir 1, ceci); Point [4] [1] .setpiece (Black General 1, This); Point [5] [1] .setpiece (Black General 2, This); point [6] [1] .setpiece (Black General 2, This); Point [7] [1] .Piece (Elephant noir 2, ceci); Point [8] [1] .Pice. (Black Horse 2, This); Point [9] [1] .Pice. (Car 2, ceci); Point [2] [3] .Piece (canon noir 1, ceci); Point [8] [3] .Pice. (Canon noir 2, this); Point [1] [4] .Piece (canon noir 1, ceci); Point [3] [4] .Piece (Canon noir 2, ceci); Point [5] [4] .Piece (Canon noir 3, ceci); Point [7] [4] .Piece (canon noir 4, ceci); Point [7] [4] .Piece (canon noir 4, ceci); Point [3] [4] .Piece (canon noir 4, ceci); Point [5] [4] .Piece (Canon noir 3, ceci); Point [7] [4] .Piece (canon noir 4, ceci); Point [9] [4] .Pice. (Black Purse 5, This); } public void peintComponent (graphiques g) {super.paintComponent (g); int imgWidth = img.getWidth (this); int imgheight = img.getheight (this); // obtenez la largeur et la hauteur de l'image int fwidth = getWidth (); int fheight = getheight (); // obtenir la largeur et la hauteur de la fenêtre int x = (fwidth - imgwidth) / 2; int y = (fheight - imgheight) / 2; G.DrawImage (img, x, y, null); pour (int j = 1; j <= longueur de l'axe y; j ++) {g.drawline (point [1] [j] .x, point [1] [j] .y, point [longueur de l'axe x] [j] .x, point [longueur de l'axe x] [j] .y); } pour (int i = 1; i <= longueur de l'axe x; i ++) {if (i! = 1 && i! = longueur de l'axe x) {g.drawline (point [i] [1] .x, point [i] [1] .y, point [i] [y-axe-longueur-5] .x, point [i] [y-axis long-5] .y); g.drawline (point [i] [longueur de l'axe y-4] .x, point [i] [longueur de l'axe y - 4] .y, point [i] [longueur de l'axe y] .x, point [i] [longueur de l'axe y] .y); } else {g.drawline (point [i] [1] .x, point [i] [1] .y, point [i] [longueur de l'axe y] .x, point [i] [longueur de l'axe y] .y); }} g.drawline (point [4] [1] .x, point [4] [1] .y, point [6] [3] .x, point [6] [3] .y); G.Drawline (point [6] [1] .x, point [6] [1] .y, point [4] [3] .x, point [6] [1] .y, point [4] [3] .x, point [4] [3] .y); G.Drawline (point [4] [8] .x, point [4] [8] .y, point [6] [longueur de l'axe y] .x, point [6] [longueur de l'axe y] .y); G.Drawline (point [4] [longueur de l'axe y] .x, point [4] [longueur de l'axe y] .y, point [6] [8] .x, point [6] [8] .y); pour (int i = 1; i <= longueur de l'axe x; i ++) {g.drawstring ("" + i, i * unitwidth, unitheight / 2); } int j = 1; pour (char c = 'a'; c <= 'j'; c ++) {g.drawstring ("" + c, unitwidth / 4, j * unitheight); j ++; }} / ** Événement de presse de la souris * / public void Mousreprim (MouseEvent e) {échecceEce pièce = null; Rectangle rect = null; if (e.getSource () == this) move = false; if (move == false) if (e.getSource () instanceof monsepiece) {pièce = (échec) e.getsource (); startx = pièce.getBounds (). x; Starty = Piece.GetBounds (). Y; rect = pièce.getBounds (); pour (int i = 1; i <= longueur de l'axe x; i ++) {pour (int j = 1; j <= longueur de l'axe y; j ++) {int x = point [i] [j] .getx (); int y = point [i] [j] .gety (); if (rect.contains (x, y)) {starti = i; startj = j; casser; }}}}}} public void MousMoved (MouseEvent E) {} / ** Événement de drag de souris * / public void MouseDragged (MouseEvent e) {ChessPiece pièce = null; if (e.getSource () instance de l'échecage) {pièce = (échec) e.getsource (); move = true; e = swingutiability.convertMousEEvent (pièce, e, this); } if (e.getSource () == this) {if (move && pièce! = null) {x = e.getx (); y = e.gety (); if (Red Square Chess && ((pièce.chess sous-catégorie ()). Equals (couleur carrée rouge))) {pièce.setLocation (x - pièce.getWidth () / 2, y - pièce.getheight () / 2); } if (Black Chess Move && (pièce.chess class (). equals (couleur de police noire))) {pièce.setLocation (x - pièce.getWidth () / 2, y - pièce.getheight () / 2); }}}} / ** Libérez l'événement de la souris * / public void MouseLelent (MouseEvent e) {ChessPiece pièce = null; déplacer = false; Rectangle rect = null; if (e.getSource () instanceof ichestpiece) {pièce = (échec) e.getsource (); rect = pièce.getBounds (); e = swingutiability.convertMousEEvent (pièce, e, this); } if (e.getsource () == this) {booléen contientchesspoint = false; int x = 0, y = 0; int m = 0, n = 0; if (pièce! = null) {for (int i = 1; i <= x-axe longueur; i ++) {for (int j = 1; j <= y-axe longueur; j ++) {x = point [i] [j] .getx (); y = point [i] [j] .gety (); if (rect.Contains (x, y)) {contientchesspoint = true; m = i; n = j; casser; }}}}} if (pièce! = null && contientChesspoint) {colore phiseColor = pitch.get pitch.get colore (); if (point [m] [n] .ispiece ()) {couleur c = (point [m] [n] .getPiece ()). Obtenez la couleur de Chess (); if (phiseColor.getrgb () == c.getrgb ()) {pièce.setLocation (startx, starty); (point [startti] [startj]). Set a des pièces d'échecs (true); } else {boolean ok = règle.movePieCerule (pièce, startti, startj, m, n); if (ok) {ChessPiece PileeReMoved = Point [m] [n] .getPiece (); Point [M] [n] .Removepiece (pietereMoved, this); point [m] [n] .setpiece (pièce, this); (point [startti] [startj]). Set a des pièces d'échecs (false); Score d'échecs record.record (pièce, startti, startj, m, n); enregistrer les pièces d'échecs consommées (coagratoires); règle.iswine (coque-pietemoved); if (pièce. Déplacement carré noir = vrai; } if (pièce.paper catégorie (). égal (couleur carrée noire)) {square noir = false; Move carré rouge = true; } valider (); repeindre(); } else {pièce.setLocation (startx, starty); (point [startti] [startj]). Set a des pièces d'échecs (true); }}} else {boolean ok = règle .movePieCerule (pièce, startti, startj, m, n); if (ok) {point [m] [n] .setPiece (pièce, this); (point [startti] [startj]). Set a des pièces d'échecs (false); Score d'échecs record.record (pièce, startti, startj, m, n); Record.Record des pièces d'échecs mangées ("Pas de pièces d'échecs"); if (pièce. Échecs carrés noir = vrai; } if (pièce.paper catégorie (). égal (couleur carrée noire)) {échoue carrée noire = false; Échecs carrés rouges = true; }} else {pièce.setLocation (startx, starty); (point [startti] [startj]). Set a des pièces d'échecs (true); }}} if (pièce! = null &&! contenantChessPoint) {pièce.setLocation (startx, starty); (point [startti] [startj]). Set a des pièces d'échecs (true); }}} public void muouseentered (mouseevent e) {} public void Mouseexit (Mouseevent e) {} public void MouseClicked (Mouseevent e) {}} 3. Fichier Chesspice.java
Package Cn.edu.ouc.ChineseChess; importer javax.swing. *; import java.awt. *; import java.awt.event. *; / ** * Classe d'échecs * * @author cnlht * / classe publique d'échec de classe étend JLabel {String name; // Nom d'échecs Couleur BackColor = NULL, FenseColor; // CATÉRAVE DE COLLES DE COLOR COLOR COLOR = NULL; Carte d'échecs = null; Int largeur, hauteur; // taille d'échecs public (nom de chaîne, couleur fc, couleur BC, largeur int, hauteur int, carton d'échecs) {// construire le morceau d'échecs this.name = name; this.board = carton; this.width = largeur; this.height = hauteur; prévisionnel = FC; BackColor = BC; setSize (largeur, hauteur); Setbackground (BC); AddMousMotionListener (tableau); AddMouseListener (planche); } // dessiner la pièce d'échecs Public Void Paint (Graphics G) {G.DrawImage (Board.PieceImg, 2, 2, Width-2, Height-2, NULL); G.SetColor (prévision); g.setfont (new Font ("kaiti", font.bold, 26)); G.Drawstring (nom, 7, hauteur - 8); // dessiner "nom d'échecs" sur la pièce d'échecs g.setColor (Color.Black); //g.Drawoval(1, 1, largeur - 1, hauteur - 1); float linewidth = 2,3f; ((Graphics2d) g) .SetStroke (new BasicStroke (LineWidth)); ((Graphics2d) g) .Drawoval (2, 2, largeur-2, hauteur-2); } public int getWidth () {return largeur; } public int getheight () {return height; } public String getName () {Nom de retour; } Couleur publique Get the Chess Color () {return Forecolor; } public void set Chess Catégorie (catégorie de chaîne) {Colory catégorie = catégorie; } Catégorie d'échecs de chaîne publique () {Retour Catégorie de couleur; }} 4. Fichier de coordonnées de point d'échecs
Package Cn.edu.ouc.ChineseChess; / ** * CLASSE DE Point d'échecs * * @author cnlht * / classe publique Chesspoint {/ ** coordonnées d'échecs * / int x, y; / ** Cette coordonnée a-t-elle une pièce * / Boolean a une pièce; / ** pièce d'échecs = null; / ** échec à laquelle appartient la coordonnée * / carton d'échecs = null; Public Chesspoint (int x, int y, boolean boo) {this.x = x; this.y = y; Avoir une pièce = boo; } public boolean ispiece () {return il y a des pièces d'échecs; } L'ensemble de vide public a des pièces d'échecs (boolean boo) {morceaux d'échecs = boo; } public int getX () {return x; } public int gety () {return y; } // Définissez des points de changement en pièces d'échecs publics de vide public (pièce d'échecs, pièce d'échecs) {this.board = bandon; this.piece = pièce; Board.Add (pièce); int w = (board.UnitWidth); int h = (board.unitheight); pièce.setbounds (x - w / 2, y - h / 2, w, h); // position de pièce d'échecs, largeur, hauteur avec pièces d'échecs = vrai; Board.Validate (); } public ChessPiece getpiece () {return pièce; } public void disposice (pièce d'échecs, carton d'échecs) {this.board = bandon; this.piece = pièce; Board.Remove (pièce); Board.Validate (); pièces d'échecs = false; }} 5. Règle de fichier de classe de règle de gameplay.java
Package Cn.edu.ouc.ChineseChess; importer javax.swing. *; import java.awt. *; import java.awt.event. *; / ** * Classe de règles de jeu d'échecs * * @author cnlht * / public class rule {Chessboard Board = null; Piece d'échecs = null; Chesspoint Point [] []; int starti, startj, endi, endj; Règle publique (carton d'échecs, point d'échecs [] []) {this.board = carton; this.point = point; } public void iswine (pièce d'échecs) {this.piece = pièce; if (pièce.getName () == "Aligned" || Piece.getName () == "Handy") {if (pièce.color catégorie == "Red Side") {joptionPane.showMessageAriAl (null, "Black Side Victory!"); } else {joptionpane.showMessageDialog (null, "Red Side Victory!"); }}} public boolean movePieCerule (pièce d'échecs, int starti, int startj, int end, int endj) {this.piece = pièce; this.starti = starti; this.startj = startJ; this.endi = endi; this.endj = endj; int mini = math.min (startti, endi); int maxi = math.max (starti, endi); int minj = math.min (startj, endj); int maxj = math.max (startj, endj); booléen pouvez-vous jouer aux échecs = false; if (pièce.getName (). equals ("car")) {if (starti == ENDI) {int j = 0; pour (j = minj + 1; j <= maxj - 1; j ++) {if (point [starti] [j] .ispiece ()) {pouvez-vous déplacer Chess = false; casser; }} if (j == maxj) {pouvez-vous déplacer Chess = true; }} else if (startj == endj) {int i = 0; for (i = mini + 1; i <= maxi - 1; i ++) {if (point [i] [startj] .ispiece ()) {pouvez-vous déplacer Chess = false; casser; }} if (i == maxi) {pouvez-vous déplacer Chess = true; }} else {pouvez-vous déplacer Chess = false; }}} else if (pitch.getName (). equals ("")) {if (starti == endi) {int j = 0; pour (j = minj + 1; j <= maxj - 1; j ++) {if (point [starti] [j] .ispiece ()) {pouvez-vous déplacer Chess = false; casser; }} if (j == maxj) {pouvez-vous déplacer Chess = true; }} else if (startj == endj) {int i = 0; for (i = mini + 1; i <= maxi - 1; i ++) {if (point [i] [startj] .ispiece ()) {pouvez-vous déplacer Chess = false; casser; }} if (i == maxi) {puis-je déplacer Chess = true; }} else {puis-je déplacer Chess = false; }} else if (pitch.getName (). equals ("ma")) {int xaxle = math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (xaxle == 2 && yaxle == 1) {if (endi> starti) {if (point [starti + 1] [startj] .ispiece ()) {puis-je déplacer l'échec = false; } else {puis-je déplacer Chess = true; }} if (endi <starti) {if (point [starti - 1] [startj] .ispiece ()) {pouvez-vous déplacer l'échec = false; } else {pouvez-vous déplacer Chess = true; }}} else if (xaxle == 1 && yaxle == 2) {if (endj> startJ) {if (point [starti] [startj + 1] .ispiece ()) {pouvez-vous déplacer Chess = false; } else {pouvez-vous déplacer Chess = true; }} if (endj <startJ) {if (point [starti] [startj - 1] .ispiece ()) {pouvez-vous déplacer l'échec = false; } else {pouvez-vous déplacer Chess = true; }} if (endj <startJ) {if (point [starti] [startj - 1] .ispiece ()) {pouvez-vous déplacer l'échec = false; } else {pouvez-vous déplacer Chess = true; } vrai; }}} else {puis-je déplacer Chess = false; }} else if (pièce.getName (). equals ("")) {int xaxle = math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (xaxle == 2 && yaxle == 1) {if (endi> starti) {if (point [starti + 1] [startj] .ispiece ()) {puis-je déplacer l'échec = false; } else {puis-je déplacer Chess = true; }} if (endi <starti) {if (point [starti - 1] [startj] .ispiece ()) {pouvez-vous déplacer l'échec = false; } else {pouvez-vous déplacer Chess = true; }}} else if (xaxle == 1 && yaxle == 2) {if (endj> startJ) {if (point [starti] [startj + 1] .ispiece ()) {pouvez-vous déplacer Chess = false; } else {pouvez-vous déplacer Chess = true; }} if (endj <startJ) {if (point [starti] [startj - 1] .ispiece ()) {pouvez-vous déplacer l'échec = false; } else {pouvez-vous déplacer Chess = true; }}} else {pouvez-vous déplacer Chess = false; }} else if (pitch.getName (). equals ("icon")) {int CentreI = (starti + endi) / 2; int Centrej = (startj + endj) / 2; int xaxle = math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (xaxle == 2 && yaxle == 2 && endj <= 5) {if (Point [Centeri] [Centrej] .ispiece ()) {pouvez-vous déplacer Chess = false; } else {pouvez-vous déplacer Chess = true; }} else {pouvez-vous déplacer Chess = false; }} else if (pièce.getName (). equals ("phase")) {int Cenderi = (starti + endi) / 2; int Centrej = (startj + endj) / 2; int xaxle = math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (xaxle == 2 && yaxle == 2 && endj> = 6) {if (Point [CentreI] [Centrej] .ispiece ()) {pouvez-vous déplacer Chess = false; } else {pouvez-vous déplacer Chess = true; }} else {pouvez-vous déplacer Chess = true; }} else {pouvez-vous déplacer Chess = true; }} else {pouvez-vous déplacer Chess = false; }} else if (pitch.getName (). equals ("canon")) {int numéro = 0; if (starti == endi) {int j = 0; pour (j = minj + 1; j <= maxj - 1; j ++) {if (point [starti] [j] .ispiece ()) {nombre ++; }} if (nombre> 1) {pouvez-vous déplacer Chess = false; } else if (nombre == 1) {if (point [endi] [endj] .ispiece ()) {pouvez-vous déplacer l'échec = true; }} else if (nombre == 0 &&! Point [endi] [endj] .ispiece ()) {pouvez-vous déplacer l'échec = true; }} else if (startj == endj) {int i = 0; pour (i = mini + 1; i <= maxi - 1; i ++) {if (point [i] [startj] .ispiece ()) {nombre ++; }} if (nombre> 1) {pouvez-vous déplacer Chess = false; } else if (nombre == 1) {if (point [endi] [endj] .ispiece ()) {pouvez-vous déplacer l'échec = true; }} else if (nombre == 0 &&! Point [endi] [endj] .ispiece ()) {pouvez-vous déplacer l'échec = true; }} else {pouvez-vous déplacer Chess = false; }} else if (pitch.getName (). equals ("soldat")) {int xaxle = math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (endj> = 6) {if (startj - endj == 1 && xaxle == 0) {pouvez-vous déplacer l'échec = true; } else {pouvez-vous déplacer Chess = false; }} else if (endj <= 5) {if ((startj - endj == 1) && (xaxle == 0)) {puis-je déplacer l'échec = true; } else if ((endj - startj == 0) && (xaxle == 1)) {puis-je déplacer l'échec = true; } else {puis-je déplacer Chess = false; }}} else if (pitch.getName (). equals ("zhi")) {int xaxle = math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (endj <= 5) {if (endj - startj == 1 && xaxle == 0) {puis-je déplacer l'échec = true; } else {pouvez-vous déplacer Chess = false; }} else if (endj> = 6) {if ((endj - startj == 1) && (xaxle == 0)) {pouvez-vous déplacer Chess = true; } else if ((endj - startj == 0) && (xaxle == 1)) {pouvez-vous déplacer l'échec = true; } else {pouvez-vous déplacer Chess = false; }}} else if (pitch.getName (). equals ("shi")) {int xaxle = math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (endi <= 6 && endi> = 4 && xaxle == 1 && yaxle == 1) {pouvez-vous déplacer Chess = true; } else {pouvez-vous déplacer Chess = false; }} else if (pièce.getName (). equals ("state")) {int xaxle = math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (endi <= 6 && endi> = 4 && xaxle == 1 && yaxle == 1) {pouvez-vous déplacer Chess = true; } else {pouvez-vous déplacer Chess = false; }} else if ((pièce.getName (). Equals ("Handome")) || (pièce.getName (). Equals ("Remplace"))) {int xaxle = math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (endi <= 6 && endi> = 4) {if ((xaxle == 1 && yaxle == 0) || (xaxle == 0 && yaxle == 1)) {pouvez-vous déplacer Chess = true; } else {pouvez-vous déplacer Chess = false; }} else {pouvez-vous déplacer Chess = false; }} retour pouvez-vous déplacer les échecs; }} 6. Fichier movesttep.java
Package Cn.edu.ouc.ChineseChess; Importer java.awt.point; / ** * Classe de marche * * @author cnlht * * / classe publique MoveStep implémente java.io.serializable {public Point pstart, pennd; Public MoveStep (point P1, point p2) {pStart = p1; Pend = P2; }} 7. faire ChessManual.java
Package Cn.edu.ouc.ChineseChess; importer javax.swing. *; import java.awt. *; import java.awt.event. *; import java.util.linkedlist; / ** * faire des échecs de classe d'enregistrement * * @author cnlht * / public class makechessmanual étend jpanel implémente actionListener {jTextArea text = null; JSCROLLPANE Scroll = NULL; Carte d'échecs = null; Point d'échecs [] []; LinkedList Chess Note = null; Linkedlist Eatined Chess Piece = NULL; JBUTTON Buttonundo; int i = 0; public makechessManual (carter d'échecs, échecpoint [] [] point) {this.board = bandon; this.point = point; text = new JTextArea (); Scroll = new JSCrollPane (texte); Chess note = new LinkedList (); Pièce d'échecs mangé = new LinkedList (); ButtonNdo = new JButton ("Repenter Chess"); Buttonundo.setfont (nouvelle police ("lishu", font.plain, 18)); setLayout (new BorderLayout ()); Add (Scroll, BorderLayout.Center); Add (ButtonNdo, BorderLayout.South); Buttonundo.AddactionListener (this); } public char numérotoletter (int n) {char c = '/ 0'; commutateur (n) {cas 1: c = 'a'; casser; cas 2: c = 'b'; casser; Cas 3: C = 'C'; casser; Cas 4: C = 'D'; casser; Cas 5: C = 'E'; casser; Cas 6: C = 'F'; casser; Cas 7: C = 'G'; casser; Cas 8: C = 'H'; casser; Cas 9: C = 'i'; casser; Cas 10: C = 'J'; casser; } return c; } public void enregistre les échecs d'échecs (pièce d'échecs, int starti, int startj, int fin, int endj) {point pstart = new Point (startti, startJ); Point pennd = nouveau point (endi, endj); MoveStep Step = new MoveStep (PStart, Pend); Échecs score.add (étape); String Chess category = Piece.chess catégorie (); String name = pièce.getName (); String m = "#" + catégorie d'échecs + name + ":" + starti + nombretoletter (startj) + "to" + endi + numberToletter (endj); text.APPEND (M); if (pièce. Catégorie d'échecs (). Equals (Board.Black Square Color)) text.APPEND ("/ n"); } public void enregistrer la pièce d'échecs mangée (objet objet) {Piece d'échecs mangée.add (objet); } public LinkedList Obtenez le morceau d'échecs () {return ichess Piece; } public void ActionPerformed (actionEvent e) {int position = text.getText (). LastIndexof ("#"); if (position! = -1) text.replacerange ("", position, text.getText (). length ()); if (Chess Piece.Size ()> 0) {MoveStep LastStep = (MoveStep) Chess Piece.getLast (); Échecs Record.Removelast (); Objet qizi = pièce d'échecs mangée.getLast (); Piece d'échecs mangée.removelast (); String temp = qizi.toString (); if (temp.equals ("No Chess Piece")) {int starti = laststep.pstart.x; int startj = laststep.pstart.y; int EndI = Laststep.Pend.x; int endj = lastStep.Pend.y; Ectionpiece pièce = point [endi] [endj] .getPiece (); point [starti] [startj] .setpiece (pièce, planche); (Point [ENDI] [endj]). Set a des pièces d'échecs (false); if (pièce.chess Piece Catégorie (). Equals (Board.Red Square Color)) {Board.Red Square Move = True; Board.Black Square Move = False; } if (pièce.chess pièce catégorie (). Equals (Board.Black Square Color)) {Board.Black Square Move = true; Board.Red Square Move = False; }} else {ChessPiece suppriméPiece = (échecpice) qizi; int starti = laststep.pstart.x; int startj = laststep.pstart.y; int EndI = Laststep.Pend.x; int endj = lastStep.Pend.y; Ectionpiece pièce = point [endi] [endj] .getPiece (); point [starti] [startj] .setpiece (pièce, planche); Point [ENDI] [ENDJ] .SetPiece (Piece supprimée, planche); (Point [ENDI] [ENDJ]). Set a des pièces d'échecs (true); if (pièce.paper category (). equals (board.red square couleur)) {board.red square move = true; Board.Black Square Move = False; } if (pièce.paper category (). equals (board.black square couleur)) {board.black square Chess = true; Board.Red Square Chess = false; }}}}}} 8. Demon.java
Package Cn.edu.ouc.ChineseChess; importer javax.swing. *; import java.awt. *; import java.awt.event. *; import java.util. *; /** * Demo chess class* * @author cnlht */ public class Demon extends JPanel implements ActionListener, Runnable { public JButton replay = null, next = null, auto = null, stop = null; LinkedList chess = null; Thread Automatic demonstration = null; int index = -1; ChessBoard board = null; JTextArea text; JTextField Time interval= null; int time = 1000; String Demo process = ""; JSplitPane splitH = null, splitV = null; public Demon(ChessBoard board) { this.board = board; replay = new JButton("Redemo"); next = new JButton("Next"); auto = new JButton("Automatic Demo"); stop = new JButton("Pause Demo"); Automatic Demo= new Thread(this); replay.addActionListener(this); next.addActionListener(this); auto.addActionListener(this); stop.addActionListener(this); text = new JTextArea(); Time interval = new JTextField("1"); setLayout(new BorderLayout()); JScrollPane pane = new JScrollPane(text); JPanel p = new JPanel(new GridLayout(3, 2)); p.add(next); p.add(replay); p.add(auto); p.add(stop); p.add(new JLabel("Time interval (seconds), SwingConstants.CENTER)); p.add(time interval); splitV = new JSplitPane(JSplitPane.VERTICAL_SPLIT, pane, p); splitH = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, board, splitV); splitV.setDividerSize(5); splitV.setDividerLocation(400); splitH.setDividerSize(5); splitH.setDividerLocation(460); add(splitH, BorderLayout.CENTER); validate(); } public void set chess score(LinkedList chess score) { this. chess score= chess score; } public char numberToLetter(int n) { char c = '/0'; switch (n) { case 1: c = 'A'; break; case 2: c = 'B'; break; case 3: c = 'C'; break; case 4: c = 'D'; break; case 5: c = 'E'; break; case 6: c = 'F'; break; case 7: c = 'G'; break; case 8: c = 'H'; break; case 9: c = 'I'; break; case 10: c = 'J'; break; } return c; } public void actionPerformed(ActionEvent e) { if (e.getSource() == next) { index++; if (index < chess score.size()) { demonstration step(index); } else { demonstration end ("chess score demonstration completed"); } } if (e.getSource() == replay) { board = new ChessBoard(45, 45, 9, 10); splitH.remove(board); splitH.setDividerSize(5); splitH.setDividerLocation(460); splitH.setLeftComponent(board); splitH.validate(); index = -1; text.setText(null); } if (e.getSource() == auto) { next.setEnabled(false); replay.setEnabled(false); try { time = 1000 * Integer.parseInt(时间间隔.getText().trim()); } catch (NumberFormatException ee) { time = 1000; } if (!(自动演示.isAlive())) { 自动演示= new Thread(this); board = new ChessBoard(45, 45, 9, 10); splitH.remove(board); splitH.setDividerSize(5); splitH.setDividerLocation(460); splitH.setLeftComponent(board); splitH.validate(); text.setText(null); 自动演示.start(); } } if (e.getSource() == stop) { if (e.getActionCommand().equals("暂停演示")) { 演示过程= "暂停演示"; stop.setText("继续演示"); stop.repaint(); } if (e.getActionCommand().equals("继续演示")) { 演示过程= "继续演示"; 自动演示.interrupt(); stop.setText("暂停演示"); stop.repaint(); } } } public synchronized void run() { for (index = 0; index < 棋谱.size(); index++) { try { Thread.sleep(time); } catch (InterruptedException e) { } while (演示过程.equals("暂停演示")) { try { wait(); } catch (InterruptedException e) { notifyAll(); } } 演示一步(index); } if (index >= 棋谱.size()) { 演示结束("棋谱演示完毕"); next.setEnabled(true); replay.setEnabled(true); } } public void 演示一步(int index) { MoveStep step = (MoveStep) 棋谱.get(index); Point pStart = step.pStart; Point pEnd = step.pEnd; int startI = pStart.x; int startJ = pStart.y; int endI = pEnd.x; int endJ = pEnd.y; ChessPiece piece = (board.point)[startI][startJ].getPiece(); if ((board.point)[endI][endJ].isPiece() == true) { ChessPiece pieceRemoved = (board.point)[endI][endJ].getPiece(); (board.point)[endI][endJ].reMovePiece(pieceRemoved, board); board.repaint(); (board.point)[endI][endJ].setPiece(piece, board); (board.point)[startI][startJ].set有棋子(false); board.repaint(); } else { (board.point)[endI][endJ].setPiece(piece, board); (board.point)[startI][startJ].set有棋子(false); } String 棋子类别= piece.棋子类别(); String name = piece.getName(); String m = "#" + 棋子类别+ name + ": " + startI + numberToLetter(startJ) + " 到" + endI + numberToLetter(endJ); text.append(m); if (piece.棋子类别().equals(board.黑方颜色)) text.append("/n"); } public void 演示结束(String message) { splitH.remove(board); splitH.setDividerSize(5); splitH.setDividerLocation(460); JLabel label = new JLabel(message); label.setFont(new Font("隶书", Font.BOLD, 40)); label.setForeground(Color.blue); label.setHorizontalAlignment(SwingConstants.CENTER); splitH.setLeftComponent(label); splitH.validate(); } }四、总结与要求
1.理解8个文件,没有太复杂的代码。
2.理解鼠标的MouseListener,MouseMotionListener两个接口的区别,五子棋的实现不需要MouseMotionListener。
3.使用LinkedList记录棋谱的方法。
希望大家喜欢这篇文章,制作一款属于自己的中国象棋游戏。