В этой статье описывается китайский код шахматной игры, реализованный Java. Это совместно с вами для вашей ссылки. Конкретный код выглядит следующим образом
1. Практическая цель:
1. Приложение и разница между щелчком мыши, перетаскиванием и другими событиями
2. Сохранение и чтение файлов шахматных записей
3. улучшить правила шахмат.
2. Практическое содержание:
Китайские шахматы имеют долгую историю и привлекли бесчисленные люди для изучения. Теперь мы сделали следующий дизайн и объяснение сражений с китайскими шахматами и производства шахматных результатов для вашей ссылки и обучения.
1. При игре в шахматы между машинами и машинами красная сторона берет на себя лидерство. Перетащите шахматный кусок в пункт назначения, если он соответствует правилам, а белка сбрасывается.
Все играют в шахматы
2. Сделайте шахматную запись. После выбора меню «Шахматные записи» начинается игра и записан шахматный процесс.
Выберите меню «Сделать шахмат»
Красная сторона выиграла после того, как счет в шахматах был закончен
После победы в одной стороне появляется диалоговое окно «Победное сообщение». После нажатия OK выберите меню «Сохранить Chess Record», и появится диалоговое окно «Сохранить файл».
Диалоговое окно «Сохранить шахматную запись»
3. Продемонстрировать шахматный счет. После выбора меню «Демонстрационная шахматная оценка» появляется открытое диалоговое окно, выберите сохраненный шахматный счет, чтобы начать демонстрацию.
Демонстрировать диалоговое окно «Шахматная запись»
Продемонстрировать процесс записи шахматов (автоматический и ручной)
3. Справочный код:
1. Шахматный основной файл chinesechess.java
Пакет cn.edu.ouc.chinesechess; импортировать javax.swing.*; Импорт java.awt.*; импортировать java.awt.event.*; импортировать java.io.*; импортировать java.util.linkedlist; / ** * Шахматный основной класс * * @author cnlht */ public class Chinesechess расширяет JFrame реализует ActionListener {chessboard poard = null; Демон Демон = null; Makechessmanual Record = null; Контейнер con = null; Jmenubar Bar; JMENU FILEMENU; Jmenuitem сделает шахматный счет, Save Chess Score, демонстрируйте шахмат; Jfilechooser fileChooser = null; LinkedList Chess Score = null; public Chinesechess () {bar = new jmenubar (); filemenu = new jmenu ("китайские шахматы"); Сделать шахмат = новый jmenuitem («Сделайте шахмат»); Save Chess Score = new jmenuitem («Сохранить шахматный счет»); Сохранить шахматный счет.setEnabled (false); Демонстрационная шахматная оценка = new jmenuitem («Демонстрационная шахматная оценка»); filemenu.add (сделать шахмат); filemenu.add (Save Chess Score); filemenu.add (демонстрировать шахмат); bar.add (filemenu); SetJmenubar (бар); Settitle (сделать шахмат score.gettext ()); сделать шахмат. Сохранить шахмат. продемонстрировать шахматный счет. AddactionListener (это); доска = новая шахматная доска (45, 45, 9, 10); record = poard.record; con = getContentPane (); Jsplitpane split = new jsplitpane (jsplitpane.horizontal_split, true, poard, record); split.setDividersize (5); Split.SetDividerLocation (460); con.add (Split, Borderlayout.center); addWindowlistener (new windowdapter () {public void windowclose (windowevent e) {System.exit (0);}}); setVisible (true); Setbounds (60, 20, 690, 540); fileChooser = new jfilechooser (); con.validate (); validate (); } public void actionPerformed (actionEvent e) {if (e.getSource () == Сделать оценку шахмата) {con.Removeall (); Сохранить шахмат. this.setTitle (создать шахмат score.gettext ()); доска = новая шахматная доска (45, 45, 9, 10); record = poard.record; Jsplitpane split = new jsplitpane (jsplitpane.horizontal_split, true, poard, record); split.setDividersize (5); Split.SetDividerLocation (460); con.add (Split, Borderlayout.center); validate (); } if (e.getSource () == Сохранить оценку шахматов) {int stast = fileChooser.showsAvedialog (null); File 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 (ioException event) {}}} if (e.getSource () == демонстрировать оценку шахмата) {con.Removeall (); con.repaint (); con.validate (); validate (); Сохранить шахматный счет.setEnabled (false); int state = fileChooser.showopendialog (null); File openfile = fileChooser.getSelectedFile (); if (openfile! = null && state == jfilechooser.approve_option) {try {fileInputStream inone = new FileInputStream (OpenFile); ObjectInputStream intwo = new ObjectInputStream (inone); Chess = (LinkedList) intwo.readobject (); inone.close (); intwo.close (); Шахматная доска = новая шахматная доска (45, 45, 9, 10); Демон = новый демон (доска); Demon.Set Chess Record (Chess Record); con.add (demon, borderlayout.center); con.validate (); validate (); this.setTitle (демо -шахмат record.getText () + ":" + openfile); } catch (Exception Event) {jlabel label = new jlabel ("Не файл записи шахматов"); label.setfont (новый шрифт ("lishu", font.bold, 60)); label.setforeground (color.red); Label.sethorizontalAlignment (SwingConstants.center); con.add (метка, borderlayout.center); con.validate (); this.SetTitle («Нет шахматной записи»); validate (); }} else {jlabel label = new jlabel ("Нет файла записи шахматов не открыт"); label.setfont (новый шрифт ("lishu", font.bold, 50)); label.setforeground (color.pink); Label.sethorizontalAlignment (SwingConstants.center); con.add (метка, borderlayout.center); con.validate (); this.setTitle («шахматный файл не открыт»); validate (); }}} public static void main (string args []) {new Chinesechess (); }} 2. Файл шахматной доски
Пакет cn.edu.ouc.chinesechess; импортировать javax.swing.*; Импорт java.awt.*; импортировать java.awt.event.*; / ** * Класс шахмат * * @author cnlht */ public Class Chessboard расширяет Jpanel реализует Mouselestener, MousemotionListener {public Chesspoint Point [] []; Public Int Unit Whidth, Unitheight; Частная длина оси int x, длина оси Y; Частный int x, y; частное изображение IMG; Защищенное изображение части; Частный логический ход = false; Public String Red Square Color = "Red Square", Black Square Color = "Черный квадрат"; Чесспанская красная тележка 1, красная тележка 2, красная лошадь 1, красная лошадь 2, красная лошадь 1, красная лошадь 2, красная лошадь 3, красные солдаты 4, красные солдаты 5, красная пушка 1, красная пушка 2; Черная тележка для шахмата 1, черная тележка 2, черная лошадь 1, черная лошадь 2, черный генерал, черные солдаты 1, черные солдаты 2, черные солдаты 3, черные солдаты 4, черные солдаты 5, черный слон 1, черный слон 2, черный пистолет 1, черный пушка 2; int startx, starty; int starti, startj; Общедоступная логическая красная шахматы = верно, черная боковая шахматы = false; Правило правила = null; Public Makechessmanual Record = null; Public Chessboard (int W, Int H, Int R, Int C) {setlayout (null); AddMouseListener (это); addmousemotionlistener (это); Цвет bc = getbackground (); UNITWIDTH = W; Unitheight = h; Длина оси x = r; Длина оси 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] = новая Chesspoint (i * Unitwidth, j * unitheight, false); }} rug = новое правило (это, точка); record = new Makechessmanual (это, точка); img = toolkit.getdefaulttoolkit (). GetiMage ("board.jpg"); piectImg = toolkit.getDefaulttoolkit (). getImage ("piece.gif"); Красный автомобиль 1 = новый шахмат ("", Color.red, BC, W - 4, H - 4, это); Красный автомобиль 1.Set Chess Piece Category (красный квадратный цвет); Red Car 2 = новый шахматный ("", Color.red, BC, W - 4, H - 4, это); Red Car 2.set Chess Piece Category (красный квадратный цвет); Red Horse 1 = новый шахматный ("", Color.red, BC, W - 4, H - 4, это); Red Horse 1 = новый шахматный ("", Color.red, BC, W - 4, H - 4, это); Красная конная категория шахмат (красный квадратный цвет); Red Cannon 1 = новый шахмат ("火", Color.red, BC, W - 4, H - 4, это); Красная пушка 1. Шахматная категория шахмат (красный квадратный цвет); Red Cannon 2 = новый шахмат ("火", Color.red, BC, W - 4, H - 4, это); Красная пушка 2. Шахматная категория шахмат (красный квадратный цвет); Red Cannon 1 = новый шахмат ("火", Color.red, BC, W - 4, H - 4, это); Красная пушка 1. Шахматная категория шахмат (красный квадратный цвет); Red Cannon 2 = новый шахмат ("火", Color.red, BC, W - 4, H - 4, это); Красная пушка 1. Шахматная категория шахмат (красный квадратный цвет); Red Cannon 2 = новый шахмат ("火", Color.red, BC, W - 4, H - 4, это); Категория шахмат красного 2.Set (красный квадратный цвет); Красный 1 = новый шахматный век ("shi", color.red, bc, w - 4, h - 4, это); Категория шахмат красного 1.Set (красный квадратный цвет); RED 2 = новый шахмат ("shi", color.red, bc, w - 4, h - 4, это); Категория шахмат красного 2.Set (красный квадратный цвет); Категория шахмат красного 2.Set (красный квадратный цвет); RED 2 = новый шахмат ("shi", color.red, bc, w - 4, h - 4, это); Красный 1 = новый шахматный век ("shi", color.red, bc, w - 4, h - 4, это); Красный солдат 1. Категория шахматы с шахматами (красный квадратный цвет); Red Soldier 2 = Новый шахмат («Солдат», Color.red, BC, W - 4, H - 4, это); Категория шахмат Red Soldier 2.Set Checess (красный квадратный цвет); Red Soldier 3 = Новый шахмат («Солдат», Color.red, BC, W - 4, H - 4, это); Red Soldier 3 = Новый шахмат («Солдат», Color.red, BC, W - 4, H - 4, это); Красный солдат 4. Категория шахматы с шахматами (красный квадратный цвет); Red Soldier 5 = новый шахматный («Солдат», Color.red, BC, W - 4, H - 4, это); Красный солдат 5. Категория шахматы с шахматами (красный квадратный цвет); Black Soldier = новый шахмат («Проданный», Color.Black, BC, W - 4, H - 4, это); Black Soldier 1 = новый шахмат («Солдат», Color.black, BC, W - 4, H - 4, это); Black Soldier 1 = новый шахмат («Солдат», Color.black, BC, W - 4, H - 4, это); Black Soldier 1 = новый шахмат ("Car", Color.Black, BC, W - 4, H - 4, это); Черный автомобиль 1.Set Chess Piece Category (Черный квадратный цвет); Black Car 2 = новый шахмат ("car", color.black, bc, w - 4, h - 4, это); Черный автомобиль 2.Set Chess Piece Category (Черный квадратный цвет); Черная пушка 1 = новый шахмат («Пушка», Color.black, BC, W - 4, H - 4, это); Черная пушка 1.Set Шахматная категория (черный квадратный цвет); Black Cannon 2 = новый шахмат ("Cannon", Color.Black, BC, W - 4, H - 4, это); Черная пушка 2.Set Шахматная категория (черный квадратный цвет); Черный слон 1 = новый шахмат ("слон", color.black, bc, w - 4, h - 4, это); Черный слон 1.Set Chess Piece Категория (черный квадратный цвет); Черный слон 2 = новый шахмат («Слон», Color.black, BC, W - 4, H - 4, это); Черный слон 2.set Шахматный кусок (черный квадратный цвет); Черный слон 1 = новый шахмат ("слон", color.black, bc, w - 4, h - 4, это); Черный слон 1.Set Chess Piece Категория (черный квадратный цвет); Черный слон 2 = новый шахмат («Слон», Color.black, BC, W - 4, H - 4, это); Черная лошадь 2. Шахматная категория шахмат (черный цвет); Черные брюки 1 = новый шахмат ("zhi", color.black, bc, w - 4, h - 4, это); Черные брюки 1. Сетчатая шахматная категория (черный цвет); Черные брюки 2 = новый шахмат ("zhi", color.black, bc, w - 4, h - 4, это); Черные брюки 2. Шахматная категория шахмат (черный цвет); Черные брюки 3 = новый шахмат ("zhi", color.black, bc, w - 4, h - 4, это); Черные брюки 3. Категория шахматы с шахматами (черный цвет); Черные брюки 4 = новый шахмат ("zhi", color.black, bc, w - 4, h - 4, это); Черный фантом 4. Категория шахматы с шахматами (черный квадратный цвет); Black Phantom 5 = новый шахмат ("zhi", color.black, bc, w - 4, h - 4, это); Черный фантом 5. Категория шахмат (черный квадратный цвет); точка [1] [10] .setieceiepiece (красная карета 1, это); точка [2] [10] .setieceiepiece (красная лошадь 1, это); точка [3] [10] .setieciepecie (красная фаза 1, это); точка [4] [10] .setieceiepiece (красный шалфей 1, это); точка [4] [10] .setieceiepiece (красный шалфей 1, это); точка [4] [10] .setieceiepiece (красный шалфей 1, это); точка [5] [10] .setieciepieceiepiece (красный солдат, это); точка [6] [10] .setiecies (Red Soldier 2, this); точка [7] [10] .setieciepecies (красный солдат 2, это); точка [8] [10] .setieceiepecie (Red Horse 2, this); точка [9] [10] .setieciepecies (красный солдат 2, это); точка [2] [8] .setieciepiece (Red Soldier 1, this); точка [8] [8] .setieceiepecie (Red Soldier 2, this); точка [1] [7] .setieciepecies (красный солдат 2, это); точка [3] [7] .setieciepecie (Red Soldier 2, this); точка [3] [7] .setieciepecie (Red Soldier 2, this); точка [3] [7] .setieciepecie (Red Soldier 2, this); точка [5] [7] .setieciepieceiepiece (Red Soldier 3, This); точка [7] [7] .setieciepecies (красный солдат 4, это); точка [9] [7] .setieciepecies (красный солдат 5, это); точка [1] [1] .setieceiepecie (черный автомобиль 1, это); точка [2] [1] .setieciepecie (черная лошадь 1, это); точка [3] [1] .setieceiepiece (черный слон 1, это); точка [4] [1] .setieceiepiece (черный слон 1, это); точка [5] [1] .setieciepecie (черный общий, это); точка [6] [1] .Setieceiepecie (черный слон 1, это); точка [4] [1] .setieciepecies (черный генерал 1, это); точка [5] [1] .setieciepecie (черный генерал 2, это); точка [6] [1] .setieciepecies (черный общий 2, это); точка [7] [1] .setieceiepiece (черный слон 2, это); точка [8] [1] .setieciepecies (Black Horse 2, this); точка [9] [1] .setieciepiece (черный автомобиль 2, это); точка [2] [3] .setieciepieceiepiece (черная пушка 1, это); точка [8] [3] .setieceiepecie (черная пушка 2, это); точка [1] [4] .setieceiepeciet (черная пушка 1, это); точка [3] [4] .setiepieceiepiece (черная пушка 2, это); точка [5] [4] .setieciepeciet (Black Cannon 3, это); точка [7] [4] .setieciepeciet (черная пушка 4, это); точка [7] [4] .setieciepeciet (черная пушка 4, это); точка [3] [4] .setieceiepieceiepiece (черная пушка 4, это); точка [5] [4] .setieciepeciet (Black Cannon 3, это); точка [7] [4] .setieciepeciet (черная пушка 4, это); точка [9] [4] .setieceiepiece (черный кошелек 5, это); } public void paintComponent (Graphics G) {super.paintcomponent (g); int imgwidth = img.getWidth (это); int imgheight = img.getheight (это); // Получить ширину и высоту изображения int fwidth = getWidth (); int fheight = getheight (); // Получить ширину и высоту окна int x = (fwidth - imgwidth)/ 2; int y = (fheight - imgheight) / 2; g.drawimage (img, x, y, null); for (int j = 1; j <= y-ось длины; j ++) {g.drawline (точка [1] [j] .x, точка [1] [j] .y, точка [x-ось длины] [j] .x, точка [x-ось длина] [j] .y); } for (int i = 1; i <= x-ось длина; i ++) {if (i! = 1 && i! = x-ось длина) {g.drawline (точка [i] [1] .x, точка [i] [1] .y, точка [i] [y-ось длины-5] .x, точка [i] [1] длина g.drawline (точка [i] [длина оси y-4] .x, точка [i] [длина оси Y-4] .y, точка [i] [длина оси Y] .x, точка [i] [длина оси Y] .y); } else {g.drawline (точка [i] [1] .x, точка [i] [1] .y, точка [i] [длина оси Y] .x, точка [i] [y-ось длины] .y); }} g.drawline (точка [4] [1] .x, точка [4] [1] .y, точка [6] [3] .x, точка [6] [3] .y); g.drawline (точка [6] [1] .x, точка [6] [1] .y, точка [4] [3] .x, точка [6] [1] .y, точка [4] [3] .x, точка [4] [3] .y); g.drawline (точка [4] [8] .x, точка [4] [8] .y, точка [6] [длина оси Y] .x, точка [6] [длина оси Y] .y); g.drawline (точка [4] [длина оси Y] .x, точка [4] [длина оси Y] .y, точка [6] [8] .x, точка [6] [8] .y); for (int i = 1; i <= x-ось длина; i ++) {g.drawstring (""+i, i * Unitwidth, Unitheight / 2); } int j = 1; for (char c = 'a'; c <= 'j'; c ++) {g.drawstring (""+c, unitwidth / 4, j * unitheight); J ++; }} / ** Событие нажатия мыши* / public void mousepressed (mouseevent e) {Chesspiece Piece = null; Прямоугольник rect = null; if (e.getSource () == это) move = false; if (move == false) if (e.getSource () экземпляр Chesspiece) {piece = (Chesseceief) e.getSource (); startX = piece.getBounds (). x; starty = piece.getBounds (). y; rect = piece.getBounds (); for (int i = 1; i <= x-ось длина; i ++) {for (int j = 1; j <= y-ось длина; j ++) {int x = point [i] [j] .getx (); int y = point [i] [j] .gety (); if (rect.contains (x, y)) {starti = i; startJ = j; перерыв; }}}} / if (e.getsource () экземпляр шахмата) {piece = (chasecepiece) e.getsource (); ход = true; e = swingUtilities.convertmouseeVent (часть, E, это); } if (e.getSource () == this) {if (move && piece! = null) {x = e.getx (); y = e.gety (); if (красный квадратный шахмат && ((piece.chess subcategory ()). equals (красный квадратный цвет))) {piece.setlocation (x - piece.getwidth () / 2, y - piece.getheight () / 2); } if (Black Chess Move && (piece.chess class (). equals (черный цвет шрифта))) {piece.setlocation (x - piece.getWidth () / 2, y - piece.getheight () / 2); }}}} / ** выпустить событие мыши* / public void mouserealeedEleadeed (mouseevent e) {Chesspiece Piece = null; MOVE = false; Прямоугольник rect = null; if (e.getSource () экземпляр для шахмата) {piece = (chancepiece) e.getSource (); rect = piece.getBounds (); e = swingUtilities.convertmouseeVent (часть, E, это); } if (e.getSource () == this) {boolean containschesspoint = false; int x = 0, y = 0; int m = 0, n = 0; if (piece! = null) {for (int i = 1; i <= x-ось длины; i ++) {for (int j = 1; j <= y-ось длина; j ++) {x = point [i] [j] .getx (); y = point [i] [j] .gety (); if (rect.contains (x, y)) {containschesspoint = true; m = i; n = j; перерыв; }}}}} if (piece! = null && содержитschesspoint) {color piececolor = piece.get piece.get color (); if (point [m] [n] .ispiece ()) {color c = (точка [m] [n] .getpiece ()). Получить цвет шахмата (); if (piececolor.getrgb () == c.getrgb ()) {piece.setlocation (startx, starty); (point [starti] [startJ]). У SET есть шахматы (TRUE); } else {boolean ok = rug.movepiecerule (piece, starti, startj, m, n); if (OK) {Chesspiece Pieceremoved = point [m] [n] .getPiece (); точка [m] [n] .removepeeceiepeece (Pieceremoved, это); точка [m] [n] .setieceiepiece (кусок, это); (point [starti] [startJ]). У SET есть шахматы (false); record.record Chess Score (Piece, Starti, Startj, M, N); Запись. Зарегистрируйте съеденные шахматы (кусочки); Правило. if (piece.paper Category (). equals (красный квадратный цвет)) {красное квадратное движение = false; Черный квадратный ход = правда; } if (piece.paper Category (). equals (черный квадратный цвет)) {черный квадратный ход = false; Красная квадрат Move = true; } validate (); Repaint (); } else {piece.setLocation (startX, starty); (point [starti] [startJ]). У SET есть шахматы (TRUE); }}} else {boolean ok = rule .movepiecerule (piece, starti, startj, m, n); if (ok) {point [m] [n] .setiepecie (часть, это); (point [starti] [startJ]). У SET есть шахматы (false); record.record Chess Score (Piece, Starti, Startj, M, N); record. -record шахматы съедены («Нет шахматных кусочков»); if (piece.paper Category (). Equals (красный квадратный цвет)) {Red Square Chess = false; Черные квадратные шахматы = правда; } if (piece.paper Category (). Equals (черный квадратный цвет)) {черный квадратный шахмат = false; Красная квадратная шахматы = верно; }} else {piece.setLocation (startX, starty); (point [starti] [startJ]). У SET есть шахматы (TRUE); }}} if (piece! = null &&! Containchesspoint) {piece.setLocation (startx, starty); (point [starti] [startJ]). У SET есть шахматы (TRUE); }}} public void mouseEnted (mouseevent e) {} public void mouseexited (mouseevent e) {} public void mouseclicked (mouseevent e) {}} 3. файл Chesspiece.java
Пакет cn.edu.ouc.chinesechess; импортировать javax.swing.*; Импорт java.awt.*; импортировать java.awt.event.*; / ** * Шахматный класс * * @author cnlht */ public Class Chesseciece Extends jlabel {String name; // Шахматное имя цвет backcolor = null, forecolor; // фон и цветовая цветовая категория на переднем плане = null; Шахматная доска = null; int width, height; // size public Chesseceiece (String name, Color fc, Color BC, INT Ширина, int Height, плата шахматной доски) {// Создание шахматной части this.name = name; this.board = poard; this.width = ширина; this.height = высота; forecolor = fc; backcolor = bc; setSize (ширина, высота); Betbackground (BC); addmousemotionlistener (доска); addmouseListener (доска); } // Нарисуйте шахматную часть public void paint (графика G) {g.drawimage (board.peeceimg, 2, 2, width-2, height-2, null); G.SetColor (ForeColor); g.setfont (новый шрифт ("kaiti", font.bold, 26)); g.drawstring (имя, 7, высота - 8); // Нарисуйте «Имя шахмата» на шахматном куске g.setcolor (color.black); //g.drawoval(1, 1, ширина - 1, высота - 1); Float Linewidth = 2,3F; ((Graphics2d) g) .SetStroke (New BasicStroke (LineWidth)); ((Graphics2d) g) .dawoval (2, 2, ширина-2, высота-2); } public int getWidth () {return width; } public int getheight () {return Height; } public String getName () {return name; } public Color Получить шахматный цвет () {return forecolor; } public void Set Chess Category (String Category) {Color Category = Category; } public String Chess Category () {return Color Category; }} 4. Файл координат точки шахмата
Пакет cn.edu.ouc.chinesechess; / *** Класс шахматной точки** @author cnlht*/ public class Chesspoint {/ ** Координаты шахмата*/ int x, y; / ** У этой координаты есть кусок*/ boolean есть кусок; /** Часть шахмата = null; / ** Шахматная доска, которой принадлежит координата*/ chanceboard board = null; public Chesspoint (int x, int y, boolean boo) {this.x = x; this.y = y; Есть кусок = бу; } public boolean ispiece () {return Есть шахматы; } public void set имеет шахматные фигуры (логический Boo) {шахматы = boo; } public int getx () {return x; } public int gety () {return y; } // Установите точки изменения на шахматные куски Public void SetPiece (Chesseceiece Piece, Passboard Poard) {this.board = poard; this.peece = piece; Board.Add (Piece); int w = (poard.unitwidth); int h = (poard.unitheight); Piece.SetBounds (x - w / 2, y - h / 2, w, h); // Положение шахматного куска, ширина, высота с шахматными частями = true; poard.validate (); } public Chesseciece getPiece () {return Piece; } public void removePiece (шестерня для шахматной доски) {this.board = poard; this.peece = piece; Board.remove (Piece); poard.validate (); Шахматные кусочки = ложь; }} 5.
Пакет cn.edu.ouc.chinesechess; импортировать javax.swing.*; Импорт java.awt.*; импортировать java.awt.event.*; / ** * Класс правил игры в шахматах * * @author cnlht */ public class rule {chessboard board = null; Чайник шахмата = null; Точка шахматного пункта [] []; int starti, startj, endi, endj; Общественное правило (доска шахматной доски, точка Chesspoint [] []) {this.board = poard; this.point = point; } public void iSwine (Chesseceiece Piece) {this.peece = piece; if (piece.getName () == "Выровнен" || piece.getName () == "Handy") {if (piece.color категория == "красная сторона") {joptionpane.showmessagedialog (нулевая, "Черная победа!"); } else {joptionpane.showmessageDialog (null, "Победа красной боковой!"); }}} public boolean movepiecerule (Chesspeece Piece, int starti, int startj, int endi, int endj) {this.piece = piece; 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); логический вы можете играть в шахматы = false; if (piece.getName (). Equals ("car")) {if (starti == endi) {int j = 0; for (j = minj+1; j <= maxj - 1; j ++) {if (point [starti] [j] .ispies ()) {Можете ли вы переместить шахмат = false; перерыв; }} if (j == maxj) {может ли вы переместить шахмат = true; }} else if (startJ == endj) {int i = 0; for (i = mini+1; i <= maxi - 1; i ++) {if (point [i] [startJ] .ipsieCeece ()) {Можете ли вы переместить шахмат = false; перерыв; }} if (i == maxi) {может ли вы переместить шахмат = true; }} else {может ли вы переместить шахмат = false; }}} else if (piece.getName (). equals ("")) {if (starti == endi) {int j = 0; for (j = minj+1; j <= maxj - 1; j ++) {if (point [starti] [j] .ispies ()) {Можете ли вы переместить шахмат = false; перерыв; }} if (j == maxj) {может ли вы переместить шахмат = true; }} else if (startJ == endj) {int i = 0; for (i = mini+1; i <= maxi - 1; i ++) {if (point [i] [startJ] .ipsieCeece ()) {Можете ли вы переместить шахмат = false; перерыв; }} if (i == maxi) {con i move chance = true; }} else {могу ли я переместить шахмат = false; }} else if (piece.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] .ispies ()) {может я перемещать шахмат = false; } else {могу я переместить шахмат = true; }} if (endi <starti) {if (point [starti - 1] [startJ] .ispies ()) {может ли вы переместить шахмат = false; } else {может ли вы переместить шахмат = true; }}} else if (xaxle == 1 && yaxle == 2) {if (endj> startj) {if (point [starti] [startJ + 1] .ipseece ()) {может перемещать chass = false; } else {может ли вы переместить шахмат = true; }} if (endj <startj) {if (point [starti] [startJ - 1] .ipsies ()) {может ли вы перемещать chass = false; } else {может ли вы переместить шахмат = true; }} if (endj <startj) {if (point [starti] [startJ - 1] .ipsies ()) {может ли вы перемещать chass = false; } else {может ли вы переместить шахмат = true; } истинный; }}} else {Con Is Ispe Chess = false; }} else if (piece.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] .ispies ()) {может я перемещать шахмат = false; } else {могу я переместить шахмат = true; }} if (endi <starti) {if (point [starti - 1] [startJ] .ispies ()) {может ли вы переместить шахмат = false; } else {может ли вы переместить шахмат = true; }}} else if (xaxle == 1 && yaxle == 2) {if (endj> startj) {if (point [starti] [startJ + 1] .ipseece ()) {может перемещать chass = false; } else {может ли вы переместить шахмат = true; }} if (endj <startj) {if (point [starti] [startJ - 1] .ipsies ()) {может ли вы перемещать chass = false; } else {может ли вы переместить шахмат = true; }}} else {может ли вы переместить шахмат = false; }} else if (piece.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] .ispies ()) {может перемещать шахмат = false; } else {может ли вы переместить шахмат = true; }} else {может ли вы переместить шахмат = false; }} else if (piece.getName (). equals ("phase")) {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] .ispies ()) {может перемещать шахмат = false; } else {может ли вы переместить шахмат = true; }} else {может ли вы переместить шахмат = true; }} else {может ли вы переместить шахмат = true; }} else {может ли вы переместить шахмат = 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 (point [starti] [j] .ispies ()) {number ++; }} if (number> 1) {может ли вы переместить шахмат = false; } else if (number == 1) {if (point [endi] [endj] .ispies ()) {можно перемещать шахмат = true; }} else if (number == 0 &&! point [endi] [endj] .ispies ()) {можно перемещать шахмат = true; }} else if (startJ == endj) {int i = 0; for (i = mini+1; i <= maxi - 1; i ++) {if (point [i] [startJ] .ipsieCeece ()) {number ++; }} if (number> 1) {может ли вы переместить шахмат = false; } else if (number == 1) {if (point [endi] [endj] .ispies ()) {можно перемещать шахмат = true; }} else if (number == 0 &&! point [endi] [endj] .ispies ()) {можно перемещать шахмат = true; }} else {может ли вы переместить шахмат = 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) {можно перемещать шахмат = true; } else {может ли вы переместить шахмат = false; }} else if (endj <= 5) {if ((startj - endj == 1) && (xaxle == 0)) {con i move chess = true; } else if ((endj - startj == 0) && (xaxle == 1)) {можно перенести шахмат = true; } else {могу я переместить шахмат = 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) {можно перенести шахмат = true; } else {может ли вы переместить шахмат = false; }} else if (endj> = 6) {if ((endj - startj == 1) && (xaxle == 0)) {может перемещать шахмат = true; } else if ((endj - startj == 0) && (xaxle == 1)) {может ли вы переместить шахмат = true; } else {может ли вы переместить шахмат = 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) {может перемещать шахмат = true; } else {может ли вы переместить шахмат = false; }} else if (piece.getName (). equals ("state")) {int xaxle = math.abs (starti - endi); int yaxle = math.abs (startj - endj); if (endi <= 6 && endi> = 4 && xaxle == 1 && yaxle == 1) {может перемещать шахмат = true; } else {может ли вы переместить шахмат = false; }} else if ((piece.getName (). equals ("красивый")) || (piece.getName (). equals ("replace"))) {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)) {Можете ли вы переместить шахмат = true; } else {может ли вы переместить шахмат = false; }} else {может ли вы переместить шахмат = false; }} возврат может ли вы переместить шахматы; }} 6. Fovestep.java File
Пакет cn.edu.ouc.chinesechess; импортировать java.awt.point; / ** * Класс ходьбы * * @author cnlht * */ public class Movestep реализует java.io.serializable {public point pStart, pend; Public MoveStep (точка P1, точка P2) {pStart = P1; Pend = P2; }} 7. Сделать Schessmanual.java
Пакет cn.edu.ouc.chinesechess; импортировать javax.swing.*; Импорт java.awt.*; импортировать java.awt.event.*; импортировать java.util.linkedlist; / ** * Сделать класс записи шахматов * * @author cnlht */ public class makechessmanual расширяет JPanel реализует ActionListener {jTextarea text = null; JScrollPane Scroll = NULL; Шахматная доска = null; Chesspoint [] [] point; LinkedList Chess Note = null; LinkedList съедал шахматы = null; Jbutton Buttonundo; int i = 0; public makechessmanual (щита шахматной доски, Chesspoint [] [] point) {this.board = poard; this.point = point; Text = new JTextArea (); scroll = new jscrollpane (текст); Шахматная нота = новый LinkedList (); Eated Chess Pieces = new LinkedList (); Buttonundo = new Jbutton ("Покакая шахматы"); buttonundo.setfont (новый шрифт ("lishu", font.plain, 18)); setlayout (new Borderlayout ()); Добавить (Scroll, Borderlayout.center); Добавить (Buttonundo, Borderlayout.South); buttonundo.addactionListener (это); } public char numbertoletter (int n) {char c = '/0'; Switch (n) {case 1: c = 'a'; перерыв; Случай 2: c = 'b'; перерыв; Случай 3: c = 'c'; перерыв; Случай 4: c = 'd'; перерыв; Случай 5: C = 'E'; перерыв; Случай 6: c = 'f'; перерыв; Случай 7: c = 'g'; перерыв; Случай 8: C = 'H'; перерыв; Случай 9: c = 'i'; перерыв; Случай 10: C = 'J'; перерыв; } return c; } public void записывает счет в шахматной оценке (Chesspiece Piece, int starti, int startj, int endi, int endj) {point pStart = new Point (starti, startJ); Point pend = new Point (endi, endj); Movestep step = new MoveStep (pStart, Pend); Шахматный счет. Адд (шаг); Строковая шахматная категория = piece.chess Category (); String name = piece.getName (); String m = "#" + категория шахмат + name + ":" + starti + numbertoletter (startj) + "до" + endi + numbertoletter (endj); text.append (m); if (piece. Chess Category (). equals (board.black square color)) text.append ("/n"); } public void Запишите съеденный шахматный кусок (объект объекта) {съеденный шахмат piece.add (object); } public LinkedList Получить шахмат () {вернуть шахмат; } public void actionPerformed (actionEvent e) {int position = text.getText (). antiNdexof ("#"); if (position! = -1) text.replacerange ("",, position, text.getText (). length ()); if (Chess Piece.size ()> 0) {movestep laststep = (movestep) Chess Piece.getlast (); Шахматный record.removelast (); Object Qizi = eated Chess Piece.getlast (); Ел шахматный кусок. Removelast (); String temp = Qizi.toString (); if (temp.equals ("нет шахмат")) {int starti = laststep.pstart.x; int startj = laststep.pstart.y; int endi = laststep.pend.x; int endj = laststep.pend.y; Часть шахмата = точка [endi] [endj] .getPiece (); Point [starti] [startJ] .setiepieceiepiece (Piece, Poard); (точка [endi] [endj]). У SET есть шахматы (false); if (piece.chess Piece Category (). Equals (board.red Square Color)) {poard.red square move = true; Board.black Square Move = false; } if (piece.chess Piece Category (). equals (board.black square color)) {board.black square move = true; Прата. Red Square Move = false; }} else {Чесспапский процесс удаленной пейзаж = (Чесспап) Qizi; int starti = laststep.pstart.x; int startj = laststep.pstart.y; int endi = laststep.pend.x; int endj = laststep.pend.y; Часть шахмата = точка [endi] [endj] .getPiece (); point[startI][startJ].setPiece(piece, board); point[endI][endJ].setPiece(removedPiece, board); (point[endI][endJ]).set has chess pieces(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.*; import java.util.*; /** * 演示棋谱类* * @author cnlht */ public class Demon extends JPanel implements ActionListener, Runnable { public JButton replay = null, next = null, auto = null, stop = null; LinkedList 棋谱= null; Thread 自动演示= null; int index = -1; ChessBoard board = null; JTextArea text; JTextField 时间间隔= null; int time = 1000; String 演示过程= ""; JSplitPane splitH = null, splitV = null; public Demon(ChessBoard board) { this.board = board; replay = new JButton("重新演示"); next = new JButton("下一步"); auto = new JButton("自动演示"); stop = new JButton("暂停演示"); 自动演示= new Thread(this); replay.addActionListener(this); next.addActionListener(this); auto.addActionListener(this); stop.addActionListener(this); text = new JTextArea(); 时间间隔= 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("时间间隔(秒)", SwingConstants.CENTER)); p.add(时间间隔); 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棋谱(LinkedList 棋谱) { this.棋谱= 棋谱; } 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 < 棋谱.size()) { 演示一步(index); } else { 演示结束("棋谱演示完毕"); } } 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记录棋谱的方法。
希望大家喜欢这篇文章,制作一款属于自己的中国象棋游戏。