95065

РОЗРОБКА ПРОЕКТУ «ШАХИ»

Курсовая

Информатика, кибернетика и программирование

Проаналізувати предметну область, наявні вхідні та вихідні документи та здійснити проектування, та розробку проекту. Теоретична та практична цінність курсової роботи полягає у створенні нормалізованої інформаційно-логічної гри в шахи. Гра, в свою чергу дозволяє створити дієздатну систему автоматизації та контролю фігур на ігровій дошці.

Украинкский

2015-09-19

178.06 KB

2 чел.

Гра в ШАХИ

Контент

ВСТУП. АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ 3

1. ТЕОРЕТИЧНИЙ АНАЛІЗ ІНФОРМАЦІЙНИХ ПОТОКІВ ТА ОСОБЛИВОСТЕЙ СТВОРЕННЯ ПРОЕКТУ 5

1.1 АНАЛІЗ ОСОБЛИВОСТЕЙ ПРОЦЕСУ ФОРМУВАННЯ ГРИ ЗА ПОТРЕБАМИ КОРИСТУВАЧА 5

1.2 ОБҐРУНТУВАННЯ ВИБОРУ ЗАСОБІВ РЕАЛІЗАЦІЇ 9

2. ПРОЕКТУВАННЯ ПРОЕКТУ «ШАХИ» 10

2.1 АНАЛІЗ ІНФОРМАЦІЙНИХ ПРОЦЕСІВ 10

2.2 ПРОЕКТУВАННЯ СТРУКТУРИ 11

3. РЕАЛІЗАЦІЯ ПІДСИСТЕМИ ОБРОБКИ ДАНИХ 12

3.1 РЕАЛІЗАЦІЯ ОПЕРАЦІЙ ОБРОБКИ ДАНИХ. 12

ВИСНОВКИ 13

ЛІТЕРАТУРА 16

ЛІСТИНГ 17


ВСТУП. АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ

Актуальність: створення гри в шахи зумовлено постійним бажанням розвитку в цій грі титанів та гігантів мислення. Що може бути кращим, за розуміння цієї гри на програмному рівні?. Шахи розвивають мислення, силу волі, стійкість та заспокоюють нерви. Даний проект призначений для гри в двох, що дасть додаткову змогу покращити свої комунікаційні можливості. Користуватись програмою дуже просто і ефективно, адже вона містить інтуїтивний інтерфейс. Створений проект автоматизований відповідно до сучасних вимог та усіх міжнародних стандартів таких як ISO 9000. Значення серії 9000: Стандарт допомагає формалізувати систему менеджменту, вводячи, зокрема, такі системоутворюючі поняття, як внутрішній аудит, коригувальні дії.

Мета роботи: полягає у розробці гри в шахи.

Завдання роботи випливають з поставленої мети:

  1.  проаналізувати предметну область, наявні вхідні та вихідні документи та здійснити проектування, та розробку проекту.

Теоретична та практична цінність курсової роботи полягає у створенні нормалізованої інформаційно-логічної гри в шахи. Гра, в свою чергу дозволяє створити дієздатну систему автоматизації та контролю фігур на ігровій дошці. Крім того, виконання курсової роботи дозволяє автору, а саме мені, Миколі-Олегу Володимировичу Єршову поглибити власні теоретичні знання з розробки ОО додатків та підвищити свій рівень у розробці за стосунків у новітніх інтерактивних середовищах розробки, таких як NetBeans. Курсова робота дає можливість отримати практичні навички розробки коректної програграми, навчитися логічно та чітко описувати етапи створення системи, аналізувати її недоліки та переваги.


Структура роботи відповідає послідовності розробки гри в шахи. Вступ курсової роботи формує її сприйняття, висновки узагальнюють досягнуті результати дослідження і висвітлюють подальші тенденції розробки теми.


1. ТЕОРЕТИЧНИЙ АНАЛІЗ ІНФОРМАЦІЙНИХ ПОТОКІВ ТА ОСОБЛИВОСТЕЙ СТВОРЕННЯ ПРОЕКТУ

1.1 АНАЛІЗ ОСОБЛИВОСТЕЙ ПРОЦЕСУ ФОРМУВАННЯ ГРИ ЗА ПОТРЕБАМИ КОРИСТУВАЧА

З метою створення проекту на зовнішньому рівні спочатку проаналізуємо уявну шахову дошку, відповідно вона складатиметься з: фігур чорного та білого кольору, дошки з клітинками та безперечно гравців. Всі дані повинні зберігатись в окремих таблицях та при потребі до них повинна бути реалізована можливість звернення в будь-яку мить, з допомогою всього лише декількох натисків миші.

Інформаційна система призначена для обробки даних та параметрів певних ходів. Вся інформація служить в якості довідника та постійно оновлюється.

