Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пример Курсовой Информатика-Программирование

.docx
Скачиваний:
24
Добавлен:
03.06.2015
Размер:
211.94 Кб
Скачать

{

/**

* сам таймер, который запускает итерации алгоритма

*/

public Timer RunsTimer;

/**

* возможные ходы (X)

*/

private final int EnslavedX[]={-1,-2,-2,-1,1,2,2 ,1};// возможные ходы

/**

* возможные ходы (Y)

*/

private final int EnslavedY[]={-2,-1,1 ,2,2,1,-1,-2};

/**

* шахматное поле

*/

private int Ch [][]=null;

/**

* массив возможности хода (bool)

*/

private int ChBool [];

/**

* массив рейтинга возможных ходов

*/

private int ChReit [];

/**

* то же самое что и ChBool но используется при вычислении рейтинга

*/

private int ChBoolReit;

/**

* x и y временной псефдо коня который используется при вычислении рейтинга

*/

private int xhR, yhR;

/**

* размеры поля

*/

private int xCh, yCh;

/**

* текуще координаты коня

*/

private int xh, yh;

/**

* b-обчный bool

*/

private int b=0;

/**

* а-число сделанных ходов

*/

private int a=1;

/**

* номер хода в массивах Enslaved у которого наименьший рейтинг

*/

private int NR=0;

/**

* временные данные

*/

private int tmp=0;

/**

* конструктор по умолчанию инициализирует шахматное поле для выполнения алгоритма(не графика)

*/

clRun()

{

Ch=new int[BoardDiagonal+1][BoardDiagonal+1];

};

/**

* начальная инициализация перед началом алгоритма

*/

public void RunsInit()

{

Ch=new int[BoardDiagonal+1][BoardDiagonal+1];

ChBool=new int[8];//массив возможности хода (bool)

ChReit=new int[8];//массив рейтинга возможных ходов

ChBoolReit=0;// то же самое что и ChBool но используется при вычислении рейтинга

xhR=0; yhR=0;//x и y временной псефдо коня который используется при вычислении рейтинга

xCh=BoardDiagonal; yCh=BoardDiagonal;//размеры поля

xh=Horse.CellPositionX+1; yh=Horse.CellPositionY+1;// текуще координаты коня

b=0; a=1; // b-обчный bool , а-число сделанных ходов

NR=0; //номер хода в массивах Enslaved у которого наименьший рейтинг

tmp=0; // временные данные

////for (int i = 0; i < xCh; i++)for (int i2 = 0; i2 < yCh; i2++) Ch [i][i2] =0; //обнуление массива

Ch [xh][yh]=1;

RunsMetkaCells(Horse.CellPositionX,Horse.CellPositionY,1);

};

/**

* Ииц. и запускает таймер, и выполнение итераций алгорима

* @param leadTime задержка таймера (интервал) между выполнением итераций, значение только >0

*/

public void RunTimer(int leadTime)

{

RunsImageInit();

RunsInit();

actionTimer=new ActionTimer();

RunsTimer = new Timer(leadTime, actionTimer);

RunsTimer.start();

};

/**

* экземпляр слушателя события активации (срабатывания) таймера

*/

ActionTimer actionTimer=null;

/**

* Слушатель события активации (срабатывания) таймера, кот. выполняет итерации алгоритма

* @author Машунечка

*

*/

class ActionTimer implements ActionListener

{

public void actionPerformed(ActionEvent arg0)

{

if(b==0&&a!=1)//условия окончания действия алгоритма

{

RunsTimer.stop();//останавливает таймер

return;//прерывает выполнения функции

};

{

b=0;

tmp=8;

a++;///наращиваем число сделланных ходов, который показывает порядок обхода доски(отображается на пройденной клетке)

for (int i = 0; i <= 7; i++) ChReit [i] =0; //обнуление

for (int i = 0; i <= 7; i++) // вычисление возможности хода с позиции лошадки

{

//заполняем массив возможности хода, при ходе в пределах поля и на непройденную ячейку

ChBool[i]=1;

if (xh+EnslavedX[i]<1) ChBool[i]=0;

if (xh+EnslavedX[i]>xCh) ChBool[i]=0;

if (yh+EnslavedY[i]<1) ChBool[i]=0;

if (yh+EnslavedY[i]>yCh) ChBool[i]=0;

if ((xh+EnslavedX[i]<=xCh)&&(yh+EnslavedY[i]<=yCh)&&(xh+EnslavedX[i]>=0)&&(yh+EnslavedY[i]>=0)&&(Ch[xh+EnslavedX[i]] [yh+EnslavedY[i]] != 0))

ChBool[i]=0;

};

for (int i = 0; i <= 7; i++) //начисление рейтинга в массив ChReit

{

if (ChBool[i]==1)//если ход возможен то

{

xhR=xh+EnslavedX[i];

yhR=yh+EnslavedY[i];

for (int i2 = 0; i2 <= 7; i2++)

{

ChBoolReit=1;

if (xhR+EnslavedX[i2]<1) ChBoolReit=0;

if (xhR+EnslavedX[i2]>xCh) ChBoolReit=0;

if (yhR+EnslavedY[i2]<1) ChBoolReit=0;

if (yhR+EnslavedY[i2]>yCh) ChBoolReit=0;

if ((xhR+EnslavedX[i2]<=xCh)&&(yhR+EnslavedY[i2]<=yCh)&&(xhR+EnslavedX[i2]>=0)&&(yhR+EnslavedY[i2]>=0)&&(Ch[xhR+EnslavedX[i2]] [yhR+EnslavedY[i2]] != 0)) ChBoolReit=0;

ChReit [i]= ChReit [i]+ ChBoolReit;

};

}

};

for (int i = 0; i <= 7; i++)// выявление самого низкого рейтинга

{

if (ChReit [i]<tmp)

{

if (ChBool[i]==1)

{

tmp=ChReit [i];

NR=i;

}

};

}

for (int i = 0; i <= 7; i++) b=b+ChBool[i];//сколько ходов возможно (но всёравно b используется как бул в котором результат отличный от 0 =1)

if (b!=0) //делаем ход (вы не поверите, конём!)

{

xh=xh+EnslavedX[NR];

yh=yh+EnslavedY[NR];

Ch [xh][yh]=a;

RunsMetkaCells(xh-1, yh-1,a);

Horse.HorseIsMove(xh-1, yh-1);

};

};

};

};/// end ActionTimer

};

}

