Эта маленькая игра - дизайн курса Java моей сестры и меня, и это также первый проект Java, который я сделал. Это подходит для начинающих. Я надеюсь, что это может помочь тем детям, которые обеспокоены дизайном курса Java ~~~
1. Игра должна быть реализована
1. Разработайте основную раму и интерфейс.
2. Используйте интерфейс ActionListener, чтобы реализовать мониторинг событий кнопок.
3. Перезагрузите реализацию функции.
4. Реализация шахматной функции.
5. Реализация функции выхода.
6. Определение точек шахмат в шахматной доске.
7. Используйте интерфейс MouseListener для реализации мониторинга событий и реализации всех методов в интерфейсе.
8. Когда мышь перемещается в точку пересечения на доске, и на точке нет шахматных кусочков, она может стать маленькой формой руки.
9. При нажатии на шахматную доску используйте оператор IF, чтобы определить, находится ли точка на пересечении, и используйте оператор Foreach и GetX () и метод gety () в классе шахмата, чтобы пройти положение каждого шахматного элемента, чтобы определить, есть ли у точки шахматы.
10. Когда определяется, что вы можете поместить субботу в точке щелчков, при рисовании части используйте цикл для прохождения каждой существующей точки и использовать SetColor класса графики, чтобы установить цвет, и используйте метод заполнения графического класса, чтобы установить размер формы.
11. При рисунке шахмат, вы должны судить победителя и проиграть вовремя. Используйте индекс и для петли, чтобы пройти направления последнего шахматного куска. Если на одной прямой линии есть шахматные кусочки с несколькими шахматными частями, превышающими или равны пяти, то есть тот, который представлен текущей шахматной кусочкой.
12. Когда победитель решается, соответствующая информация может быть выскочена.
2. Реализация функционального кода
2.1 Введите игру
public static void main (string [] args) {startchessjframe f = new Startchessjframe (); // Создать основной кадр f.setvisible (true); // Показать основной кадр}2.2 Инициализация, определите некоторые величины, которые будут использоваться.
Приватная шахматная доска для шахматной доски; // панель борьбы с панелью панели на панели инструментов; // панель панели инструментов Private Private Button Startbutton; // Установить кнопку старта для приватной кнопки Backbutton; // Установить кнопку «Приятная кнопка"
2.3 Метод строительства интерфейса (Game Framework)
public startchessjframe () {settitle ("standalone goji"); // Установить заголовок шахмат = new Chessboard (); // Инициализировать объект панели, создать и добавить меню myitemlistener lis = new myitemlistener (); // Инициализируйте кнопку «Прослушивание среднего класса»; Backbutton = новая кнопка («Ответить»); exitbutton = new Button ("exit"); // инициализация инструментов. Toolbar.Add (startButton); toolbar.add (exitbutton); // добавить три кнопки в панель инструмента startbutton.addactionListener (LIS); Backbutton.addactionListener (LIS); exitbutton.addactionListener (LIS); // Зарегистрировать три кнопки события для прослушивания события add (панель инструментов, borderlayout.south); // расположение панели инструментов к югу от интерфейса, то есть добавить (chessboard); // Добавить объект панели в форму setDefaultcloseoperation (jframe.exit_on_close);2.4 Реализация и мониторинг кнопки (метод внутреннего построения)
Myitemlistener lis = new MyItemListener (); // Инициализировать внутренний класс инструментов для прослушивателя кнопок = new Panel (); // создание экземпляра панели инструментов startbutton = new Button ("перезапуск"); Backbutton = новая кнопка («Ответить»); exitbutton = new Button ("exit"); // инициализация инструментов. Toolbar.Add (startButton); toolbar.add (exitbutton); // добавить три кнопки в панель инструмента startbutton.addactionListener (LIS); Backbutton.addactionListener (LIS); exitbutton.addactionListener (LIS); // Зарегистрируйте три кнопки, чтобы прослушать события2.5 Прослушивание событий кнопок
Частный класс MyItemListener реализует ActionListener {public void ActionPerformed (actionEvent e) {Object obj = e.getSource (); // Получить источник события if (obj == startbutton) {System.out.println ("start ..."); // restart // jfiveframe.this inner class Ссылка на внешний класс магистраль. } else if (obj == exitbutton) {System.Exit (0); // Завершать приложение} else if (obj == Backbutton) {System.out.println ("Покаяние шахматы ..."); // Покакая chessboard.goback (); }}}2.6 Реализация функции кнопки перезагрузки
public void restartgame () {// Clear Chess Pieces для (int i = 0; i <Chesslist.length; i ++) Chesslist [i] = null; /*Восстановить значения переменных, связанных с игрой,*/ isback = true; gameover = false; // заканчивает ли игра chesscount = 0; // количество шахматных произведений на текущей плате - Repaint (); }2.7 Реализация функции кнопки шахмата
public void goback () {if (chesscount == 0) return; шахматный список [chesscount-1] = null; chesscount--; if (chesscount> 0) {xindex = chesslist [chesscount-1] .getx (); yindex = шахматный список [chesscount-1] .gety (); } isback =! isback; Repaint (); }2.8 Когда шахматная доска становится больше или меньше по мере необходимости, окно должно измениться соответственно.
// измерение: внутри прямоугольной шахматной доски } pack (); // адаптивный размер внутри класса Startchessboard
2.9 Определение шахматных кусочков
Импорт java.awt.*; Общедоступный класс точка {private int x; // x index value Chess Piece в шахматной плате Private int y; // y index value чайной части в шахматной доске частного цвета цвета; // Цвет общедоступного статического диаметра int = 30; // Диаметр Общественной точки (int x, int y, color) {this.x = x; this.y = y; this.color = color; } // Получить значение x индекса шахматного часа в шахматной доске public int getx () {return x; } // Получить значение индекса y шахматного шва в шахматной доске public int getey () {return y; } // Получить шахматный цвет цвет публичного цвета getColor () {return Color; }} 3. Реализация функционального кода части
3.1 Инициализация, определите некоторые величины, которые будут использоваться.
public static int MARGIN=30;//Marriage public static int GRID_SPAN=35;//Grid spacing public static int ROWS=18;//Number of chessboard rows public static int COLS=18;//Number of chessboard columns Point[] chessList=new Point[(ROWS+1)*(COLS+1)];//Initialize each array element to null boolean isBack=true;//Default starts to black Шахматы First gameover = false; // выполняет игру end int int chesscount; // количество шахматных произведений на текущей шахматной доске int xindex, yindex; // Индекс шахматной пьесы.
3.2 Построить метод объекта шахматной доски
public Chessboard () {setbackground (color.light_gray); // Установить цвет фона на серый addmouseListener (this); // добавить слушатель событий addMousemotionListener (new MousemotionListener () {// Анонимный внутренний класс @Override public void mousemoved (mouseevent e) {Int x1 = (e.getx ()-margin+grid_span/2)/grid_span; if (x1 <0 || x1> Rows || y1 <0 || y1> Cols || Gameover || findchess (x1, y1)) {// Игра закончилась и не может быть отброшена; Shape} else {setCursor (новый курсор (cursor.hand_cursor)); // set в руку}} @Override public void mousedragged (mouseevent e) {}}); }3.3 Установите слушателя мыши и сделайте руку меньше (внутри метода строительства)
AddMouseMotionListener (новый MouseMotionListener () {// Анонимный внутренний класс @Override public void mouseMoviov (mouseevent e) {int x1 = (e.getx ()-margin+grid_span/2)/grid_span; int y1 = (e.gety ()-margin+grid_span/2)/grid_span; Индекс сетки if (x1 <0 || x1> Rows || y1 <0 || y1> cols || gameover || findchess (x1, y1)) {// Игра закончилась и не может быть отброшена; CURSOR (cursor.default_cursor)); // Установка в форму по умолчанию} else {setCursor (новый курсор (cursor.hand_cursor)); // set to word}} @override public void mousedragged (mouseevent e) {}});3.4 Нажатие мыши при нажатии на шахматную доску
public void mousepressed (mouseevent e) {// if (GameOver) вызывается, когда кнопка мыши нажимается на компонент // игра закончилась и не может быть возвращена; String colorname = isback? «Черный»: «Белые шахматы»; xindex = (e.getx ()-margin+grid_span/2)/grid_span; yindex = (e.gety ()-margin+grid_span/2)/grid_span; // преобразование положения координат мыши щелкнуть в индекс сетки if (xindex <0 || xindex> rows || yindex <0 || yindex> cols) // пьеса для шахма выпадает за пределы пакета и не может быть возвращена; if (findchess (xindex, yindex)) // шахматная часть уже существует в положении x, y, поэтому вы не можете быть возвращены; Точка ch = новая точка (xIndex, yindex, isback? Color.black: color.white); шахматный список [chesscount ++] = CH; Repaint (); // Уведомление системы о перекраске if (iSwin ()) {String msg = string.format ("Поздравляю, %s win ~", colorname); Joptionpane.showmessagedialog (это, msg); GameOver = true; } else if (chesscount == (cols+1)*(Rows+1)) {String msg = string.format ("Шахматный барабан довольно хороший, великий ~"); Joptionpane.showmessagedialog (это, msg); GameOver = true; } isback =! isback; }3.5 Нарисуйте шахматную доску, шахматы и красные рамки
public void paintcomponent (Graphics g) {super.paintcomponent (g); // нарисовать шахматную доску для (int i = 0; i <= rosces; i ++) {// нарисовать горизонтальную линию G.drawline (Margin, Margin+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, margin+rows*grid_span); }/*Нарисуйте шахматные части*/for (int i = 0; i <chesscount; i ++) {int xpos = шахматный список [i] .getx ()*grid_span+margin; // x координаты сетки сетки int ypos = chasesslist [i] .gety ()*grid_span+margin; g.setcolor (Chesslist [i] .getColor ()); // Установить цвет g.filloval (xpos-point.diameter/2, ypos-point.diameter/2, point.diameter, point.diameter); if (i == chesscount-1) {g.setcolor (color.red); // отмечать последнюю часть как Red g.drawrect (xpos-point.diameter/2, ypos-point.diameter/2, point.diameter, point.diameter); }}3.6 Судья победа или потеря
/*Судья, какая сторона выигрывает*/private boolean iswin () {int continueCount = 1; // Количество непрерывных шахматных произведений для (int x = xIndex-1; x> = 0; x-) {// Ищите цвет c = isback? Color.black: color.white; if (getChess (x, yindex, c)! = null) {continueCount ++; } else Break; } for (int x = xIndex+1; x <= rows; x ++) {// ищите цвет c = isback? Color.black: color.white; if (getChess (x, yindex, c)! = null) {continueCount ++; } else Break; } if (continueCount> = 5) {// Судить, количество записей больше или равно пять, что означает, что эта сторона выигрывает возврат true; } else ContinuEcount = 1; // for (int y = yindex-1; y> = 0; y-) {// поиск вертикально до цвета c = isback? Color.black: color.white; if (getChess (xindex, y, c)! = null) {continueCount ++; } else Break; } for (int y = yindex+1; y <= rows; y ++) {// посмотрите вниз в вертикальном направлении Color c = isback? Color.black: color.white; if (getChess (xindex, y, c)! = null) {continueCount ++; } else Break; } if (continueCount> = 5) {// Судить, количество записей больше или равно пять, что означает, что эта сторона выигрывает возврат true; } else ContinuEcount = 1; // for (int x = Xindex+1, y = yindex-1; y> = 0 && x <= cols; x ++, y-) {// посмотрите вниз на нижний правый цвет c = isback? Color.black: color.white; if (getChess (x, y, c)! = null) {continueCount ++; } else Break; } for (int x = xindex-1, y = yindex+1; y <= rows && x> = 0; x-, y ++) {// ищите цвет c = isback? Color.black: color.white; if (getChess (x, y, c)! = null) {continueCount ++; } else Break; } if (continueCount> = 5) {// Судить, количество записей больше или равно пять, что означает, что эта сторона выигрывает. Вернуть истину; } else ContinuEcount = 1; // for (int x = xIndex-1, y = yindex-1; y> = 0 && x> = 0; x-, y-) {// ищите цвет c = isback? Color.black: color.white; if (getChess (x, y, c)! = null) {continueCount ++; } else Break; } for (int x = xIndex+1, y = yindex+1; y <= Rows && x <= cols; x ++, y ++) {// ищите цвет c = isback? Color.black: color.white; if (getChess (x, y, c)! = null) {continueCount ++; } else Break; } if (continueCount> = 5) {// Судить, количество записей больше или равно пять, что означает, что эта сторона выигрывает возврат true; } else ContinuEcount = 1; вернуть ложь; }3.7 Появляется соответствующая окно сообщений (внутри функции нажатия мыши)
if (iswin ()) {string msg = string.format ("поздравляю, %s win ~", colorname); Joptionpane.showmessagedialog (это, msg); GameOver = true; } else if (chesscount == (cols+1)*(Rows+1)) // Track {String msg = string.format («Шахматный барабан довольно хорош, Great ~»); Joptionpane.showmessagedialog (это, msg); GameOver = true; }3.8 Функция, используемая выше, чтобы определить, есть ли шахматы в определенной точке
Private Boolean Findchess (int x, int y) {for (point c: chesslist) {if (c! = null && c.getx () == x && c.gety () == y) вернуть true; } вернуть false; }3.9. Поскольку этот класс шахматной доски реализует монселистенеринг для прослушивания мыши, все методы в интерфейсе должны быть переписаны. Другие методы следующие
@Override public void mouseClicked (mouseevent e) {// называется, когда кнопка мыши нажимается (нажима и выпущена) на компоненте} @Override public void mousereeleseleade (mouseevent e) {/// Вызывается, когда мышь выпускается на компоненте} @Override publice -mouseEnted (mouseevent e) {//////componer use {////componer {////componer publice publiceed (mouseevent E) {//////componte publice publiceed (mouseevent e) {/////componte publice publiceed (mouseevent e). @Override public void mouseexited (mouseevent e) {// называется, когда мышь покидает компонент}4. Результаты работы
V. Сводка кода
В общей сложности игра имеет три класса, один-интерфейс StartchessJframe, один-шахматная шахматная доска для шахматной доски, а другой-точка класса для шахмат-субъекта
5.1StartChessJframe Class
пакет Chess.lcc.com; импортировать javax.swing.*; импортировать java.awt.event.*; Импорт java.awt.*; /** Основная структура Gozi, класс запуска программы*/public class startchessjframe extends jframe {private Chessboard Chessboard; // Fight Panel Partin Panel Панель панели; // Панель панели инструментов Private Partbutton; // Установите кнопку Partting Blactbutton; // Set кнопка STARTED SETTALDERENDALERENTORENDELON Goji "); // Установить заголовок Chessboard = new Chessboard (); // Инициализировать объект панели, создать и добавить меню myitemlistener lis = new MyItemListener (); // Инициализируйте кнопку события для прослушивания внутреннего класса. Backbutton = новая кнопка («Ответить»); exitbutton = new Button ("exit"); // инициализация инструментов. Toolbar.Add (startButton); toolbar.add (exitbutton); // добавить три кнопки в панель инструмента startbutton.addactionListener (LIS); Backbutton.addactionListener (LIS); exitbutton.addactionListener (LIS); // Зарегистрируйте три кнопки события для прослушивания для события Add (панель инструментов, borderlayout.south); // расположение панели инструментов к югу от интерфейса, то есть добавить (chessboard); // Добавить объект панели в форму setdefaultcloseoperation (jframe.exit_on_close); // set oblective eventcleseoperation (jframe.exit_on_clse); Частный класс myitemlistener реализует ActionListener {public void actionPerformed (actionEvent e) {Object obj = e.getSource (); // Получить источник события if (obj == startbutton) {System.out.println ("перезапустить ..."); // start // jfiveframe.this inner class class class class class shessboard. } else if (obj == exitButton) {System.Exit (0); // Завершать приложение} else if (obj == Backbutton) {System.out.println ("Ответить в шахмат ...»); // ответить на chessboard.goback (); }}} public static void main (string [] args) {startChessJframe f = new StartchessJFrame (); // Создать основной кадр f.setVisible (true); // Показать основной кадр}} 5.2Chessboard Class
пакет Chess.lcc.com; импортировать javax.swing.*; Импорт java.awt.*; импортировать java.awt.event.mouselistener; импортировать java.awt.event.mousemotionlistener; Импорт java.awt.event.mouseeVent; /*Группо-чаш-класс Класс*/Общедоступный шахматный класс расширяет jpanel реализует MouseListener {public static int margin = 30; // Barge public static int int grid_span = 35; // расстояние между сетками. Точка [(Rows+1)*(cols+1)]; // Инициализировать каждый элемент массива в Null Boolean isback = true; // старт по умолчанию - черный шахмат First Gameover = false; // - это игра, закончившаяся int chesscount; // Количество частей на текущей шахматной доске int xindex, yindex; // Индекс пьесы. setbackground (color.light_gray); // Установить цвет фона на желтый addmouseListener (это); // Добавить слушатель событий addMouseMotionListener (new MouseMotionListener () {// анонимный внутренний класс @Override public void mousemoved (mouseevent e) {int x1 = (e.getx ()-margin+grid_span/2); y1 = (e.gety ()-margin+grid_span/2)/grid_span; // преобразовать координатную позицию щелчка мыши в индекс сетки if (x1 <0 || x1> Rows || y1 <0 || y1> Cols || Gameover || findchess (x1, y1) {//hame find it the specess bess Beess Bess Beess Bess Bess Bess Besse; сброшены; }/*Нарисуйте*/public void paintcomponent (графика g) {super.paintcomponent (g); // Нарисуйте шахматную доску для (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, margin+row*grid_span); }/*Нарисуйте шахматные кусочки*/for (int i = 0; i <chesscount; i ++) {int xpos = шахматный список g.setcolor (Chesslist [i] .getColor ()); // Установить цвет g.filloval (xpos-point.diameter/2, ypos-point.diameter/2, point.diameter, point.diameter); if (i == chesscount-1) {g.setcolor (color.red); // Зарегистрируйте последнюю часть как Red g.drawrect (xpos-point.diameter/2, ypos-point.diameter/2, point.diameter, point.diameter); }}} @Override public void mousepressed (mouseevent e) {// if (gameover) вызывается, когда кнопка мыши нажимается на компонент // игра закончилась, вы не можете вернуть ее; String colorname = isback? «Черный»: «Белые шахматы»; xindex = (e.getx ()-margin+grid_span/2)/grid_span; yindex = (e.gety ()-margin+grid_span/2)/grid_span; // преобразование положения координат мыши щелкнуть в индекс сетки if (xindex <0 || xindex> rows || yindex <0 || yindex> cols) // пьеса для шахма выпадает за пределы пакета и не может быть возвращена; if (findchess (xindex, yindex)) // шахматная часть уже существует в положении x, y, поэтому вы не можете быть возвращены; Точка ch = новая точка (xIndex, yindex, isback? Color.black: color.white); шахматный список [chesscount ++] = CH; Repaint (); // Уведомление системы о перекраске if (iSwin ()) {String msg = string.format ("Поздравляю, %s win ~", colorname); Joptionpane.showmessagedialog (это, msg); GameOver = true; } else if (chesscount == (cols+1)*(Rows+1)) {String msg = string.format ("Шахматный барабан довольно хороший, великий ~"); Joptionpane.showmessagedialog (это, msg); GameOver = true; } isback =! isback; } @Override public void mouseeClicked (mouseevent e) {// называется, когда кнопка мыши нажимается (нажима и выпущена) на компоненте} @Override public void mousereedureed (mouseevent e) {/// называется, когда кнопка мыши выпущена на компонент} void publiceed (mouseevent e) {///////contreed e void void void void void void void void void void void void void void void void void void e). Компонент} @Override public void mouseexited (mouseevent e) {// называется, когда мышь покидает компонент} private boolean findchess (int x, int y) {for (point c: chesslist) {if (c! = null && c.getx () == x && c.gety () == y) вернуть true; } вернуть false; }/*Судья, какая боковая победа*/private boolean iswin () {int continueCount = 1; // Количество непрерывных шахматных произведений для (int x = xIndex-1; x> = 0; x-) {// Ищите цвет c = isback? Color.black: color.white; if (getChess (x, yindex, c)! = null) {continueCount ++; } else Break; } for (int x = xIndex+1; x <= rows; x ++) {// ищите цвет c = isback? Color.black: color.white; if (getChess (x, yindex, c)! = null) {continueCount ++; } else Break; } if (continueCount> = 5) {// Судить, количество записей больше или равно пять, что означает, что эта сторона выигрывает возврат true; } else ContinuEcount = 1; // for (int y = yindex-1; y> = 0; y-) {// поиск вертикально до цвета c = isback? Color.black: color.white; if (getChess (xindex, y, c)! = null) {continueCount ++; } else Break; } for (int y = yindex+1; y <= rows; y ++) {// посмотрите вниз в вертикальном направлении Color c = isback? Color.black: color.white; if (getChess (xindex, y, c)! = null) {continueCount ++; } else Break; } if (continueCount> = 5) {// Судить, количество записей больше или равно пять, что означает, что эта сторона выигрывает возврат true; } else ContinuEcount = 1; // for (int x = Xindex+1, y = yindex-1; y> = 0 && x <= cols; x ++, y-) {// посмотрите вниз на нижний правый цвет c = isback? Color.black: color.white; if (getChess (x, y, c)! = null) {continueCount ++; } else Break; } for (int x = xindex-1, y = yindex+1; y <= rows && x> = 0; x-, y ++) {// ищите цвет c = isback? Color.black: color.white; if (getChess (x, y, c)! = null) {continueCount ++; } else Break; } if (continueCount> = 5) {// Судить, количество записей больше или равно пять, что означает, что эта сторона выигрывает. Вернуть истину; } else ContinuEcount = 1; // for (int x = xIndex-1, y = yindex-1; y> = 0 && x> = 0; x-, y-) {// ищите цвет c = isback? Color.black: color.white; if (getChess (x, y, c)! = null) {continueCount ++; } else Break; } for (int x = xIndex+1, y = yindex+1; y <= Rows && x <= cols; x ++, y ++) {// ищите цвет c = isback? Color.black: color.white; if (getChess (x, y, c)! = null) {continueCount ++; } else Break; } if (continueCount> = 5) {// Судья, что количество записей больше или равно пять, это означает, что эта сторона выигрывает возвращает true; } else ContinuEcount = 1; вернуть ложь; } частная точка getChess (int xIndex, int yindex, color) {for (point c: chesslist) {if (c! = null && c.getx () == xindex && c.gety () == yindex && c.getcolor () == color) return c; } return null; } public void restartGame () {// очистить шахматный элемент для (int i = 0; i <Chesslist.length; i ++) шахматный список [i] = null; /*Восстановите значение переменной, связанную с игрой,*/ isback = true; gameover = false; // заканчивает ли игра chesscount = 0; // количество шахматных произведений на текущей плате - Repaint (); } public void goback () {if (chesscount == 0) return; шахматный список [chesscount-1] = null; chesscount--; if (chesscount> 0) {xindex = chesslist [chesscount-1] .getx (); yindex = шахматный список [chesscount-1] .gety (); } isback =! isback; Repaint (); } // Dimension: прямоугольник публичного измерения getPreferredSize () {return New Dimension (Margin*2+grid_span*Cols, Margin*2+Grid_span*Rows); }} 5.3point Class
пакет Chess.lcc.com; Импорт java.awt.*; Общедоступный класс точка {private int x; // x index value Chess Piece в шахматной плате Private int y; // y index value чайной части в шахматной доске частного цвета цвета; // Цвет общедоступного статического диаметра int = 30; // Диаметр Общественной точки (int x, int y, color) {this.x = x; this.y = y; this.color = color; } // Получить значение x индекса шахматного часа в шахматной доске public int getx () {return x; } // Получить значение индекса y шахматного шва в шахматной доске public int getey () {return y; } // Получить шахматный цвет цвет публичного цвета getColor () {return Color; }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.