Перед початком гри кожний гравець розпоряджається 16 фігурами:

  1.  8 пішаків;
  2.  2 тури;
  3.  2 коні;
  4.  2 слони;
  5.  1 королева;
  6.  1 король.

Король грає не останню роль, адже при його не можливості ходити по клітинкам, його власнику оголошується мат, або пат в залежності від ситуації.

За винятком рокіровки, ходом називається пересування однієї фігури з одного поля на інше, вільне чи зайняте фігурою суперника. Ходи в шахах виконуються суперниками по черзі. Жодна з фігур, за виключенням тури під час рокіровки та коня, не може перетинати поле зайняте іншою фігурою (перестрибувати інші фігури). Якщо фігура пересувається на поле, зайняте фігурою суперника, то фігура суперника повинна бути знята з дошки гравцем, який зробив хід. Такий хід називається взяттям. Єдиною фігурою, яка не може бути взята і знята з дошки, є король.

Хід вважається здійсненим якщо:

  1.  при пересуванні фігури на вільне поле, коли кнопка миші гравця була відпущена та залишила фігуру.
  2.  при взятті, коли взяту фігуру знищенно з дошки і коли гравець поставивши на нове місце свою фігуру, відпустив її.
  3.  при рокіровці, коли рука гравця відпустила туру, що стала на поле, яке пересік король; коли гравець випустив з своєї руки короля хід ще не вважається закінченим, але немає більше права робити інший хід крім рокіровки
  4.  при перетворенні пішака, коли пішака знято з дошки і гравець відняв руку від нової фігури, поставленої на поле перетворення, якщо гравець відняв руку від пішака, що досягнув поля перетворення, хід ще не закінчений, але немає більше права піти пішаком на інше поле.

Оголошення шаху:

  1.  Шах королю має місце, коли поле, яке він займає, опинилося під ударом фігур противника. В цьому випадку говориться, що фігура оголосила шах королю.
  2.  Шах королю повинен бути відбитий наступним ходом. Шах можна відбити в один з наступних способів:
  3.  відійти королем на поле, що не знаходиться під ударом фігур суперника,


  1.  узяти фігуру, що загрожує королю, чи прикрити короля, перемістивши іншу свою фігуру під удар на поле що знаходиться між королем і атакуючою його фігурою. Прикрити короля неможливо від атаки конем.
  2.  Якщо шах неможливо відбити наступним ходом, то оголошується мат і гравець, який поставив шах-мат, оголошується переможцем партії.

Виграш партії:

  1.  Партія вважається виграною шахістом, який дав мат королю партнера
  2.  Партія вважається виграною тим з партнерів, противник якого визнав себе переможеним
  3.  Партія вважається виграною, якщо у одного з шахістів закінчився час на ходи, відведений регламентом партії, і у його суперника при цьому на дошці залишилося достатньо фігур, щоб поставити мат за умови найменш компетентної гри суперника. Переможеним у партії визнається шахіст, у якого закінчився час.

Нічия:

  1.  В становищі, коли можливість виграшу виключена (король проти короля, король проти короля зі слоном чи конем, король зі слоном проти короля зі слоном (при однокольорових слонах))
  2.  Якщо король гравця (при його черзі ходу) не перебуває під шахом і цей гравець не може зробити жодного ходу. Таке становище називається патом
  3.  При взаємній згоді гравців
  4.  За вимогою гравця, якщо одна і та ж позиція виникає три рази, причому черга ходу щоразу буде за цим гравцем. Позиція вважається повтореною, якщо фігуру одного і того ж найменування і кольору займають одні і ті ж поля і якщо однакові можливості гри цими фігурами. Але це можна зробити лише тоді, коли ти записуєш партію.
  5.  Коли гравець до здійснення ходу доводить, що обома сторонами зроблено щонайменше 50 ходів, протягом яких жодна фігура не була взята і жоден пішак не зробив ходу, але лише при наявності запису партії.
  6.  Якщо в одного з шахістів закінчився час на ходи, відведений регламентом партії, і у його суперника при цьому на дошці не достатньо фігур, щоб поставити мат за умови найменш компетентної гри суперника.

Виключеннями є кінь проти пішака чи тури(мат можливий, але тоді зарахується нічия), чи офіцер проти пішака.

 

1.2 ОБҐРУНТУВАННЯ ВИБОРУ ЗАСОБІВ РЕАЛІЗАЦІЇ

Таблиця Т.1

Функціональне порівняння IDE

Характеристика

NetBeans

Microsoft Visual Studio

JetBrains

Мова JAVA

Відмінно

Відмінно

Добре

Графічні інструменти

Відмінно

Добре

Відмінно

Робота с декількома ЦП

Відмінно

Відмінно

Задовільно

Одночасний доступ декількох користувачів

