В этой статье описывается код игры в шахматах Gozi, реализованный в Java. Это совместно с вами для вашей ссылки. Конкретный код выглядит следующим образом
1. Практические цели
1. Освоить дизайн интерфейса Javagui
2. Освоить мониторинг событий мыши (Mouselestener, MousemotionListener)
2. Практическое содержание
Создайте простую программу Gochi, которая может реализовать игровой процесс Gochi Chess. Как показано на рисунке ниже
1. Шахматная доска Гози
Пакет cn.edu.ouc.fivechess; импортировать java.awt.color; импортировать java.awt.cursor; Импорт java.awt.dimension; импортировать java.awt.graphics; импортировать java.awt.graphics2d; импортировать java.awt.image; импортировать java.awt.radialgradientpaint; Импорт java.awt.renderinghints; импортировать java.awt.toolkit; Импорт java.awt.event.mouseeVent; импортировать java.awt.event.mouselistener; импортировать java.awt.event.mousemotionlistener; импортировать java.awt.geom.ellipse2d; импортировать javax.swing.*; /*** Goziqi-Chess-Cess-Board Class*/Public Class Chessboard Extens JPanel реализует MouseListener {Public Static Final Margin = 30; // Margin Public Static Final int Grid_span = 35; // Сетчатые сетки. Точка [(Rows+1)*(Cols+1)]; // Начальный каждый элемент массива - null boolean isblack = true; // По умолчанию начинается с черных шахмат первого лондона Gameover = false; // - это игра, закончившаяся int chesscount; // текущее число шахматных пьес int xindex, yindex; // Индекс чашки Чесс просто воспроизводится изображение; Тени изображения; Цвет colortemp; public Chessboard () {// setbackground (color.blue); // Установить цвет фона на Orange img = toolkit.getDefaulttoolkit (). getImage ("board.jpg"); shadows = toolkit.getDefaulttoolkit (). GetiMage ("shadows.jpg"); AddMouseListener (это); AddMouseMotionListener (new MouseMotionListener () {public void mouseDragged (mouseEvent e) {} public void mouseMoviov y1 = (e.gety ()-margin+grid_span/2)/grid_span; SetCursor (новый курсор (cursor.default_cursor)); } // Нарисовать public void paintcomponent (Graphics g) {super.paintcomponent (g); // Нарисуйте шахматную доску int imgwidth = img.getwidth (this); 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 i = 0; i <= Rows; i ++) {// Нарисуйте горизонтальную линию g.drawline (маржа, маржа+i*grid_span, margin+cols*grid_span, margin+i*grid_span); } for (int i = 0; i <= cols; i ++) {// Нарисуйте вертикальную линию g.drawline (margin+i*grid_span, margin, margin+i*grid_span); } // Нарисуйте шахматы для (int i = 0; i <chesscount; i ++) {// grid recsection x, y координата int xpos = chesslist [i] .getx ()*grid_span+margin; int ypos = шахматный список [i] .gety ()*grid_span+margin; g.setcolor (Chesslist [i] .getColor ()); // установить цвет // g.filloval (xpos-point.diameter/2, ypos-point.diameter/2, //point.diameter, point.diameter); //g.drawimage(shadows, xpos-point.diameter/2, ypos-point.diameter/2, point.diameter, point.diameter, null); colortemp = шахматный список [i] .getColor (); if (colortemp == color.black) {RadialGradientPaint paint = new RadialGradientPaint (xpos-point.diameter/2+25, ypos-point.diameter/2+10, 20, new float [] {0f, 1f}, новый цвет [] {whit.white, color.black}); ((Graphics2d) g) .setPaint (Paint); ((Graphics2d) g) .setRenderingHint (renderingHints.key_antialiasing, renderingHints.value_antialias_on); ((Graphics2d) g) .setRenderingHint (renderingHints.key_alpha_interpolation, renderingHints.value_alpha_interpolation_default); } else if (colortemp == color.white) {RadialGradientPaint paint = new RadialGradientPaint (xpos-point.diameter/2+25, ypos-point.diameter/2+10, 70, new Float [] {0f, 1f}, новый цвет [] {color.white, color.black}); ((Graphics2d) g) .setPaint (Paint); ((Graphics2d) g) .setRenderingHint (renderingHints.key_antialiasing, renderingHints.value_antialias_on); ((Graphics2d) g) .setRenderingHint (renderingHints.key_alpha_interpolation, renderingHints.value_alpha_interpolation_default); } Ellipse2d e = new ellipse2d.float (xpos-point.diameter/2, ypos-point.diameter/2, 34, 35); ((Graphics2d) g) .fill (e); // красная прямоугольная коробка, отмечающая последнюю шахматную кусок if (i == chesscount-1) {// Если это последняя шахматная часть g.setcolor (color.red); g.drawrect (xpos-point.diameter/2, ypos-point.diameter/2, 34, 35); }}} public void mousepressed (mouseevent e) {// Мышь вызывается при нажатии на компонент // игра больше не может играть, если (Gameover) return; String colorname = isblack? "Black": "Белые шахматы"; // конвертировать положение координаты мыши Нажмите в индекс сетки xindex = (e.getx ()-margin+grid_span/2)/grid_span; yindex = (e.gety ()-margin+grid_span/2)/grid_span; // Если вы выйдете за пределы шахматной доски, вы не можете положить это, если (xindex <0 || xindex> Rows || yindex <0 || yindex> cols) return; // Если в положении x и y есть шахматный кусок, вы не можете положить его, если (findchess (xindex, yindex))) возврат; // Если вы можете сделать это, когда это будет сделано, вы не можете выразить это, когда это будет сделано. Точка (xIndex, yindex, isblack? Color.black: color.white); шахматный список [chesscount ++] = CH; Repaint (); // Уведомите систему для повторного Draw // Если вы выиграете, дайте быстрое сообщение и не может продолжать играть в шахматы if (iswin ()) {String msg = string.format («Поздравляю, %s win!», Colorname); Joptionpane.showmessagedialog (это, msg); GameOver = true; } isblack =! isblack; } // Метод перезаписать мыслильный стипендиат MouserEleadued (MouseEvent e) {// Вызовите, когда кнопка мыши выпускается на компоненте} //, называемой в шахматной массиве, чтобы увидеть, есть ли часы с индексом x и y, которые существуют частные лобовые исчезновения (int x, int y) {for (point c: chesslist) {if (c! = null && c.getx () = x && co.get () us) } вернуть false; } private boolean iswin () {int continueCount = 1; // Количество непрерывных шахматных кусочков // выглядеть горизонтально на запад для (int x = xIndex-1; x> = 0; x-) {color c = isblack? color.black: color.white; if (getChess (x, yindex, c)! = null) {continueCount ++; } else Break; } // Посмотреть горизонтально на восток для (int x = Xindex+1; x <= cols; x ++) {color c = isblack? Color.black: color.white; if (getChess (x, yindex, c)! = null) {continueCount ++; } else Break; } if (continueCount> = 5) {return true; } else ContinuEcount = 1; // продолжить другой поиск вертикально // Поиск вверх для (int y = yindex-1; y> = 0; y-) {color c = isblack? Color.black: color.white; if (getChess (xindex, y, c)! = null) {continueCount ++; } else Break; } // Смотрите вниз на (int y = yindex+1; y <= rows; y ++) {color c = isblack? Color.black: color.white; if (getChess (xIndex, y, c)! = null) ContinuEcount ++; еще разрыв; } if (continueCount> = 5) вернуть true; else ContinueCount = 1; // Продолжить поиск другой ситуации: oulquely // Северо-восточный поиск (int x = xindex+1, y = yindex-1; y> = 0 && x <= cols; x ++, y-) {color c = isblack? Color.black: color.white; if (getChess (x, y, c)! = null) {continueCount ++; } else Break; } // Southwest Search for (int x = xIndex-1, y = yindex+1; x> = 0 && y <= Rows; x-, y ++) {color c = isblack? Color.black: color.white; if (getChess (x, y, c)! = null) {continueCount ++; } else Break; } if (continueCount> = 5) вернуть true; else ContinueCount = 1; // Продолжить поиск в другой ситуации: косой // Северо-западный поиск (int x = xIndex-1, y = yindex-1; x> = 0 && y> = 0; x-, y-) {color c = isblack? Color.black: color.white; if (getChess (x, y, c)! = null) ContinueCount ++; еще разрыв; } // Юго -восток ищите для (int x = xIndex+1, y = yindex+1; x <= cols && y <= Rows; x ++, y ++) {color c = isblack? Color.black: color.white; if (getChess (x, y, c)! = null) ContinueCount ++; еще разрыв; } if (continueCount> = 5) вернуть true; else ContinueCount = 1; вернуть ложь; } частная точка getChess (int xIndex, int yindex, color) {for (point p: chesslist) {if (p! = null && p.getx () == xindex && p.gety () == yindex && p.getcolor () == color) return p; } return null; } public void restartgame () {// очистить шахматные произведения для (int i = 0; i <Chesslist.length; i ++) {Chesslist [i] = null; } // Восстановите значение переменного значения, связанного с игрой, isblack = true; GameOver = false; // это игра, заканчивающая chesscount = 0; // текущее количество шахматных досок и произведений перекрашивания (); } // Ответить на шахмат public void goback () {if (chesscount == 0) return; шахматный список [chesscount-1] = null; chesscount--; if (chesscount> 0) {xindex = chesslist [chesscount-1] .getx (); yindex = шахматный список [chesscount-1] .gety (); } isblack =! isblack; Repaint (); } // прямоугольник размер публичного измерения getPreferredSize () {return New Dimension (Margin*2 +grid_span*cols, margin*2 +grid_span*rows); }} 2. Шахматы
Пакет cn.edu.ouc.fivechess; импортировать java.awt.color; /*** Шахматный класс*/public class point {private int x; // x index в шахматной плате private int y; // y индекс в шахматной плате частного цвета; // Цвет публичного статического окончательного диаметра int = 30; // Диаметр Общественной точки (int x, int y, color) {this.x = x; this.y = y; this.color = color; } public int getX () {// Получить индекс x в шахматной доске return x; } public int gety () {return y; } public color getColor () {// Получить цвет верхового цвета шахмата; }} 3. Gozi Main Frame Class
Пакет cn.edu.ouc.fivechess; импортировать java.awt.event.*; Импорт java.awt.*; импортировать javax.swing.*; /* Goji Main Framework, программа*/ public class startchessjframe extends jframe {частная шахматная доска; частная панель инструментов JPanel; Частный Jbutton Startbutton, Backbutton, Exitbutton; Частный Jmenubar Menubar; Частный JMENU SYSMENU; Частный jmenuitem startmenuitem, exitmenuitem, backmenuitem; // Перезагрузить, выходить и сожалеть пункт меню public startchessjframe () {settitle ("отдельный годжи"); // Установить заголовок шахмат = new Chessboard (); Container ContentPane = getContentPane (); contentpane.add (шахматная доска); Schessboard.SetOpaque (True); // Создать и добавить меню menubar = new jmenubar (); // Инициализировать меню бар -бара sysmenu = new jmenu ("System"); // инициализировать меню // Инициализировать пункт меню startMenuitem = new jmenuitem ("перезапуск"); exitmenuitem = new jmenuitem ("exit"); Backmenuitem = new jmenuitem ("Покабли"); // Добавить три пункта меню в меню sysmenu.add (startmenuitem); sysmenu.add (exitmenuitem); sysmenu.add (backmenuitem); // Инициализировать внутренний класс myitemListener lis = new MyItemListener (); // зарегистрировать три меню для слушателя событий this.startmenuitem.addactionListener (LIS); Backmenuitem.addactionListener (LIS); exitmenuitem.addactionListener (LIS); menubar.add (sysmenu); // добавить системное меню в меню Bar Setjmenubar (Menubar); // Установить Menubar на панель инструментов Menubar = new jPanel (); // создание панели инструментов // Три кнопки инициализируют startbutton = new Jbutton («Start Restart»); exitbutton = new Jbutton ("exit"); Backbutton = new Jbutton ("Покаяться"); // расположение кнопок панели инструментов с помощью панели инструментов Flowlayout.setlayout (new Flowlayout (flowlayout.left)); // Добавить три кнопки на панель инструментов на панели инструментов. ADD (startButton); панель инструментов. Add (ExitButton); панель инструментов. Add (Backbutton); // зарегистрировать три кнопки для прослушивания события startbutton.addactionListener (LIS); exitbutton.addactionListener (LIS); Backbutton.addactionListener (LIS); Backbutton.addactionListener (LIS); // Перекладывание панели инструментов на интерфейс «Юг», то есть добавить (панель инструментов, borderlayout.south); Add (Chessboard); // Добавить объект панели в форму // Установить интерфейс Close Event setDefaultCloseoPeration (jframe.exit_on_close); // setSize (800 800); pack (); // Adaptive Size} Частный класс MyItemListener реализует ActionListener {public void actionPerformed (actionEvent e) {Object obj = e.getSource (); // Получить источник события if (opj == startchessjframe.this.startmenuitem || opj == outbutton) {//StartArmArme.This.thistrence. System.out.println ("start"); шахматная доска.restartgame (); } else if (obj == exitmenuitem || obj == exitbutton) system.exit (0); else if (obj == Backmenuitem || obj == Backbutton) {System.out.println ("Покакая шахматы ..."); шахматная доска.goback (); }}} public static void main (string [] args) {startChessJframe f = new StartchessJFrame (); // Создать основной кадр f.setVisible (true); // Показать основной кадр}} 3. Резюме
1. Проектирование и внедрение меню?
2. Как нарисовать шахматные кусочки после щелчка мыши на шахматной доске? Как нарисовать красную коробку для только что настройки шахмат?
3. Что такое структура данных для шахматных результатов?
Выше приведено все об этой статье, я надеюсь, что для всех будет полезно изучать программирование Java.