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;

   }

}




 

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

32274. Монтаж конструкций многоэтажных зданий с использованием групповых кондукторов и РШИ 93 KB
  Монтаж конструкций многоэтажных зданий с использованиемгрупповых кондукторов и РШИ Монтаж конструкций при использовании групповых кондукторов При наличии групповых кондукторов рис. В каждой ячейке последовательно устанавливают выверяют и закрепляют все элементы каркаса и после этого перемещают кондуктор на следующую стоянку. После установки колонн их раскрепляют хомутами кондуктора осуществляют предварительную точечную сварку укладывают ригели и сваривают их стыки с колоннами укладывают и сваривают распорные плиты с закладными деталями...
32275. Особенности возведения кирпичных зданий - совмещение каменной кладки с работами по монтажу конструкций и устройству монолитных участков. 24 KB
  При замерзании свежей кладки рр в швах быстро теряет свои свва свободн вода превращся в лед увеличиваясь в объеме что влечет дефекты трещины и разрушение шва недостаточн уплотненность. В проц оттаивания швы обжимаются весом вышележащ кладки что вызыв неравномерн осадку здя = трещ дефции. Спбы выполнения кам кладки в зимн услх: 1.
32276. Организация рабочего места каменщиков 405.5 KB
  Рабочее место каменщика при кладке стен включает участок возводимой стены и часть примыкающей к ней площади, в пределах которой размещают материалы, приспособления, инструмент и передвигается сам каменщик. Рабочее место каменщика состоит из трех зон (рис. 1, а, б) : рабочей 1 - свободной полосы вдоль кладки, на которой работают каменщики; зоны материалов
32277. Возведение кирпичных зданий следует осуществлять только поточным методом, предусматривающим деление здания на несколько одинаковых по трудоемкости захваток: по одно-, двух- и трехзахватной системам 67 KB
  Билет 7 Однозахватная система организации работ применяется преимущественно при строительстве небольших в плане односекционных домов при одноэтажном строительстве когда кладку ведут на всю высоту этажа при трехъярусном членении. В этот же день во вторую смену выполняют вспомогательные работы: установку подмостей доставку кирпича на подмости и т. На захватке рабочем участке где выполняют монтажные работы по условиям техники безопасности не могут одновременно работать каменщики и наоборот. В сельскохозяйственном строительстве при...
32278. Организация возведения кирпичных стен 26 KB
  Численность комплексной бригады может изменяться от 20 до 40 человек в зависимости от конструктивных особенностей здания и особенно кладки. При поточном выполнении каменной кладки основные понятия технологии работ имеют свое специфическое определение. Захватка типовая повторяющаяся в плане часть здания с приблизительно равными на данном и последующих за ним участках полсекции секция две секции объемами кладки предоставленная бригаде каменщиков для поточного выполнения работы на целое число смен.
32279. Конструктивных схемы и порядок монтажа конструкций каркасных многоэтажных гражданских зданий 47.5 KB
  Конструктивная схема каркасного здания:1 колонны 2 ригели 3 рядовые плиты перекрытий 4 связеваяплита перекрытий 5 навесные стеновые панели Каркасными рис. 5 сооружают общественные и административные здания. Колонны и ригели образуют несущие рамы воспринимающие вертикальные и горизонтальные нагрузки здания.
32280. Конструктивные схемы и порядок монтажа конструкций многоэтажных гражданских зданий с неполным каркасом и бескаркасных 138 KB
  Бескаркасные здания из кирпича и мелких камней и блоков возводят обычно с продольными несущими рис. В зданиях с поперечными несущими стенами рис. Возводятся также бескаркасные здания у которых несущими являются как поперечные так и продольные стены. Конструктивные схемы бескаркасных зданий с несущими стенами:а продольными б поперечными Бескаркасные крупноблочные здания со стенами из бетонных и других блоков имеют конструктивные схемы с поперечными и продольными несущими стенами рис.
32281. Схемы монтажа конструкций жилых крупнопанельных зданий с учетом конструктивных особенностей, условий устойчивости элементов, удобств и безопасности монтажа 81 KB
  Схемы монтажа конструкций жилых крупнопанельных зданий сучетом конструктивных особенностей условий устойчивостиэлементов удобств и безопасности монтажа Основные схемы монтажа крупнопанельных зданий Последовательность монтажа здания зависит от многих факторов: конструктивных особенностей здания; последовательности установки элементов рекомендуемой технологической картой; наличия подкосов фиксаторов монтажной оснастки. Схема монтажа крупнопанельных зданий с приобъектного склада рис. Схема монтажа элементов с приобъектного склада...
32282. Роль правосознания в правотворчестве и реализации права 30 KB
  Роль правосознания в правотворчестве и реализации права. Уровень правосознания законодателя его представления о значимости тех или иных правовых институтов его отношение к отдельным правовым явлениям напрямую выражаются в нормах права создаваемых в процессе правотворческой деятельности. юристыпрактики привлеченные к разработке проектов нормативных актов помогут обеспечить реальную применимость права его соответствие общественным реалиям связь права с общественной жизнью и юридической практикой. В процессе реализации права уровень...