Відмінно

Відмінно

Відмінно

Функції з’єднання і вибір індексів

Відмінно

Відмінно

Відмінно

Організація сховищ даних і підготовка звітів

Відмінно

Відмінно

Відмінно

Побудова БД

Відмінно

Відмінно

Відмінно

Простота обслуговування

Відмінно

Відмінно

Відмінно

Робота у режимі віддаленого доступу

Відмінно

Відмінно

Відмінно

 Таблиця Т.3

Експертна оцінка багатокористувацьких IDE

NetBeans

Microsoft Visual Studio

JetBrains

Продуктивність

6

6

5

Конкурентний доступ

7

9

6

Кількість користувачів

5

8

4

Великі БД

5

8

5

Готовність

7

8

6

Наразі існує велика кількість IDE. Для аналізу були відібрані: visual studio, netbeans, jetBrains. Вибір цих IDE позв'язаний з тим, що вони найбільш розповсюджені на сьогоднішній день. Вибір IDE для застосування залежить від поставлених цілей. Для невеликої програми підійти настільне середовище NetBeans. Багатоплатформеністю з вище перечислених володіють всі, які можуть працювати тільки під управленням ОС Windows. Найбільш актуальна, на даний час є майкрософтовська, вона надає більше підтримуваних об'єктів.


2. ПРОЕКТУВАННЯ ПРОЕКТУ «ШАХИ»

2.1 АНАЛІЗ ІНФОРМАЦІЙНИХ ПРОЦЕСІВ

При завантаженні, гравець натискаю кнопку «Грати». Після чого гра починається

Перед ним дошка, з повною інформацією про гру, та кожен його хід.

На кожний вид інформації існує своя форма за допомогою якої можна записати інформацію в базу даних, але запис інформації поділяється на 3 частини:

  1. інформація в залежності від її направлення.
  2. потрібно перевірити дані на коректність.
  3. при збережені інформації до бази даних має перевірятися цілісність надходження.

Кожен користувач має можливість переглядати інформацію про кожен свій хід.


2.2 ПРОЕКТУВАННЯ СТРУКТУРИ

В процесі проектування було виділено декілька основних особливостей. Графічне зображення структури наведено нижче:

Рис.2. Структура гри в шахи.

Реалізоване збереження даних про хід кожного гравця. В дану таблицю вводяться всі ходи кожного гравця дані про користувача.

3. РЕАЛІЗАЦІЯ ПІДСИСТЕМИ ОБРОБКИ ДАНИХ 

3.1 РЕАЛІЗАЦІЯ ОПЕРАЦІЙ ОБРОБКИ ДАНИХ.

При старту гри, заходимо в головне вікно. Для мінімізації робочої області, використовується саме таке головне меню, щоб воно не заважало користувачу ПК.

Після натиску на кнопку «грати», з’являється сама гра в режимі 1vs1.

Далі все йде відповідно до рівня гравця.


ВИСНОВКИ

В курсовому проекті була вирішена задача розробки програми ШАХИ.

Спочатку користувач вмикає головне меню, потім починає грати. Гра діє відповідно до загально прийнятих правил, описаних ще 3 тисячі років тому назад. Після успішного ходу, ходить наступний гравець. Програма шахи першого релізу планується постійно оновлюватись, а також я збираюсь зробити її онлайн для веб та реалізувати в майбутньому можливість гри онлайн в двох.

Програма має приємний та інтуїтивно-зрозумілий інтерфейс який підійде навіть початковому користувачу ПК.

  На практиці довелось застосувати інноваційне середовище розробки – Microsoft Visual Studio та NetBeans, які адаптовані під 64 бітні додатки Microsoft Windows, авторські права якиї належать фірмі Microsoft Technologies. Користуючись програмами я навчився:

  1.  розробляти складні додатки в інтерактивному режимі;
  2.  ефективно модифікувати створені об'єкти в режимі конструктора;
  3.  копіювати, імпортувати та експортувати дані;
  4.  перевіряти та забезпечувати цілісність відношень між класами та даними;
  5.  створювати ефективні засоби для редагування даних організацій взаємодії між об'єктами;
  6.  моделювати і проектувати додатки;
  7.  робити розробку візуально за допомогою drag-and-drop, що значно спрощує програмування завдяки вбудованому WYSIWYG - редактору інтерфейсу;
  8.  застосував на практиці теорію проектування;
  9.  опрацьовано вхідну, вихідну та нормативно-довідкову документацію організації, вивчив функціонування об'єкта управління та можливості заміни матеріальних потоків інформаційними;
  10.  розробив, перевірив коректність використання нормальних форм та доопрацьовано інформаційно-логічну схему БД;

  1.  розроблено власні засобів коригування та систематизації даних;
  2.  розроблено необхідні засобів автоматизації управління.

 

