Este artigo descreve o código de jogo de xadrez chinês implementado por Java. É compartilhado com você para sua referência. O código específico é o seguinte
1. Objetivo prático:
1. Aplicação e diferença entre cliques de mouse, arrastar e outros eventos
2. Economia e leitura de arquivos de registro de xadrez
3. Melhore as regras do xadrez.
2. Conteúdo prático:
O xadrez chinês tem uma longa história e atraiu inúmeras pessoas para estudar. Agora, fizemos o seguinte design e explicação das batalhas do xadrez chinês e da produção de pontuações de xadrez para sua referência e aprendizado.
1. Ao jogar xadrez entre máquinas e máquinas, o lado vermelho assume a liderança. Arraste a peça de xadrez para o destino se atender às regras e o esquilo cair.
Todo mundo joga xadrez
2. Faça um registro de xadrez. Depois de selecionar o menu de registro de xadrez, o jogo começa e o processo de xadrez é gravado.
Selecione o menu "Make Chess Record"
O lado vermelho venceu após o término do pontapé inicial
Depois que um lado vence, a caixa de diálogo Vitória aparece. Depois de clicar em OK, selecione o menu "Salvar o registro de xadrez" e a caixa de diálogo Salvar arquivo aparece.
Salvar a caixa de diálogo de registro de xadrez
3. Demonstre a pontuação do xadrez. Depois de selecionar o menu de pontuação de xadrez de demonstração, uma caixa de diálogo aberta aparece, selecione a pontuação salva de xadrez para iniciar a demonstração.
Demonstre a caixa de diálogo de registro de xadrez
Demonstrar o processo de registro de xadrez (automático e manual)
3. Código de referência:
1. Arquivo principal de xadrez chinesechess.java
pacote cn.edu.ouc.chinesechess; importar javax.swing.*; importar java.awt.*; importar java.awt.event.*; importar java.io.*; importar java.util.LinkedList; / ** * Classe principal do xadrez * * @author cnlht */ public classe chinesechess estende o jframe implementa o actionListener {chessboard board = null; Demônio demônio = nulo; MAKECHESSMANual Record = NULL; Contêiner con = null; Barra Jmenubar; JMENU FILEMENU; Jmenuitem faz pontuação no xadrez, salvar a pontuação do xadrez, demonstrar a pontuação do xadrez; JfileChooser filechooser = null; Linkedlist score de xadrez = nulo; public chineseChess () {bar = new jmenubar (); filemenu = novo jmenu ("xadrez chinês"); Fazer pontuação no xadrez = new jmenuitem ("Make Chess Score"); Salvar pontuação de xadrez = new jmenuitem ("Salvar pontuação de xadrez"); Salvar o score de xadrez.setEnabled (false); Demonstration xadrez de xadrez = novo jmenuitem ("pontuação de xadrez de demonstração"); filemenu.add (faça pontuação de xadrez); filemenu.add (economize de xadrez); filemenu.add (demonstra a pontuação do xadrez); bar.add (filemenu); setjmenubar (bar); Settitle (faça o xadrez Score.getText ()); fazer pontuação de xadrez.AddactionListener (isto); salvar o score de xadrez.AddactionListener (isto); Demonstre Score de xadrez.AddactionListener (isto); placa = novo quadro de xadrez (45, 45, 9, 10); registro = Board.Record; con = getContentPane (); JSplitPane Split = new JSplitPane (jsplitpane.horizontal_split, true, placa, registro); 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 (); validar(); } public void ActionPerformed (ActionEvent E) {if (e.getSource () == Faça a pontuação do xadrez) {con.removeall (); Salvar o score de xadrez.setEnabled (true); this.setTitle (crie score de xadrez.getText ()); placa = novo quadro de xadrez (45, 45, 9, 10); registro = Board.Record; JSplitPane Split = new JSplitPane (jsplitpane.horizontal_split, true, placa, registro); split.setDividersize (5); split.setDividerLocation (460); con.add (split, borderlayout.center); validar(); } if (e.getSource () == Salvar pontuação de xadrez) {int state = filechooser.showsAvedialog (nulo); Arquivo savefile = filechooser.getSelectedFile (); if (savefile! = null && state == jfileChooser.Approve_Option) {try {FileOutputStream OUTONE = new FileOutputStream (saveFile); ObjectOutputStream outtwo = new ObjectOutputStream (outOne); outtwo.WriteObject (Record.get Chess Score ()); outOne.Close (); outtwo.close (); } Catch (Evento IoException) {}}} if (e.getSource () == Demonstrate Score de xadrez) {con.removeall (); Con.Repaint (); con.Validate (); validar(); salvar o score de xadrez.setEnabled (false); int state = filechooser.showpendialog (nulo); Arquivo OpenFile = FileChooser.getSelectedFile (); if (openfile! = null && state == jfileChooser.approve_option) {try {fileInputStream inone = new FileInputStream (OpenFile); ObjectInputStream intwo = new ObjectInputStream (Inone); Xadrez = (LinkedList) intwo.readObject (); Inone.close (); intwo.close (); Tabuleiro de tabuleiro de xadrez = novo quadro de xadrez (45, 45, 9, 10); demônio = novo demônio (placa); Demon.Set Chess Record (registro de xadrez); con.add (demon, borderlayout.center); con.Validate (); validar(); this.setTitle (Demo Chess Record.getText () + ":" + OpenFile); } Catch (Evento de Exceção) {JLabel Label = new Jlabel ("Not Chess Record File"); LABEL.SETFont (New Font ("Lishu", Font.Bold, 60)); Label.setforeground (color.red); LABEL.SETHORIZONTALALALIGN (swingconstants.Center); con.add (etiqueta, borderlayout.center); con.Validate (); this.setTitle ("sem registro de xadrez"); validar(); }} else {JLabel Label = new Jlabel ("Nenhum arquivo de registro de xadrez não está aberto"); LABEL.SETFont (New Font ("Lishu", Font.Bold, 50)); Label.setforeground (color.pink); LABEL.SETHORIZONTALALALIGN (swingconstants.Center); con.add (etiqueta, borderlayout.center); con.Validate (); this.setTitle ("O arquivo de xadrez não está aberto"); validar(); }}} public static void main (string args []) {new chinesechess (); }} 2. Arquivo de xadrez.java
pacote cn.edu.ouc.chinesechess; importar javax.swing.*; importar java.awt.*; importar java.awt.event.*; / ** * Classe de tabuleiro de xadrez * * @Author CNLHT */ Public Class ChessBoard estende JPanel implementa MouseListener, MouseMotionListener {public ChessPoint Point [] []; Public Int Unitwidth, Unitheight; comprimento privado de eixo x e eixo y, comprimento do eixo y; privado int x, y; Imagem privada img; imagem protegida PieceImg; Move booleano privado = false; public String Red Square Color = "Red Square", Black Square Color = "Black Square"; Carrinho Vermelho de Chess Puspiped 1, Carrinho Vermelho 2, Red Horse 1, Red Horse 2, Red Horse 1, Red Horse 2, Red Horse 3, Soldados Vermelhos 4, Soldados Vermelhos 5, Cannon Vermelho 1, Cannon Vermelho 2; Chess Puspier Black Cart 1, Carrinho preto 2, cavalo preto 1, cavalo preto 2, general preto, soldados pretos 1, soldados negros 2, soldados negros 3, soldados pretos 4, soldados negros 5, elefante preto 1, elefante preto 2, arma preta 1, canhão preto 2; int startx, starty; int starti, startj; Public Boolean Red Side Chess = Verdadeiro, xadrez lateral preto = false; Regra de regra = nulo; Public MakechessManual Record = NULL; Public Chessboard (int w, int h, int r, int c) {setLayout (null); addmouseListener (isto); addmousouseMotionListener (isto); Color bc = getBackground (); UNITWIDTH = W; unithight = h; Comprimento do eixo x = r; Comprimento do eixo y = C; ponto = novo chesspoint [r + 1] [c + 1]; para (int i = 1; i <= r; i ++) {for (int j = 1; j <= c; j ++) {ponto [i] [j] = novo ChessPoint (i * unidade largura, j * unitheight, false); }} regra = nova regra (este, ponto); registro = novo makechessmanual (este, ponto); img = ferramentakit.getDefaultToolkit (). getImage ("board.jpg"); PieceImg = Toolkit.getDefaultToolkit (). GetImage ("Piece.gif"); Carro vermelho 1 = novo xadrez ("", color.red, bc, w - 4, h - 4, isso); Categoria de peça de xadrez do carro vermelho 1.Set (cor quadrada vermelha); Carro vermelho 2 = novo xadrez ("", color.red, bc, w - 4, h - 4, isso); Categoria de peça de xadrez do carro vermelho 2. Confiar (cor quadrada vermelha); Red Horse 1 = novo xadrez ("", color.red, BC, W - 4, H - 4, isso); Red Horse 1 = novo xadrez ("", color.red, BC, W - 4, H - 4, isso); Red Horse 2.Set Chess Piece Categoria (cor quadrada vermelha); Cannon vermelho 1 = novo xadrez ("火", color.red, bc, w - 4, h - 4, isso); CANNON RED 1. categoria de peças de xadrez (cor quadrada vermelha); Cannon vermelho 2 = novo xadrez ("火", color.red, bc, w - 4, h - 4, isso); CANNON RED 2. Categoria de peça de xadrez (cor quadrada vermelha); Cannon vermelho 1 = novo xadrez ("火", color.red, bc, w - 4, h - 4, isso); CANNON RED 1. categoria de peças de xadrez (cor quadrada vermelha); Cannon vermelho 2 = novo xadrez ("火", color.red, bc, w - 4, h - 4, isso); CANNON RED 1. categoria de peças de xadrez (cor quadrada vermelha); Cannon vermelho 2 = novo xadrez ("火", color.red, bc, w - 4, h - 4, isso); Categoria de peça de xadrez vermelha 2.Set (cor quadrada vermelha); Vermelho 1 = novo xadrez ("shi", color.red, bc, w - 4, h - 4, isso); Categoria de peça de xadrez vermelha 1.Set (cor quadrada vermelha); Vermelho 2 = novo xadrez ("shi", color.red, bc, w - 4, h - 4, isso); Categoria de peça de xadrez vermelha 2.Set (cor quadrada vermelha); Categoria de peça de xadrez vermelha 2.Set (cor quadrada vermelha); Vermelho 2 = novo xadrez ("shi", color.red, bc, w - 4, h - 4, isso); Vermelho 1 = novo xadrez ("shi", color.red, bc, w - 4, h - 4, isso); Soldado vermelho 1. Categoria de peça de xadrez (cor quadrada vermelha); Soldado vermelho 2 = novo xadrez ("soldado", color.red, bc, w - 4, h - 4, isso); Soldado vermelho 2. Conjunto de peças de xadrez (cor quadrada vermelha); Soldado vermelho 3 = novo xadrez ("soldado", color.red, bc, w - 4, h - 4, isso); Soldado vermelho 3 = novo xadrez ("soldado", color.red, bc, w - 4, h - 4, isso); Soldado vermelho 4.Set Categoria de peça de xadrez (cor quadrada vermelha); Soldado vermelho 5 = novo xadrez ("soldado", color.red, bc, w - 4, h - 4, isso); Soldado vermelho 5.Set Categoria de peça de xadrez (cor quadrada vermelha); Soldado preto = novo xadrez ("vendido", color.black, bc, w - 4, h - 4, isto); Soldado preto 1 = novo xadrez ("soldado", color.black, bc, w - 4, h - 4, isso); Soldado preto 1 = novo xadrez ("soldado", color.black, bc, w - 4, h - 4, isso); Soldado preto 1 = novo xadrez ("carro", color.black, bc, w - 4, h - 4, isso); Categoria de peças de xadrez preto do carro 1. Conjunto (cor quadrada preta); Carro preto 2 = novo xadrez ("carro", color.black, bc, w - 4, h - 4, isto); Categoria de peças de xadrez preto do carro 2.Set (cor quadrada preta); Canhão preto 1 = novo xadrez ("canhão", color.black, bc, w - 4, h - 4, isto); CANNON BLACK 1. Categoria de peças de xadrez preta (cor quadrada preta); Canhão preto 2 = novo xadrez ("canhão", color.black, bc, w - 4, h - 4, isto); CANNON BLACK 2.Set Categoria de peça de xadrez (cor quadrada preta); Elefante preto 1 = novo xadrez ("elefante", color.black, bc, w - 4, h - 4, isto); Elefante preto 1. Confie a categoria de peças de xadrez (cor quadrada preta); Elefante preto 2 = novo xadrez ("elefante", color.black, bc, w - 4, h - 4, isto); Categoria de peças de xadrez preto do elefante 2. Preto (cor quadrada preta); Elefante preto 1 = novo xadrez ("elefante", color.black, bc, w - 4, h - 4, isto); Elefante preto 1. Confie a categoria de peças de xadrez (cor quadrada preta); Elefante preto 2 = novo xadrez ("elefante", color.black, bc, w - 4, h - 4, isto); Cavaleiro preto 2. Confie a categoria de peças de xadrez (cor preta); Calças pretas 1 = novo xadrez ("zhi", color.black, bc, w - 4, h - 4, this); Calças pretas 1. Categoria de peça de xadrez (cor preta); Calças pretas 2 = novo xadrez ("zhi", color.black, bc, w - 4, h - 4, this); Calça preta 2. Confie a categoria de peça de xadrez (cor preta); Calças pretas 3 = novo xadrez ("zhi", color.black, bc, w - 4, h - 4, this); Calça preta 3. Confie a categoria de peça de xadrez (cor preta); Calça preta 4 = novo xadrez ("zhi", color.black, bc, w - 4, h - 4, this); Phantom preto categoria 4. conjunto de peças de xadrez (cor quadrada preta); Black Phantom 5 = novo xadrez ("Zhi", color.black, BC, W - 4, H - 4, este); Phantom preto 5.Set Categoria de peças de xadrez (cor quadrada preta); ponto [1] [10]. ponto [2] [10]. Ponto [3] [10]. ponto [4] [10]. ponto [4] [10]. ponto [4] [10]. ponto [5] [10]. ponto [6] [10]. ponto [7] [10]. ponto [8] [10]. ponto [9] [10] .Prie (soldado vermelho 2, isto); ponto [2] [8]. ponto [8] [8]. ponto [1] [7]. ponto [3] [7]. ponto [3] [7]. ponto [3] [7]. ponto [5] [7]. ponto [7] [7]. ponto [9] [7]. ponto [1] [1]. Ponto [2] [1]. Ponto [3] [1]. ponto [4] [1] .Prie (elefante preto 1, isto); ponto [5] [1]. ponto [6] [1]. ponto [4] [1]. ponto [5] [1]. ponto [6] [1]. ponto [7] [1]. ponto [8] [1]. ponto [9] [1]. Ponto [2] [3]. ponto [8] [3]. ponto [1] [4]. ponto [3] [4]. ponto [5] [4]. ponto [7] [4]. ponto [7] [4]. ponto [3] [4]. ponto [5] [4]. ponto [7] [4]. ponto [9] [4]. } public void PaintComponent (Gráfico G) {super.PaintComponent (G); int imgwidth = img.getwidth (this); int imgheight = img.getHeight (this); // obtenha a largura e a altura da imagem int fwidth = getWidth (); int fHeight = getHeight (); // obtenha a largura e a altura da janela int x = (fwidth - imgwidth)/ 2; int y = (fHeight - imgheight) / 2; G.Drawimage (IMG, X, Y, NULL); for (int j = 1; j <= y-eixo comprimento; j ++) {g.drawline (ponto [1] [j] .x, ponto [1] [j] .y, ponto [eixo x] [j] .x, ponto [eixo x comprimento] [j] .y); } para (int i = 1; i <= x-eixo comprimento; i ++) {if (i! = 1 && i! = comprimento do eixo x) {g.drawline (ponto [i] [1] .x, ponto [i] [1] .y, length, [i] [y-axis-5] .x, ponto [i] [y-axis- G.Drawline (ponto [i] [eixo y comprimento-4] .x, ponto [i] [eixo y Comprimento-4] .y, ponto [i] [eixo y comprimento] .x, ponto [i] [eixo y comprimento] .y); } else {g.drawline (ponto [i] [1] .x, ponto [i] [1] .y, ponto [i] [eixo y comprimento] .x, ponto [i] [y-eixo comprimento] .y); }} g.Drawline (ponto [4] [1] .x, ponto [4] [1] .y, ponto [6] [3] .x, ponto [6] [3] .y); g.drawline (ponto [6] [1] .x, ponto [6] [1] .y, ponto [4] [3] .x, ponto [6] [1] .y, ponto [4] [3] .x, ponto [4] [3] .y); g.drawline (ponto [4] [8] .x, ponto [4] [8] .y, ponto [6] [eixo y comprimento] .x, ponto [6] [eixo y comprimento] .y); g.drawline (ponto [4] [eixo y Comprimento] .x, ponto [4] [eixo y Comprimento] .y, ponto [6] [8] .x, ponto [6] [8] .y); for (int i = 1; i <= x-exis Comprimento; i ++) {g.drawString (""+i, i * largura de unidade, unithight / 2); } int j = 1; for (char c = 'a'; c <= 'j'; c ++) {g.drawString (""+c, unidade largura / 4, j * unithight); j ++; }} / ** Evento de imprensa do mouse* / public void mousePressed (mouseevent e) {peças de xadrez = null; Retângulo ret = nulo; if (e.getSource () == this) move = false; if (move == false) if (e.getSource () Instância de xadrez) {peças = (xadrez) e.getSource (); startx = base.getBounds (). x; Starty = Prince.getBounds (). Y; Rect = Piece.getBounds (); for (int i = 1; i <= x-eixo comprimento; i ++) {for (int j = 1; j <= y-eixo comprimento; j ++) {int x = ponto [i] [j] .getx (); int y = ponto [i] [j] .gety (); if (rect.Contains (x, y)) {starti = i; startj = j; quebrar; }}}}}} public void mouseMoved (mouseevent e) {} / ** Evento de arrasto de mouse* / public void Mousedragged (mouseevent e) {peças de xadrez = null; if (e.getSource () instância do xadrez) {peças = (xadrez) e.getSource (); mover = true; e = swingutilities.convertmouseevent (peça, e, isto); } if (e.getSource () == this) {if (move && pede! = null) {x = e.getx (); y = e.gety (); if (xadrez quadrado vermelho && ((Piece.Chess Subcategory ()). Equals (cor quadrada vermelha))) {Piece.setLocation (x - Prince.getWidth () / 2, y - Piece.getHeight () / 2); } if (move de xadrez preto && (clássica de peças.CHESS (). Equals (cor da fonte preta))) {Piece.setLocation (x - pede.getwidth () / 2, y - peça.getHeight () / 2); }}}} / ** Libere o evento do mouse* / public void mousereleden (mouseevent e) {peças de xadrez = null; mover = false; Retângulo ret = nulo; if (e.getSource () Instância de xadrez) {peças = (xadrez) e.getSource (); Rect = Piece.getBounds (); e = swingutilities.convertmouseevent (peça, e, isto); } if (e.getSource () == this) {boolean containschesspoint = false; int x = 0, y = 0; int m = 0, n = 0; if (peça! = null) {for (int i = 1; i <= x-eixo comprimento; i ++) {for (int j = 1; j <= y-eixo comprimento; j ++) {x = ponto [i] [j] .getx (); y = ponto [i] [j] .gety (); if (rect.Contains (x, y)) {containschesspoint = true; m = i; n = j; quebrar; }}}}} if (pede! = null && containschesspoint) {color hetecolor = beceio.get.get.get color (); if (ponto [m] [n] .ispiece ()) {color c = (ponto [m] [n] .getpiece ()). Obtenha cor de xadrez (); if (latecolor.getRgb () == c.getRgb ()) {base.setLocation (startx, starty); (Point [starti] [startj]). Conjunto tem peças de xadrez (true); } else {boolean ok = regra.movePiecerule (peça, starti, startj, m, n); if (ok) {xadrez de chessiPeremoved = ponto [m] [n] .getpiece (); ponto [m] [n] .Removepiece (cercado, este); ponto [m] [n]. (Point [starti] [startj]). Conjunto tem peças de xadrez (false); Record.Record Chess Score (peça, starti, startj, m, n); registro. Recorde os peças de xadrez comidas (cercadas); regra.iswine (cercando); if (categoria de papel. Move quadrado preto = true; } if (Piece.Paper Category (). Iguals (cor quadrada preta)) {Black Square Move = false; Move quadrado vermelho = true; } validate (); repintar (); } else {Piece.setLocation (startx, starty); (Point [starti] [startj]). Conjunto tem peças de xadrez (true); }}} else {boolean ok = regra .MovePiecerule (peça, starti, startj, m, n); if (ok) {ponto [m] [n]. (Point [starti] [startj]). Conjunto tem peças de xadrez (false); Record.Record Chess Score (peça, starti, startj, m, n); Record.record peças de xadrez comidas ("sem peças de xadrez"); if (categoria de papel. Xadrez quadrado preto = verdadeiro; } if (Piece.Paper Category (). Iguals (cor quadrada preta)) {xadrez quadrado preto = false; Xadrez quadrado vermelho = true; }} else {Piece.setLocation (startx, starty); (Point [starti] [startj]). Conjunto tem peças de xadrez (true); }}} if (pede! = null &&! contentChesspoint) {base.setLocation (startx, starty); (Point [starti] [startj]). Conjunto tem peças de xadrez (true); }}} public void mouseEntered (mouseevent e) {} public void mouseexited (mouseevent e) {} public void mouseclicked (mouseevent e) {}} 3. Arquivo de xadrez.java
pacote cn.edu.ouc.chinesechess; importar javax.swing.*; importar java.awt.*; importar java.awt.event.*; / * * // Nome do xadrez cor backcolor = nulo, capital; // categoria de cor de fundo de fundo e de primeiro plano da cor = nulo; Tabuleiro de tabuleiro de xadrez = nulo; int largura, altura; // tamanho de xadrez público (nome da corda, color fc, color bc, int width, int altura, tabuleiro de xadrez) {// construa a peça de xadrez this.name = name; this.board = placa; this.width = width; this.Height = altura; ECOLOR = FC; backcolor = bc; SetSize (largura, altura); revés (BC); addMousEmotionListener (placa); addmouselistener (placa); } // Desenhe o xadrez de xadrez vazio public (gráficos g) {g.drawimage (board.pieceImg, 2, 2, width-2, altura-2, nulo); G.SetColor (ECOLOR); G.SetFont (New Font ("Kaiti", Font.Bold, 26)); G.DrawString (nome, 7, altura - 8); // Desenhe "Nome do xadrez" na peça de xadrez G.SetColor (color.black); //g.Drawoval(1, 1, Width - 1, altura - 1); largura de linha float = 2,3f; ((Graphics2d) G) .SetStroke (novo BasicStroke (Linha Linha)); ((Graphics2d) g) .Drawoval (2, 2, largura-2, altura-2); } public int getWidth () {return width; } public int getHeight () {return Hight; } public string getName () {return name; } public cor, obtenha o xadrez color () {return thepolor; } public void Set Categoria de xadrez (categoria de string) {categoria color = categoria =; } public string categoria de xadrez () {Return Color Category; }} 4. Arquivo de coordenadas de ponto de xadrez
pacote cn.edu.ouc.chinesechess; /** / ** Essa coordenada tem uma peça*/ boolean tem uma peça; /** peça de xadrez = nulo; / ** quadro de xadrez ao qual a coordenada pertence*/ tabuleiro de xadrez = null; public ChessPoint (int x, int y, boone boo) {this.x = x; this.y = y; Tem uma peça = boo; } public boolean ispiece () {retorna, existem peças de xadrez; } public void Conjunto tem peças de xadrez (Boolean boo) {peças de xadrez = boo; } public int getx () {return x; } public int gety () {return y; } // Definir pontos de alteração para peças de xadrez Public Void Setpiece (peça de xadrez, tabuleiro de tabuleiro de xadrez) {this.board = placa; this.piece = peça; Board.Add (peça); int w = (board.unitwidth); int h = (board.unithight); peça.setbounds (x - w / 2, y - h / 2, w, h); // posição da peça de xadrez, largura, altura com peças de xadrez = true; Board.Validate (); } Public Chesspiece getpiece () {Return Piece; } public void Remowpiece (peça de xadrez, tabuleiro de tabuleiro de xadrez) {this.board = placa; this.piece = peça; Board.Remove (peça); Board.Validate (); peças de xadrez = falso; }} 5.
pacote cn.edu.ouc.chinesechess; importar javax.swing.*; importar java.awt.*; importar java.awt.event.*; / ** * Classe de Regras de Playing de xadrez * * @Author CNLHT */ Public Class Regra {Chessboard Board = NULL; Peça de xadrez de xadrez = nulo; ChessPoint Point [] []; int starti, startj, endi, endj; regra pública (tabuleiro de tabuleiro de xadrez, ponto de chesspoint [] []) {this.board = placas; this.Point = Point; } public void iswine (peça de xadrez) {this.piece = peça; if (pede.getName () == "alinhado" || pede.getName () == "Handy") {if (Piece.Color Category == "Red Side") {JoptionPane.showMessagedialog (null, "Black Side Victory!"); } else {JoptionPane.showMessagedialog (NULL, "Vitória do lado vermelho!"); }}} public boolean movepiecerule (peça de xadrez, int starti, int startj, int endi, int endj) {this.piece = peça; this.starti = starti; this.startJ = startJ; this.endi = endi; this.endJ = endj; int mini = math.min (starti, endi); int maxi = math.max (starti, endi); int minj = math.min (startj, endj); int maxj = math.max (startj, endj); booleano você pode jogar xadrez = false; if (pede.getName (). Equals ("car")) {if (starti == endi) {int j = 0; para (j = minj+1; j <= maxj - 1; j ++) {if (ponto [starti] [j] .ispiece ()) {você pode mover xadrez = false; quebrar; }} if (j == maxj) {você pode mover xadrez = true; }} else if (startj == endj) {int i = 0; for (i = mini+1; i <= maxi - 1; i ++) {if (ponto [i] [startj] .ispiece ()) {você pode mover xadrez = false; quebrar; }} if (i == maxi) {você pode mover xadrez = true; }} else {você pode mover xadrez = false; }}} else if (Piece.getName (). Equals ("")) {if (starti == endi) {int j = 0; para (j = minj+1; j <= maxj - 1; j ++) {if (ponto [starti] [j] .ispiece ()) {você pode mover xadrez = false; quebrar; }} if (j == maxj) {você pode mover xadrez = true; }} else if (startj == endj) {int i = 0; for (i = mini+1; i <= maxi - 1; i ++) {if (ponto [i] [startj] .ispiece ()) {você pode mover xadrez = false; quebrar; }} if (i == maxi) {posso mover xadrez = true; }} else {posso mover xadrez = false; }} else if (beceio.getName (). Equals ("ma")) {int xaxle = math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (xaxle == 2 && yaxle == 1) {if (endi> starti) {if (ponto [starti + 1] [startj] .ispiece ()) {posso mover xadrez = false; } else {posso mover xadrez = true; }} if (endi <starti) {if (ponto [starti - 1] [startj] .ispiece ()) {você pode mover xadrez = false; } else {você pode mover xadrez = true; }}} else if (xaxle == 1 && yaxle == 2) {if (endj> startj) {if (ponto [starti] [startj + 1] .ispiece ()) {você pode mover xadrez = false; } else {você pode mover xadrez = true; }} if (endj <startj) {if (ponto [starti] [startj - 1] .ispiece ()) {você pode mover xadrez = false; } else {você pode mover xadrez = true; }} if (endj <startj) {if (ponto [starti] [startj - 1] .ispiece ()) {você pode mover xadrez = false; } else {você pode mover xadrez = true; } verdadeiro; }}} else {posso mover xadrez = false; }} else if (beceio.getName (). Equals ("" ")) {int xaxle = math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (xaxle == 2 && yaxle == 1) {if (endi> starti) {if (ponto [starti + 1] [startj] .ispiece ()) {posso mover xadrez = false; } else {posso mover xadrez = true; }} if (endi <starti) {if (ponto [starti - 1] [startj] .ispiece ()) {você pode mover xadrez = false; } else {você pode mover xadrez = true; }}} else if (xaxle == 1 && yaxle == 2) {if (endj> startj) {if (ponto [starti] [startj + 1] .ispiece ()) {você pode mover xadrez = false; } else {você pode mover xadrez = true; }} if (endj <startj) {if (ponto [starti] [startj - 1] .ispiece ()) {você pode mover xadrez = false; } else {você pode mover xadrez = true; }}} else {você pode mover xadrez = false; }} else if (Prince.getName (). Equals ("Icon")) {int Centeri = (starti + endi) / 2; int Centerj = (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] [Centerj] .ispiece ()) {você pode mover xadrez = false; } else {você pode mover xadrez = true; }} else {você pode mover xadrez = false; }} else if (beceio.getName (). Equals ("fase")) {int Centeri = (starti + endi) / 2; int Centerj = (startj + endj) / 2; int xaxle = math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (xaxle == 2 && yaxle == 2 && endj> = 6) {if (Point [Centeri] [Centerj] .ispiece ()) {você pode mover xadrez = false; } else {você pode mover xadrez = true; }} else {você pode mover xadrez = true; }} else {você pode mover xadrez = true; }} else {você pode mover xadrez = false; }} else if (Piece.getName (). Equals ("Cannon")) {int number = 0; if (starti == endi) {int j = 0; for (j = minj+1; j <= maxj - 1; j ++) {if (ponto [starti] [j] .ispiece ()) {number ++; }} if (número> 1) {você pode mover xadrez = false; } else if (número == 1) {if (ponto [endi] [endj] .ispiece ()) {você pode mover xadrez = true; }} else if (número == 0 &&! Point [endi] [endj] .ispiece ()) {você pode mover xadrez = true; }} else if (startj == endj) {int i = 0; for (i = mini+1; i <= maxi - 1; i ++) {if (ponto [i] [startj] .ispiece ()) {number ++; }} if (número> 1) {você pode mover xadrez = false; } else if (número == 1) {if (ponto [endi] [endj] .ispiece ()) {você pode mover xadrez = true; }} else if (número == 0 &&! Point [endi] [endj] .ispiece ()) {você pode mover xadrez = true; }} else {você pode mover xadrez = false; }} else if (Piece.getName (). Equals ("Soldier")) {int xaxle = Math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (endj> = 6) {if (startj - endj == 1 && xaxle == 0) {você pode mover xadrez = true; } else {você pode mover xadrez = false; }} else if (endj <= 5) {if ((startj - endj == 1) && (xaxle == 0)) {posso mover xadrez = true; } else if ((endj - startj == 0) && (xaxle == 1)) {posso mover xadrez = true; } else {posso mover xadrez = false; }}} else if (Piece.getName (). Equals ("zhi")) {int xaxle = Math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (endj <= 5) {if (endj - startj == 1 && xaxle == 0) {posso mover xadrez = true; } else {você pode mover xadrez = false; }} else if (endj> = 6) {if ((endj - startj == 1) && (xaxle == 0)) {você pode mover xadrez = true; } else if ((endj - startj == 0) && (xaxle == 1)) {você pode mover xadrez = true; } else {você pode mover xadrez = false; }}} else if (Piece.getName (). Equals ("shi")) {int xaxle = Math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (endi <= 6 && endi> = 4 && xaxle == 1 && yaxle == 1) {você pode mover xadrez = true; } else {você pode mover xadrez = false; }} else if (beceio.getName (). Equals ("state")) {int xaxle = math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (endi <= 6 && endi> = 4 && xaxle == 1 && yaxle == 1) {você pode mover xadrez = true; } else {você pode mover xadrez = false; }} else if ((bote.getName (). Equals ("Handsome")) || (Prince.getName (). Equals ("substituir"))) {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)) {você pode mover xadrez = true; } else {você pode mover xadrez = false; }} else {você pode mover xadrez = false; }} retornar você pode mover xadrez; }} 6. arquivo movestep.java
pacote cn.edu.ouc.chinesechess; importar java.awt.point; / ** * Classe de caminhada * * @author cnlht * */ public class MoveStep implementa java.io.Serializable {public Point Pstart, pend; public MoveStep (Ponto P1, Ponto P2) {Pstart = P1; pend = p2; }} 7. Faça o ChessManual.Java
pacote cn.edu.ouc.chinesechess; importar javax.swing.*; importar java.awt.*; importar java.awt.event.*; importar java.util.LinkedList; / ** * Faça classe de registro de xadrez * * @author cnlht */ public class MakechessManual estende o jpanel implementa o ActionListener {jtextarea text = null; JscrollPane scroll = null; Tabuleiro de tabuleiro de xadrez = nulo; ChessPoint [] [] ponto; LinkedList Chess Note = NULL; LinkedList Eated Chess Pieces = NULL; JButton Buttonundo; int i = 0; public MakechessManual (tabuleiro de xadrez, chesspoint [] [] ponto) {this.board = placas; this.Point = Point; texto = novo jtextarea (); scroll = novo jscrollPane (texto); Nota de xadrez = new LinkedList (); Peças de xadrez comidas = new LinkedList (); ButtonUndo = New JButton ("Arrependimento do xadrez"); ButtonUndo.setFont (New Font ("Lishu", Font.Plain, 18)); setLayout (new BorderLayout ()); add (roll, borderlayout.center); Add (ButtonUndo, BorderLayout.South); buttonUndo.addactionListener (this); } public char numbertoletter (int n) {char c = '/0'; switch (n) {case 1: c = 'a'; quebrar; caso 2: c = 'b'; quebrar; caso 3: c = 'c'; quebrar; Caso 4: c = 'd'; quebrar; Caso 5: c = 'e'; quebrar; caso 6: c = 'f'; quebrar; caso 7: c = 'g'; quebrar; caso 8: c = 'h'; quebrar; caso 9: c = 'i'; quebrar; caso 10: c = 'j'; quebrar; } retornar c; } public void Record Chess Score (peça de xadrez, int starti, int startj, int endi, int endj) {Point pstart = new Point (starti, startj); Ponto pend = new Point (endi, endj); Movestep step = new MoveStep (pstart, pend); Pontuação de xadrez.add (etapa); Categoria de xadrez de string = categoria de peça.CHESS (); Nome da sequência = Piece.getName (); String m = "#" + categoria de xadrez + nome + ":" + starti + numberToletter (startj) + "para" + endi + numberToletter (endj); text.append (m); if (peça. } public void Registre a peça de xadrez consumida (objeto) {peças de xadrez comido.add (objeto); } public linkedList Get the Chess Piece () {Return Chess Piece; } public void ActionPerformed (ActionEvent E) {int POSITION = text.getText (). LastIndexOf ("#"); if (posição! = -1) text.Replacerange ("", posição, text.getText (). length ()); if (xadrez hush.size ()> 0) {movestep laststep = (movestep) xadrez house.getLast (); Registro de xadrez.Removelast (); Objeto qizi = pede de xadrez comed.getLast (); Peça de xadrez comed.Removelast (); String temp = Qizi.toString (); if (temp.equals ("sem xadrez")) {int starti = laststep.pstart.x; int startj = laststep.pstart.y; int endi = laststep.pend.x; int endj = laststep.pend.y; Joga de xadrez = ponto [endi] [endj] .getpiece (); ponto [starti] [startj] .tapiece (peça, placa); (ponto [endi] [endj]). Conjunto possui peças de xadrez (false); if (categoria de peça de peça.Chess (). Board.black square move = false; } if (Piece.Chess Piece Category (). Iguals (Board.Black Square Color)) {Board.Black Square Move = true; Board.Red Square Move = False; }} else {areia de xadrez removida = (xadrez) qizi; int starti = laststep.pstart.x; int startj = laststep.pstart.y; int endi = laststep.pend.x; int endj = laststep.pend.y; Joga de xadrez = ponto [endi] [endj] .getpiece (); ponto [starti] [startj] .tapiece (peça, placa); ponto [endi] [endj] .Prippiece (peça removida, placa); (ponto [endi] [endj]). Conjunto tem peças de xadrez (true); if (piece.Paper category().equals(board.Red square color)) { board.Red square move = true; board.Black square move = false; } if (piece.Paper Category().equals(board.Black Square Color)) { board.Black Square Chess = true; board.Red Square Chess = false; } } } } } } 8.演示棋谱类文件Demon.java
package cn.edu.ouc.chineseChess; import javax.swing.*; import java.awt.*; import java.awt.event.*; importar 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(Time interval.getText().trim()); } catch (NumberFormatException ee) { time = 1000; } if (!(automatic demonstration.isAlive())) {automatic demonstration = 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); automatic demonstration.start(); } } if (e.getSource() == stop) { if (e.getActionCommand().equals("Pause Demo")) { Demo process = "Pause Demo"; stop.setText("Continue Demo"); stop.repaint(); } if (e.getActionCommand().equals("Continue Demo")) { Demo process = "Continue Demo"; Automatic demonstration.interrupt(); stop.setText("Pause Demo"); stop.repaint(); } } } public synchronized void run() { for (index = 0; index < chess score.size(); index++) { try { Thread.sleep(time); } catch (InterruptedException e) { } while (Demo process.equals("Pause demo")) { try { wait(); } catch (InterruptedException e) { notifyAll(); } } Demo step(index); } if (index >= Chess Note.size()) { Demo end("Chess Note demonstration completed"); next.setEnabled(true); replay.setEnabled(true); } } public void Demo step(int index) { MoveStep step = (MoveStep) Chess Note.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 has chess pieces (false); board.repaint(); } else { (board.point)[endI][endJ].setPiece(piece, board); (board.point)[startI][startJ].set has chess pieces (false); } String chess piece category = piece.chess piece category(); String name = piece.getName(); String m = "#" + chess class + name + ": " + startI + numberToLetter(startJ) + " to " + endI + numberToLetter(endJ); text.append(m); if (piece. chess class().equals(board.black square color)) text.append("/n"); } public void demonstration end(String message) { splitH.remove(board); splitH.setDividerSize(5); splitH.setDividerLocation(460); JLabel label = new JLabel(message); label.setFont(new Font("Lishu", Font.BOLD, 40)); label.setForeground(Color.blue); label.setHorizontalAlignment(SwingConstants.CENTER); splitH.setLeftComponent(label); splitH.validate(); } }四、总结与要求
1.理解8个文件,没有太复杂的代码。
2.理解鼠标的MouseListener,MouseMotionListener两个接口的区别,五子棋的实现不需要MouseMotionListener。
3.使用LinkedList记录棋谱的方法。
希望大家喜欢这篇文章,制作一款属于自己的中国象棋游戏。