clFrame.java

//// version 8 final recomment

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.util.Scanner;

import javax.imageio.ImageIO;

import javax.swing.*;

/**

* Класс окна программы который содержит меню и доску (clBoard)

*/

public class clFrame extends JFrame

{

private static final long serialVersionUID = 1L;

/**

* Конструктор по умолчанию (для фрейма прогр)

*/

clFrame()

{

super("Ход конем - Таранова Мария АСУ-09-2");/// заголовок окна который направляется конструктору предка

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/// устанавливаем событие на закрытие окна JFrame

this.setSize(400, 300);/// Размер по умолчанию для окна

this.setVisible(true);/// устанавливает Видимость окна программы (обязательно)

this.setMenuBar(menubar);/// добавляет меню бар (с элементами меню)

/// создание модального диалога "Создание шахматной доски с конем..."

dialogBoard = new DialogBoard(this,"Создание шахматной доски с конем...",true);

};

/**

* Конструктор с другим заголовком окна

* @param Title Новый заголовок окна

*/

clFrame(String Title)

{

this();/// вызываем Конструктор по умолчанию

this.setTitle(Title);/// устанавливаем новый заголовок для окна

};

/**

* Конструктор с заголовком и размерами для окна

* @param Title Новый заголовок окна

* @param width Ширина окна в пикселях

* @param height Высота окна в пикселях

*/

clFrame(String Title, int width, int height)

{

this(Title);/// устанавливаем новый заголовок для окна

this.setSize(width, height);/// устан. новые размеры

};

/**

* Инициализация добавления готовой доски(Board внутри JScrollPane(для прокрутки)) к окну программы

*/

private void initPanelBoard()

{

if(Board!=null)

{

scrollPanel=new JScrollPane(Board);

this.add(scrollPanel);

};

this.validate();

};

/**

* Экземпляр меню для программы

*/

clMenuBar menubar = new clMenuBar();

/**

* Класс меню для Программы, содержит все пункты, и обработку действий меню

*/

class clMenuBar extends MenuBar

{

private static final long serialVersionUID = 1L;

/**

* Конструктор по умолчанию, который проводит обязательную инициализацию пунктов меню

*/

clMenuBar()

{

// добавляем меню "Доска" и его подпункты

this.add(mBoard);

mNew.addActionListener(menuEvent);// добавляем слушателя активации пункта меню

mBoard.add(mNew);//добавляем пункт к соотв. меню

/// разделительная черта в меню

mBoard.addSeparator();

mExit.addActionListener(menuEvent);// добавляем слушателя активации пункта меню

mBoard.add(mExit);//добавляем пункт к соотв. меню

// добавляем меню "Выполнить обход"

this.add(mHorse);

mRun.addActionListener(menuEvent);// добавляем слушателя активации пункта меню

mHorse.add(mRun);//добавляем пункт к соотв. меню

mStop.addActionListener(menuEvent);// добавляем слушателя активации пункта меню

mHorse.add(mStop);//добавляем пункт к соотв. меню

mClear.addActionListener(menuEvent);// добавляем слушателя активации пункта меню

mHorse.add(mClear);//добавляем пункт к соотв. меню

mColor.addActionListener(menuEvent);// добавляем слушателя активации пункта меню

mHorse.add(mColor);//добавляем пункт к соотв. меню

/// Заранее отключаем лишние пунты меню, ведь доска еще изначально не создана,

/// затем после создания доски с конем они будут включены

mColor.setEnabled(false);

mClear.setEnabled(false);

mRun.setEnabled(false);

mStop.setEnabled(false);

};

/// объявление меню и подменю:

/**

* Меню "Доска" на менюбаре

*/

public Menu mBoard = new Menu("Доска");

/**

* Пункт меню("Доска") "Создать доску"

*/

public MenuItem mNew = new MenuItem("Создать доску");

/**

* Пункт меню("Доска") "Выход"

*/

public MenuItem mExit = new MenuItem("Выход");

/**

* Меню "Выполнить обход" на менюбаре

*/

public Menu mHorse = new Menu("Выполнить обход");

/**

* Пункт меню("Выполнить обход") "Выполнить обход"

*/

public MenuItem mRun = new MenuItem("Выполнить обход");

/**

* Пункт меню("Выполнить обход") "Остановить обход"

*/

public MenuItem mStop = new MenuItem("Остановить обход");

/**

* Пункт меню("Выполнить обход") "Очистить обход"

*/

public MenuItem mClear = new MenuItem("Очистить обход");

/**

* Пункт меню("Выполнить обход") "Выбрать цвет для обхода"

*/

public MenuItem mColor = new MenuItem("Выбрать цвет для обхода");

/**

* Экземпляр слушателя событии меню программы

*/

MenuEvent menuEvent=new MenuEvent();

/**

* Класс слушателя событий меню,

* все пункты меню различаюся по функции getSource() которая возвращает ссылку на объект который "создал(вызвал) событие"

* , содержит также действия по выполнению пунктов меню.

*/

class MenuEvent implements ActionListener

{

public void actionPerformed(ActionEvent arg0)

{

// Получаем ссылку на объект который вызвал событие

Object ob=arg0.getSource();

// начинаем сравнивать его с пунктами меню:

/// Создать доску

if(ob==mNew)

{

// запускаем модальные диалог (пока он есть все остальное(окна и другое) в программе блокируется)

dialogBoard.runDialogBoard();

// добавляем созданую диалогом доску к окну

initPanelBoard();

}

else if(ob==mClear)

{

if(Board!=null)

{

Board.RunsImage=null;/// обнуляем его (слой(изобранение) с числами(порядком обхода))

Board.RunsImageInit();/// функция автоматом создает пустое прозрачное изображение

Board.RePaint();/// перепроисовка доски(панели)

};

}

else if(ob==mExit)

{

System.exit(0);// выход из программы (0 - без ошибок)

}

else if(ob==mRun)

{

// если доска создана, то...

if(Board!=null)

{

int timer=400;/// значение таймера итераций по умолчанию

// JOptionPane - стандартный модальный диалог

// showInputDialog - диалог для ввода, QUESTION_MESSAGE - это его тип (вид, стиль, тип иконки)

String timerStr= JOptionPane.showInputDialog(null, "Введите задержку передвижения коня в миллисекундах.\n" +

"Допустимые значения от 0 до 30 секунд (30000 мс).\n" +

"Общее время выполнения равно количеству клеток на поле * задержку.\n" +

"Пример: 1 секунда = 1000 миллисекунд.\n" +

"Рекомендуемое значение 400 миллисекунд.",

"Выполнение обхода конем шахматной доски...", JOptionPane.QUESTION_MESSAGE);

/// timerStr приемник того что ввел пользователь в диалог

/// может быть null если была отмена

if(timerStr!=null)

{

/// создаем сканнер для перевода строки в число - количество мс задержки

Scanner scanner=new Scanner(timerStr);

/// проверяем присутствие целого числа

if(scanner.hasNextInt()==true)

{

/// получаем его в переменную таймер

timer=scanner.nextInt();

/// проверяем на правильность значения таймера

if((timer>=0)&&(timer<=30000))

{

// запускаем итерации алгоритма по заданному интервалу

Board.Runs.RunTimer(timer);

}

else

{

JOptionPane.showMessageDialog(null, "Было введено недопустимое значение для времени задержки \nпередвижения коня в миллисекундах.\nОперация не выполнена.", "Операция отменена", JOptionPane.ERROR_MESSAGE);

return;/// прерывание(обрывание выполнения) функции

};

}

else

{

JOptionPane.showMessageDialog(null, "Было введено недопустимое значение (не целое число)\n для времени задержки передвижения коня в миллисекундах.\nОперация не выполнена.", "Операция отменена", JOptionPane.ERROR_MESSAGE);

return;/// прерывание(обрывание выполнения) функции

};

}

else

{

JOptionPane.showMessageDialog(null, "Был отменен ввод времени задержки \nпередвижения коня в миллисекундах.\nОперация не выполнена.", "Обход доски отменен...", JOptionPane.WARNING_MESSAGE);

return;/// прерывание(обрывание выполнения) функции

};

};

}

else if(ob==mColor)

{

/// Color temp - приемник цвета выбранного на JColorChooser, может быть null если была отмена

// Board.RunsColor текущий цвет подается как выбранный по умолчанию на панели

if(Board!=null)/// тк работаем с доской ("цвет RunsColor внутри неё")

{

Color temp=JColorChooser.showDialog(null, "Выбор цвета для номеров клеток обхода доски", Board.RunsColor);

if((temp!=null))

{

Board.RunsColor=temp;

};

};/// end Board!=null

}

else if(ob==mStop)

{

// Останавливаем таймер и выполнение итераций алгоритма

if(Board!=null&&Board.Runs!=null&&Board.Runs.RunsTimer!=null)

{

Board.Runs.RunsTimer.stop();// стоп

};

};

};

};

};

/**

* Панель с полосами прокрутки

*/

JScrollPane scrollPanel=null;

/**

* Экземпляр шахматной доски

*/

clBoard Board=null;

/**

* Экземпляр диалога создания доски

*/

DialogBoard dialogBoard=null;

/**

* Сам диалог создания доски, подготавливает агрументы (параметры) для конструктора clBoard и загружаем изображения из файла

*

*/

class DialogBoard extends JDialog

{

private static final long serialVersionUID = 1L;

/**

* Конструктор создания модального диалога создания доски

* @param owner владелец, фрейм к которому привязан диалог

* @param title заголовок диалога

* @param modal модальность, лучше true

*/

DialogBoard(Frame owner, String title, boolean modal)

{

super(owner, title, modal);

// выставляем размер окна диалога

this.setSize(450, 320);

// сбрасываем менеджер размещения, тк все элементы будем распологать вручную по координатам

this.setLayout(null);

// иниц отдельных элементов

InitSpinners();

InitCells();

reSource();

// значения по умолчанию

BoardSpinner.setValue(new Integer(8));

CellsSpinner.setValue(new Integer(80));

HorseSpinnerX.setValue(new Integer(2));

HorseSpinnerY.setValue(new Integer(2));

CellFirst.setSelected(true);

BoardCellsHorse.setSelected(true);

};

/**

* Спиннер для: "Размер поля"

*/

JSpinner BoardSpinner=new JSpinner();

JLabel BoardLabel=new JLabel("Размер поля:");

/**

* Спиннер для: "Размер клетки"

*/

JSpinner CellsSpinner=new JSpinner();

JLabel CellsLabel=new JLabel("Размер клетки:");

JSpinner HorseSpinnerX=new JSpinner();

JSpinner HorseSpinnerY=new JSpinner();

JLabel HorseLabel=new JLabel("Положение коня:");

JLabel HorseX=new JLabel("X:");

JLabel HorseY=new JLabel("Y:");

// кнопки

JButton BoardCellsBlackColor=new JButton("Выбрать фоновый цвет для темных клеток");

JButton BoardCellsWhiteColor=new JButton("Выбрать фоновый цвет для светлых клеток");

// галочки и кнопки загрузить

JCheckBox BoardCellsBlack=new JCheckBox("Изображение для темных клеток из файла");

JButton BoardCellsBlackImage=new JButton("Загрузить...");

JCheckBox BoardCellsWhite=new JCheckBox("Изображение для светлых клеток из файла");

JButton BoardCellsWhiteImage=new JButton("Загрузить...");

JCheckBox BoardCellsHorse=new JCheckBox("Изображение для коня из файла");

JButton BoardCellsHorseImage=new JButton("Загрузить...");

JCheckBox CellsStretch=new JCheckBox("Растягивать изображение на клетке");

JCheckBox CellFirst=new JCheckBox("Первая клетка на поле светлая");

/**

* фоновый цвет по умолчанию для светлых клеток

*/

Color CellsWhite=Color.white;

/**

* фоновый цвет по умолчанию для темных клеток

*/

Color CellsBlack=Color.black;

JButton BoardRun=new JButton("Создать шахматную доску с конем");

JButton BoardCancel=new JButton("Отмена (Закрыть)");

/// изображения элементов доски: конь и клетки

BufferedImage ImageCellsBlack=null;

BufferedImage ImageCellsWhite=null;

BufferedImage ImageCellsHorse=null;

/// путь к файлам изображений

String StrCellsBlack=null;

String StrCellsWhite=null;

String StrCellsHorse=null;

/**

* Файловый диалог для выбора изображения для использования на доске

*/

FileDialog OpenImage=new FileDialog(this,"Загрузка изображения из файла",FileDialog.LOAD);

/**

* Иниц. на диалоге спиннеров и связанных элементов

*/

void InitSpinners()

{

// Bounds: коодринаты левого верхнего угла, ширина и высота область

BoardLabel.setBounds(10, 5, 100, 25);

// Устанавливается шрифт со измененным размером

this.setFont(this.getFont().deriveFont((float)14.0));

BoardLabel.setFont(getFont());

this.add(BoardLabel);/// добавляем на диалог элемент

BoardSpinner.setBounds(125, 5, 60, 25);

this.add(BoardSpinner);/// добавляем на диалог элемент

CellsLabel.setBounds(10, 40, 100, 25);

CellsLabel.setFont(getFont());

this.add(CellsLabel);/// добавляем на диалог элемент

CellsSpinner.setBounds(125, 40, 60, 25);

this.add(CellsSpinner);/// добавляем на диалог элемент

HorseLabel.setBounds(240, 15, 150, 25);

HorseLabel.setFont(getFont());

this.add(HorseLabel);/// добавляем на диалог элемент

HorseX.setBounds(240, 40, 50, 25);

HorseX.setFont(getFont());

this.add(HorseX);/// добавляем на диалог элемент

HorseSpinnerX.setBounds(260, 40, 50, 25);

this.add(HorseSpinnerX);/// добавляем на диалог элемент

HorseY.setBounds(340, 40, 50, 25);

HorseY.setFont(getFont());

this.add(HorseY);/// добавляем на диалог элемент

HorseSpinnerY.setBounds(360, 40, 50, 25);

this.add(HorseSpinnerY);/// добавляем на диалог элемент

};

void InitCells()

{

// первая ячейка белая

CellFirst.setBounds(10, 65, 250, 25);

CellFirst.setFont(getFont());

this.add(CellFirst);

// растягивать(подгонять) изображение на клетке

CellsStretch.setBounds(10, 90, 280, 25);

CellsStretch.setFont(getFont());

this.add(CellsStretch);

// выбор фонового цвета для темных клеток

BoardCellsBlackColor.setBounds(14, 120, 300, 20);

BoardCellsBlackColor.addActionListener(actionButton);

this.add(BoardCellsBlackColor);

// выбор фонового цвета для светлых клеток

BoardCellsWhiteColor.setBounds(14, 145, 300, 20);

BoardCellsWhiteColor.addActionListener(actionButton);

this.add(BoardCellsWhiteColor);

//**********************

// Изображения для элементов доски:

//**********************

BoardCellsBlack.setBounds(10, 170, 315, 25);

BoardCellsBlack.setFont(getFont());

this.add(BoardCellsBlack);

BoardCellsBlackImage.setBounds(325, 175, 110, 18);

BoardCellsBlackImage.addActionListener(actionButton);

this.add(BoardCellsBlackImage);

//***********************

BoardCellsWhite.setBounds(10, 195, 315, 25);

BoardCellsWhite.setFont(getFont());

this.add(BoardCellsWhite);

BoardCellsWhiteImage.setBounds(325, 200, 110, 18);

BoardCellsWhiteImage.addActionListener(actionButton);

this.add(BoardCellsWhiteImage);

//***********************

BoardCellsHorse.setBounds(10, 220, 315, 25);

BoardCellsHorse.setFont(getFont());

this.add(BoardCellsHorse);

BoardCellsHorseImage.setBounds(325, 225, 110, 18);

BoardCellsHorseImage.addActionListener(actionButton);

this.add(BoardCellsHorseImage);

//***********************

// создать доску

BoardRun.setBounds(10, 255, 255, 25);

BoardRun.addActionListener(actionButton);

this.add(BoardRun);

// отмена

BoardCancel.setBounds(275, 255, 160, 25);

BoardCancel.addActionListener(actionButton);

this.add(BoardCancel);

};

/**

* Иниц. значениями по умолчанию ("обнуление") графических ресурсов

*/

void reSource()

{

ImageCellsBlack=null;

ImageCellsWhite=null;

ImageCellsHorse=null;

CellsWhite=Color.white;

CellsBlack=Color.black;

};

/**

* Запуск диалога на выполнение

*/

public void runDialogBoard()

{

ImageCellsBlack=null;

ImageCellsWhite=null;

ImageCellsHorse=null;

BoardCellsHorse.setSelected(true);

this.setVisible(true);

};

/**

* экземпляр слушателя событий кнопки

*/

ActionButton actionButton=new ActionButton();

/**

* Класс слушателя событий кнопки на диалоге создания доски

*

*/

class ActionButton implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

Object ob=e.getSource();

Color tempColor=null;

if(ob==BoardCellsWhiteColor)///"Выбрать фоновый цвет для светлых клеток"

{

/// вызываем диалог выбора цвета, где tempColor приёмник выбранного цвета, возможно null если была отмена

tempColor=JColorChooser.showDialog(null,BoardCellsWhiteColor.getText()+"...", CellsWhite);

if(tempColor!=null)

{

CellsWhite=tempColor;

};

}

else if(ob==BoardCellsBlackColor)///"Выбрать фоновый цвет для темных клеток"

{

/// вызываем диалог выбора цвета, где tempColor приёмник выбранного цвета, возможно null если была отмена

tempColor=JColorChooser.showDialog(null,BoardCellsBlackColor.getText()+"...", CellsBlack);

if(tempColor!=null)

{

CellsBlack=tempColor;

};

}

else if(ob==BoardRun)////"Создать шахматную доску с конем"

{

int BoardSize=((Integer)BoardSpinner.getValue()).intValue();

if(!((BoardSize>0)&&((BoardSize<=500))))

{

JOptionPane.showMessageDialog(null, "Введены не правильное значение "+BoardLabel.getText()+"\nДоступные значения: >=1 AND <=500","Ошибка "+getTitle()+"!!!", JOptionPane.ERROR_MESSAGE);

return;/// прерываем выполнения функции, но не скрываем модальный диалог

};

int CellsSize=((Integer)CellsSpinner.getValue()).intValue();

if(!((CellsSize>20)&&(CellsSize<1000)))

{

JOptionPane.showMessageDialog(null, "Введены не правильное значение "+CellsLabel.getText()+"\nДоступные значения: >20 AND <1000","Ошибка "+getTitle()+"!!!", JOptionPane.ERROR_MESSAGE);

return;/// прерываем выполнения функции, но не скрываем модальный диалог

};

// тк позиция коня отсчитывается внутри от 0 (нуля0, а люди считают с 1 (единицы), по этому вычитаем единицу

int HorseXcell=((Integer)HorseSpinnerX.getValue()).intValue()-1;// начальное положение коня по горизонтали (справа налево)

int HorseYcell=((Integer)HorseSpinnerY.getValue()).intValue()-1;// начальное положение коня по вертикали (сверху вниз)

if(!((HorseXcell>=0)&&(BoardSize>HorseXcell)&&(HorseYcell>=0)&&(BoardSize>HorseYcell)))

{

JOptionPane.showMessageDialog(null, "Введены не правильное значение "+HorseLabel+" X или Y"+"\nДоступные значения: >=1 AND =<Размер поля","Ошибка "+getTitle()+"!!!", JOptionPane.ERROR_MESSAGE);

return;/// прерываем выполнения функции, но не скрываем модальный диалог

};

/// создаем изображение светлой клетки, на основе фонового цвета + если было загруженно изображение

BufferedImage imageCellsWhite=new BufferedImage(CellsSize,CellsSize,BufferedImage.TYPE_3BYTE_BGR);

Graphics gWhite=imageCellsWhite.getGraphics();

gWhite.setColor(CellsWhite);

gWhite.fillRect(0, 0, CellsSize, CellsSize);

if(BoardCellsWhite.isSelected()==true)

{

if(ImageCellsWhite!=null)

{

gWhite.drawImage(ImageCellsWhite, 0, 0, null);

}

else

{

JOptionPane.showMessageDialog(null, "Ошибка загрузки "+BoardCellsWhite.getText()+"\nСнимите галочку или Загрузите изображение","Ошибка "+getTitle()+"!!!", JOptionPane.ERROR_MESSAGE);

return;

};

};

/// создаем изображение темной клетки, на основе фонового цвета + если было загруженно изображение

BufferedImage imageCellsBlack=new BufferedImage(CellsSize,CellsSize,BufferedImage.TYPE_3BYTE_BGR);

Graphics gBlack=imageCellsBlack.getGraphics();

gBlack.setColor(CellsBlack);

gBlack.fillRect(0, 0, CellsSize, CellsSize);

if(BoardCellsBlack.isSelected()==true)

{

if(ImageCellsBlack!=null)

{

gBlack.drawImage(ImageCellsBlack, 0, 0, null);

}

else

{

JOptionPane.showMessageDialog(null, "Ошибка загрузки "+BoardCellsBlack.getText()+"\nСнимите галочку или Загрузите изображение","Ошибка "+getTitle()+"!!!", JOptionPane.ERROR_MESSAGE);

return;

};

};

/// загружаем изображение коня, если его нету (null) то в классе clBoard рисуется красный квадрат

if(BoardCellsHorse.isSelected()==true)

{

if(ImageCellsHorse!=null)

{

}

else

{

JOptionPane.showMessageDialog(null, "Ошибка загрузки "+BoardCellsHorse.getText()+"\nСнимите галочку или Загрузите изображение","Ошибка "+getTitle()+"!!!", JOptionPane.ERROR_MESSAGE);

return;

}

};

/// создаем шахматную доску запуская конструктор с нужными проверенными параметрами

Board=new clBoard(BoardSize,CellsSize, CellsStretch.isSelected(), imageCellsWhite, imageCellsBlack, CellFirst.isSelected(), ImageCellsHorse, HorseXcell, HorseYcell);

/// включение пунктов меню

menubar.mNew.setEnabled(false);

menubar.mColor.setEnabled(true);

menubar.mClear.setEnabled(true);

menubar.mRun.setEnabled(true);

menubar.mStop.setEnabled(true);

// скрваем диалог и теперь мы работаем с окном

setVisible(false);

}

else if(ob==BoardCancel)///"Отмена"

{

setVisible(false);

}

else if(ob==BoardCellsBlackImage)///Изображение для темных клеток из файла

{

OpenImage.setDirectory(".");/// выбор текущей директории где работает программа

OpenImage.setTitle("Загрузка изображения темной клетки из файла...");/// заголовок

OpenImage.setFile("*.jpg;*.png");/// маска файлов изображений (которые точно откроются)

OpenImage.setVisible(true);// показываем диалог

String StrFile=OpenImage.getFile();// принимаем имя файла

String StrDir=OpenImage.getDirectory();// принимаем путь к директории

BufferedImage image=null;// изображение приёмник(temp image)

if((StrFile!=null)&&(StrDir!=null))

{

File ImageFile=new File(StrDir+StrFile);

/// если файл существует и его возможно прочитать то пробуем загрузить из него изображение

if(ImageFile.canRead())

{

try {

image = ImageIO.read(ImageFile);/// загружаем изображение в image (приемник)

} catch (IOException e1) {

e1.printStackTrace();

}

};

};/// end if

ImageCellsBlack=image;/// загрузили и сохраняем для дальнейшего использования...

}

else if(ob==BoardCellsWhiteImage)///"Изображение для светлых клеток из файла"

{

OpenImage.setDirectory(".");/// выбор текущей директории где работает программа

OpenImage.setTitle("Загрузка изображения светлой клетки из файла...");/// заголовок

OpenImage.setFile("*.jpg;*.png");/// маска файлов изображений (которые точно откроются)

OpenImage.setVisible(true);// показываем диалог

String StrFile=OpenImage.getFile();// принимаем имя файла

String StrDir=OpenImage.getDirectory();// принимаем путь к директории

BufferedImage image=null;// изображение приёмник(temp image)

if((StrFile!=null)&&(StrDir!=null))

{

File ImageFile=new File(StrDir+StrFile);

/// если файл существует и его возможно то пробуем загрузить из него изображение

if(ImageFile.canRead())

{

try {

image = ImageIO.read(ImageFile);/// загружаем изображение в image (приемник)

} catch (IOException e1) {

e1.printStackTrace();

}

};

};/// end if

ImageCellsWhite=image;/// загрузили и сохраняем для дальнейшего использования...

}

else if(ob==BoardCellsHorseImage)///Изображение для коня из файла

{

OpenImage.setDirectory(".");/// выбор текущей директории где работает программа

OpenImage.setTitle("Загрузка изображения коня из файла...");/// заголовок

OpenImage.setFile("*.jpg;*.png");/// маска файлов изображений (которые точно откроются)

OpenImage.setVisible(true);// показываем диалог

String StrFile=OpenImage.getFile();// принимаем имя файла

String StrDir=OpenImage.getDirectory();// принимаем путь к директории

BufferedImage image=null;// изображение приёмник(temp image)

if((StrFile!=null)&&(StrDir!=null))

{

File ImageFile=new File(StrDir+StrFile);

/// если файл существует и его возможно то пробуем загрузить из него изображение

if(ImageFile.canRead())

{

try {

image = ImageIO.read(ImageFile);/// загружаем изображение в image (приемник)

} catch (IOException e1) {

e1.printStackTrace();

}

};

};/// end if

ImageCellsHorse=image;/// загрузили и сохраняем для дальнейшего использования...

};

};

};

};

/**

* Точка входа в приложение (программу обхода доски конем)

* @param args

*/

public static void main(String[] args)

{

// создаем экземпляр окна программы

clFrame frame = new clFrame();

// устанавливам иные размеры

frame.setSize(600, 500);

// и обязательно показываем

frame.setVisible(true);

// далее через меню выполняем нужные действия

};

};