Виконання поставлених у вступі завдань дозволило розробити нескладну гру, що й передбачалося метою курсової роботи.

Створена робота призначена для людей будь-якої вікової. Вона також може бути використана на будь-якій операційних системах сімейства Windows. Виконання курсової роботи дозволило мені не лише навчитися проектувати та розробляти додатки, а й на практиці оволодіти основними методами наукових досліджень, навчитися самостійно опрацьовувати, аналізувати і систематизувати інформацію літературних та електронних джерел, логічно викладати матеріал та обґрунтовувати власну позицію, необхідність та доцільність прийнятих рішень.



ЛІТЕРАТУРА

  1.  Гарин. А. В. Роль стандарта ISO 9000 в цепи поставок. – СПб, 2008. – №4. – 134 с.
  2.  Кириллов В. В. Основы проектирования. Учебное пособие. – СПб.: ИТМО, 1995. – 92с.
  3.  Хомоненко А. Д. ООП: Учебник для высших учебных заведений / Хомоненко А. Д., Цыганков В. М., Мальцев М. Г. / Под. ред. проф. А. Д. Хомоненко. – 4 – е изд., доп. и перераб. – СПб.: КОРОНА принт, 2004.
  4.  Целко Дж. JAVA Programming Style. San Francisco, CA 2005. – 236c.
  5.  Алиегро К. Microsoft Visual Studio: Microsoft’s Business Intelligence Platform. – Kirklan, Washington, 2005. – 36.
  6.  Нилсен П., Вайт М., Паруи У. Microsoft Visual Studio 2008 Bible. – Crosspoint Boulevard, Indiapolis, 2009. – 1684c.
  7.  Маклаков С.В. BPwin и ERwin. CASE-средства разработки информационных систем / С.В.Маклаков. – М.:ДИАЛОГ-МИФИ, 2000
  8.  Дейт К. Дж. Введение в OOP, 8 – е издание / Пер. с англ. – М.: Издательский дом «Вильямс», 2005. – 1328 с.: ил.
  9.  Кошелев В.Е. Visual Studio 2003. Практическое руководство. – М.: ООО «Бином-Пресс», 2005. – 464 с.
  10.  Бронзик В, Терьохін А. Стратегічні прийомі шахів. Москва 2014р. – 456с.
  11.   Левенфиш Г. Я. Книга початкового шахматиста. - Москва. «Фізкультура і спорт», 1957 г., 360 стр.

ЛІСТИНГ

package org;

import GUI.Frame;

import javax.swing.SwingUtilities;

import javax.swing.UIManager;

import javax.swing.UnsupportedLookAndFeelException;

/*

* @author mye <a href="mailto:mykola.yershov@infopulse.com">mykola.yershov@infopulse.com</a>

*/

public class Main {

   /**

    * @param args the command line arguments

    */

   public static void main(String[] args) {

       // TODO code application logic here      

       try {

           try {

               for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {

                   if ("Nimbus".equals(info.getName())) {

                       UIManager.setLookAndFeel(info.getClassName());

                       break;

                   }

               }

           } catch (ClassNotFoundException | IllegalAccessException | InstantiationException | UnsupportedLookAndFeelException e) {

               UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

           }

       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {

       }

       SwingUtilities.invokeLater(new Runnable() {

           @Override

           public void run() {

               Frame f = new Frame();

               f.setVisible(true);

           }

       });

    }

} /*

* To change this license header, choose License Headers in Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package org;

import GUI.LogDisplayText;

import GUI.TimerPanel;

/*

* @author mye <a href="mailto:mykola.yershov@infopulse.com">mykola.yershov@infopulse.com</a>

*/

public class Parameters {

   

   private final String lang;

   private final LogDisplayText logDisplay;

   private final TimerPanel timer;

   private final String timeFlow;

   private Object board;

   private String boardClassName;    

   

   /**

    * Constructor for object prameters

    * @param lang  lang "en" or "pl"

    * @param logDisplay    instance of log display

    * @param timer instance of timer panel

    * @param timeFlow time flow "down" or "up"

    */

   public Parameters(String lang,LogDisplayText logDisplay,TimerPanel timer,String timeFlow) {

       this.lang=lang;

       this.logDisplay=logDisplay;

       this.timer = timer;

       this.timeFlow=timeFlow;

   }

   /**

    *

    * @return object board

    */

   public Object getBoard() {

       return board;

   }

   /**

    *

    * @return boards name

    */

   public String getBoardClassName() {

       return boardClassName;

   }

   /**

    *

    * @param board

    * @param boardClassName

    */

   public void setBoard(Object board,String boardClassName) {

       this.boardClassName=boardClassName;

       this.board = board;

   }

   /**

    *

    * @return language

    */

   public String getLang() {

       return lang;

   }

   /**

    *

    * @return display for chess notation

    */

   public LogDisplayText getLogDisplay() {

       return logDisplay;

   }

   /**

    *

    * @return timer

    */

   public TimerPanel getTimer() {

       return timer;

   }

   /**

    *

    * @return time flow

    */

   public String getTimeFlow() {

       return timeFlow;

   }

   

   /**

    *

    * @return true if lang was defined

    */

   public boolean isLang() {

       return lang!=null;

   }

   /**

    *

    * @return true if defined

    */

   public boolean isLogDisplay() {

       return logDisplay!=null;

   }

   /**

    *

    * @return true if defined

    */

   public boolean isTimer() {

       return timer!=null;

   }

   /**

    *

    * @return true if defined

    */

   public boolean isTimeFlow() {

       return timeFlow!=null;

   }

   

}

package GUI;

import java.awt.FlowLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JPanel;

import org.FileSave;

import org.GameBoardLogic;

/*

* @author mye <a href="mailto:mykola.yershov@infopulse.com">mykola.yershov@infopulse.com</a>

*/

public class GameMenuBar extends JPanel {

   MainMenu mainMenu;

   JMenuBar menuBar;

   JMenu menu;

   String MENU_GAME="Menu",MENU_ITEM_NEW_GAME="New game",

           MENU_ITEM_RETURN_TO_MENU="Main menu",MENU_ITEM_EXIT="Exit";

           

   

   /**

    * Creates menu bar for single player game

    *

    * @param frame parent frame

    * @param parent parent Jpanel to which it belongs

    * @param gameBoard gameBoard instance

    * @param canSave true if game mode supports saving(only hot seat at the

    * moment)

    * @param isLoaded

    */

   public GameMenuBar(final JFrame frame, final JPanel parent, final GameBoardLogic gameBoard, boolean canSave, boolean isLoaded) {

       setLayout(new FlowLayout(FlowLayout.LEFT));

       menuBar = new JMenuBar();

       menu = new JMenu(MENU_GAME);

       if (!isLoaded) {

           JMenuItem nowaGra = new JMenuItem(MENU_ITEM_NEW_GAME);

           nowaGra.addActionListener(new ActionListener() {

               @Override

               public void actionPerformed(ActionEvent e) {

                   gameBoard.resetBoard();

               }

           });

           menu.add(nowaGra);

       }

       

       JMenuItem wrocDoMenu = new JMenuItem(MENU_ITEM_RETURN_TO_MENU);

       wrocDoMenu.addActionListener(new ActionListener() {

           @Override

           public void actionPerformed(ActionEvent e) {

               frame.remove(parent);

               mainMenu = new MainMenu(frame);

           }

       });

       menu.add(wrocDoMenu);

       JMenuItem zakoncz = new JMenuItem(MENU_ITEM_EXIT);

       zakoncz.addActionListener(new ActionListener() {

           @Override

           public void actionPerformed(ActionEvent e) {

               System.exit(0);

           }

       });

       menu.add(zakoncz);

       menuBar.add(menu);

       add(menuBar);

   }

} /*

* To change this license header, choose License Headers in Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package GUI;

import java.awt.Component;

import java.awt.Dimension;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.BorderFactory;

import javax.swing.Box;

import javax.swing.BoxLayout;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.Timer;

import javax.swing.border.EtchedBorder;

/*

* @author mye <a href="mailto:mykola.yershov@infopulse.com">mykola.yershov@infopulse.com</a>

*/

public final class TimerPanel extends JPanel {

   private Timer blackTimex;

   private Timer whiteTimex;

   private String startTime;

   private String startTimeBlack;

   private String startTimeWhite;

   private final JLabel whiteLabel = new JLabel();

   private final JLabel blackLabel = new JLabel();

   private final JLabel whiteTimeDisplay = new JLabel();

   private final JLabel blackTimeDisplay = new JLabel();

   private final JPanel whitePanel = new JPanel();

   private final JPanel blackPanel = new JPanel();

   private String stimeHour;

   private String stimeMinute;

   private String stimeSecond;

   private boolean upTime;

   ActionListener blackTaskPerformer = new ActionListener() {

       @Override

       public void actionPerformed(ActionEvent e) {

           if (upTime == true) {

               upTime(blackTimeDisplay);

           } else {

               if (upTime == false) {

                   downTime(blackTimeDisplay);

               }

           }

           blackTimex.restart();

       }

   };

   ActionListener whiteTaskPerformer = new ActionListener() {

       @Override

       public void actionPerformed(ActionEvent e) {

           if (upTime == true) {

               upTime(whiteTimeDisplay);

           } else {

               if (upTime == false) {

                   downTime(whiteTimeDisplay);

               }

           }

           whiteTimex.restart();

       }

   };

   /**

    * Creates timer panel containing timers for indicating how much time left

    * to end game or from start

    *

    * @param language in what language display "en" or "pl"

    * @param th hours

    * @param tm minutes

    * @param ts second

    * @param upTime true if time going up or false if time going down

    */

   public TimerPanel(String language, int th, int tm, int ts, boolean upTime) {

       this.upTime = upTime;

       convertTime(th, tm, ts);

       init(language);

       

       blackTimex = new Timer(1_000, blackTaskPerformer);

       whiteTimex = new Timer(1_000, whiteTaskPerformer);

       resetTime();

       

   }

   TimerPanel(String language, int whitePlayerTime, int blackPlayerTime, boolean upTime) {

       this.upTime = upTime;

       init(language);

       blackTimex = new Timer(1_000, blackTaskPerformer);

       whiteTimex = new Timer(1_000, whiteTaskPerformer);

       setTimers(whitePlayerTime, blackPlayerTime);

       

   }

   private void init(String language) {

       setPreferredSize(new Dimension(135, 150));

       setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));

       whitePanel.setLayout(new BoxLayout(whitePanel, BoxLayout.PAGE_AXIS));

       blackPanel.setLayout(new BoxLayout(blackPanel, BoxLayout.PAGE_AXIS));

       if (language.equalsIgnoreCase("pl")) {

           whiteLabel.setText("Białe");

           blackLabel.setText("Czarne");

       }

       if (language.equalsIgnoreCase("en")) {

           whiteLabel.setText("White");

           blackLabel.setText("Black");

       }

       whiteLabel.setAlignmentX(Component.CENTER_ALIGNMENT);

       blackLabel.setAlignmentX(Component.CENTER_ALIGNMENT);

       whitePanel.add(whiteLabel);

       blackPanel.add(blackLabel);

       

       whiteTimeDisplay.setAlignmentX(Component.CENTER_ALIGNMENT);

       blackTimeDisplay.setAlignmentX(Component.CENTER_ALIGNMENT);

       

       whitePanel.add(Box.createHorizontalGlue());

       whitePanel.add(Box.createRigidArea(new Dimension(10, 0)));

       whitePanel.add(whiteTimeDisplay);

       whitePanel.add(Box.createRigidArea(new Dimension(10, 0)));

       whitePanel.add(Box.createHorizontalGlue());

       

       blackPanel.add(Box.createHorizontalGlue());

       blackPanel.add(Box.createRigidArea(new Dimension(10, 0)));

       blackPanel.add(blackTimeDisplay);

       blackPanel.add(Box.createRigidArea(new Dimension(10, 0)));

       blackPanel.add(Box.createHorizontalGlue());

       add(whitePanel);

       add(Box.createRigidArea(new Dimension(5, 0)));

       add(blackPanel);

       whitePanel.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));

       blackPanel.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));

       

   }

   /**

    * Starts timer for black player

    */

   public void blackStart() {

       blackTimex.start();

   }

   /**

    * Stops timer for black player

    */

   public void blackStop() {

       blackTimex.stop();

   }

   /**

    * Starts timer for white player

    */

   public void whiteStart() {

       whiteTimex.start();

   }

   /**

    * Stops timer for white player

    */

   public void whiteStop() {

       whiteTimex.stop();

   }

   public void pause() {

       whiteTimex.stop();

       blackTimex.stop();

   }

   /**

    * Stops timers for black and white player

    */

   public void stop() {

       whiteTimex.removeActionListener(whiteTaskPerformer);

       blackTimex.removeActionListener(blackTaskPerformer);

   }

   /**

    * displays time going up

    *

    * @param timer JLabel on which display

    */

   private void upTime(JLabel timer) {

       String text = timer.getText();

       int s0 = Integer.parseInt(text.substring(11, 12));

       int s1 = Integer.parseInt(text.substring(10, 11));

       int m0 = Integer.parseInt(text.substring(6, 7));

       int m1 = Integer.parseInt(text.substring(5, 6));

       int h0 = Integer.parseInt(text.substring(1, 2));

       int h1 = Integer.parseInt(text.substring(0, 1));

       if (s0 == 9) {

           s0 = 0;

           ++s1;

       } else if (s0 != 9) {

           ++s0;

       }

       if (s1 == 6) {

           s0 = 0;

           s1 = 0;

           ++m0;

       }

       if (m0 == 10) {

           m0 = 0;

           ++m1;

       }

       if (m1 == 6) {

           m1 = 0;

           ++h0;

       }

       if (h0 == 10) {

           h0 = 0;

           ++h1;

       }

       if (h1 == 10) {

           s0 = 0;

           s1 = 0;

           m0 = 0;

           m1 = 0;

           h0 = 0;

           h1 = 0;

       }

       String s_s0 = Integer.toString(s0);

       String s_s1 = Integer.toString(s1);

       String s_m0 = Integer.toString(m0);

       String s_m1 = Integer.toString(m1);

       String s_h0 = Integer.toString(h0);

       String s_h1 = Integer.toString(h1);

       timer.setText(s_h1 + s_h0 + " : " + s_m1 + s_m0 + " : " + s_s1 + s_s0);

   }

   /**

    * displays time going down

    *

    * @param timer JLabel on which display

    */

   private void downTime(JLabel timer) {

       String text = timer.getText();

       int s0 = Integer.parseInt(text.substring(11, 12));

       int s1 = Integer.parseInt(text.substring(10, 11));

       int m0 = Integer.parseInt(text.substring(6, 7));

       int m1 = Integer.parseInt(text.substring(5, 6));

       int h0 = Integer.parseInt(text.substring(1, 2));

       int h1 = Integer.parseInt(text.substring(0, 1));

       --s0;

       if (s0 < 0) {

           s0 = 9;

           --s1;

       }

       if (s1 < 0) {

           s1 = 5;

           --m0;

       }

       if (m0 < 0) {

           m0 = 9;

           --m1;

       }

       if (m1 < 0) {

           m1 = 5;

           --h0;

       }

       if (h0 < 0) {

           h0 = 9;

           --h1;

       }

       if (h1 < 0) {

           h1 = 9;

       }

       String s_s0 = Integer.toString(s0);

       String s_s1 = Integer.toString(s1);

       String s_m0 = Integer.toString(m0);

       String s_m1 = Integer.toString(m1);

       String s_h0 = Integer.toString(h0);

       String s_h1 = Integer.toString(h1);

       timer.setText(s_h1 + s_h0 + " : " + s_m1 + s_m0 + " : " + s_s1 + s_s0);

   }

   /**

    * converts time from constructor and displays it on labels

    *

    * @param th hours

    * @param tm minutes

    * @param ts seconds

    */

   private void convertTime(int th, int tm, int ts) {

       if (th < 10) {

           stimeHour = "0".concat(Integer.toString(th));

       } else {

           stimeHour = Integer.toString(th);

       }

       if (tm < 10) {

           stimeMinute = "0".concat(Integer.toString(tm));

       } else {

           stimeMinute = Integer.toString(tm);

       }

       if (ts < 10) {

           stimeSecond = "0".concat(Integer.toString(ts));

       } else {

           stimeSecond = Integer.toString(ts);

       }

       startTime = stimeHour.concat(" : " + stimeMinute.concat(" : " + stimeSecond));

       startTimeWhite=startTime;

       startTimeBlack=startTime;

   }

   /**

    * Gets white player time

    *

    * @return white players time

    */

   public int getWhitePlayerTime() {

       String text = whiteTimeDisplay.getText();

       int s0 = Integer.parseInt(text.substring(11, 12));

       int s1 = Integer.parseInt(text.substring(10, 11));

       int m0 = Integer.parseInt(text.substring(6, 7));

       int m1 = Integer.parseInt(text.substring(5, 6));

       int h0 = Integer.parseInt(text.substring(1, 2));

       int h1 = Integer.parseInt(text.substring(0, 1));

       return (h1 * 100_000) + (h0 * 10_000) + (m1 * 1_000) + (m0 * 100) + (s1 * 10) + (s0);

   }

   /**

    * Gets black player time

    *

    * @return black players time

    */

   public int getBlackPlayerTime() {

       String text = blackTimeDisplay.getText();

       int s0 = Integer.parseInt(text.substring(11, 12));

       int s1 = Integer.parseInt(text.substring(10, 11));

       int m0 = Integer.parseInt(text.substring(6, 7));

       int m1 = Integer.parseInt(text.substring(5, 6));

       int h0 = Integer.parseInt(text.substring(1, 2));

       int h1 = Integer.parseInt(text.substring(0, 1));

       return (h1 * 100_000) + (h0 * 10_000) + (m1 * 1_000) + (m0 * 100) + (s1 * 10) + (s0);

   }

   /**

    * Resets and stops both players timers and displays

    */

   public void resetTime() {

       whiteTimeDisplay.setText(startTimeWhite);

       blackTimeDisplay.setText(startTimeBlack);

       if (blackTimex.getActionListeners().length == 0) {

           blackTimex.addActionListener(blackTaskPerformer);

           whiteTimex.addActionListener(whiteTaskPerformer);

       }

       blackTimex.stop();

       whiteTimex.stop();

   }

   private void setTimers(int whitePlayerTime, int blackPlayerTime) {

       startTimeWhite=getConvertedTime(whitePlayerTime);

       startTimeBlack=getConvertedTime(blackPlayerTime);

       whiteTimeDisplay.setText(startTimeWhite);

       blackTimeDisplay.setText(startTimeBlack);

       if (blackTimex.getActionListeners().length == 0) {

           blackTimex.addActionListener(blackTaskPerformer);

           whiteTimex.addActionListener(whiteTaskPerformer);

       }

       blackTimex.stop();

       whiteTimex.stop();

   }

   private String getConvertedTime(int time) {

       String timeS;

       int th, tm, ts;

       String hourS, minuteS, secondS;

       th = time / 10_000;

       

       tm = time - (th * 10_000);

       tm = tm / 100;

       

       ts = time - (th * 10_000) - (tm * 100);

       if (th < 10) {

           hourS = "0".concat(Integer.toString(th));

       } else {

           hourS = Integer.toString(th);

       }

       if (tm < 10) {

           minuteS = "0".concat(Integer.toString(tm));

       } else {

           minuteS = Integer.toString(tm);

       }

       if (ts < 10) {

           secondS = "0".concat(Integer.toString(ts));

       } else {

           secondS = Integer.toString(ts);

       }

       timeS = hourS.concat(" : " + minuteS.concat(" : " + secondS));

       return timeS;

   }

}




 

А также другие работы, которые могут Вас заинтересовать

16070. риміналістична характеристика злочинів 250.5 KB
  Старушкевич А.В. Криміналістична характеристика злочинів: Навч. посібник. К. 1997. 44 с. Вступ Боротьба зі злочинністю е одним із головних державних завдань на будь якій стадії суспільного розвитку. Особливого значення вона набуває в умовах реформування діяльності
16071. Біржова справа 20.06 MB
  Підручник складається з трьох частин і двадцяти розділів. Кожен розділ завершується коротким резюме, контрольними запитаннями, переліком посилань і рекомендованої літератури, тестами для перевірки знань (усього 300), ситуаційними задачами
16072. Біржове право 1.85 MB
  Біржовий ринок у світі давно вже став центром ринкової економіки. Нагромаджено великий досвід роботи бірж, що пройшли історичний розвиток від торгівлі наявною сільськогосподарською продукцією до торгівлі фючерсами й опціонами на всі види товарів і фінансових інструментів. Це сприяло перетворенню бірж з одного із головних каналів оптової торгівлі товарами на центри ціноутворення і страхування ризику.
16073. Професійна мотивація працівників органів внутрішніх справ вивчення та корекція 886.5 KB
  В запропонованому посібнику розглянуті загальні питання вивчення професійної мотивації, а також проаналізовані мотиви вибору професії та професійної діяльності працівників органів внутрішніх справ.
16074. Право пенсійного забезпечення в Україні 1.27 MB
  І.М. Сирота ПРАВО ПЕНСІЙНОГО ЗАБЕЗПЕЧЕННЯ в УКРАЇНІ Курс лекцій Київ Юрінком Інтер 1998 ББК 67.9 4УКР 305 С40 Рекомендовано вченою радою Юридичного інституту Одеського державного університету ім. 1.1. Мечникова Рецензент В.Т. УСЕНКО на
16075. Кримінально-виконавче право України 879 KB
  Кримінальновиконавче право України: Курс лекцій.Семаков Г. С Гель А. П. Київ 2000 [1] ВСТУП [2] ТЕМА 1 КРИМІНАЛЬНОВИКОНАВЧА ПОЛІТИКА І КРИМІНАЛЬНОВИКОНАВЧЕ ПРАВО. НОРМИ ТА ДЖЕРЕЛА ПРАВА. КРИМІНАЛЬНОВИКОНАВЧІ ПРАВОВІДНОСИНИ [3] ТЕМА 2 ...
16076. Мотив і мотивація злочину 928 KB
  НАЦІОНАЛЬНА АКАДЕМІЯ ВНУТРІШНІХ СПРАВ УКРАЇНИ А. В. САВЧЕНКО МОТИВ І МОТИВАЦІЯ ЗЛОЧИНУ Київ Атіка 2002 ББК 67.94УКР308 С12 Рекомендовано до друку спеціалізованою Вченою радою Національної академії внутрішніх справ України Науковий редактор Коржанськи
16077. Держава і економіка. Адміністративно-правові аспекти взаємовідносин 1.62 MB
  МВС України Університет внутрішніх справ О.П.Рябченко Держава і економіка: адміністративноправові аспекти взаємовідносин За загальною редакцією доктора юридичних наук професора О.М. Бандурки Видавництво Університету внут...
16078. Державне управління 621 KB
  Глен Райт. Державне управління. – К. 1994 Переклали з англійської Василь Івашко Олександр Коваленко Світлана Соколик київ основи Інститут державного управління та самоврядування при Кабінеті Міністрів України ББК 67.30165.050 Р18 У посібнику розг...