Рух Короля в шахах

Автор работы: Пользователь скрыл имя, 02 Мая 2013 в 22:08, курсовая работа

Краткое описание

Розробка програм для аналізу шахових комбінацій представляє великий інтерес в дослідженнях з області штучного інтелекту. На сьогоднішній день існує дуже багато програмних засобів для повноцінної гри в шахи та, навіть, спеціалізовані шахові комп’ютери, призначені тільки для шахів.
Історія шахових машин старша, ніж історія комп'ютерів. Ідея створити машину, що грає в шахи, датується ще вісімнадцятим століттям. Близько 1769 р. з'явився шаховий автоматМеханічний турок. Він був призначений для розваги королеви Марії Терезії. Машина дійсно непогано грала — усередині неї сидів сильний шахіст, який і робив ходи.

Прикрепленные файлы: 1 файл

05. А та П (ПЗ).docx

— 792.46 Кб (Скачать документ)

 

Таблиця 3.1 – позначення фігур в  масиві board та номери елементів масива figuresNumberдля кожного виду фігур

Фігура

Позначення в board

Номер елемета масива в figuresNumber

Білі

Чорні

Білі

Чорні

Ферзь

1

2

8

9

Слон

3, 5

4, 6

2

3

Кінь

7, 9

8, 10

4

5

Ладья

11, 13

12, 14

6

7

Пішак

15, 17, 19, 21, 23, 25, 27, 29

16, 18, 20, 22, 24, 26, 28, 30

0

1

Король

31

32

10

11


 

Таблиця 3.2– Позначення рівнів контролю поля фігурою

Значення

Розшифровка

0

Ніяких можливостей відносно цього  поля

1

Поле пусте. Можна ходити, але не можна бити (прямий хід в пішаків)

2

Поле криється королем, але походити він туди не може (враховуєтсья тільки для іншого короля)

3

Поле пусте, бите, але походити туди не можна (бите поле в пішаків)

4

Поле пусте, бите, можна ходити

5

Поле бите, зайняте ворожою фігурою

6

Поле бите, зайняте дружньою фігурою


 

Основні методи (функції) класу chess (ті, що можуть бути викликані зовні, з модифікатором доступу public):

  • randomCombination() – заповнює масив boardвипадковими числами, що позначають фігури, потім викликає функції підрахунку фігур, аналізу і т.д. Основні вимоги до випадкової комбінації описані в розділі 2. Усі вони дотримані. Детальніше про роботу підпрограми описано в наступному підрозділі;
  • defaultCombination()–розставляє шахи в початкове положення, після чого також викликає функції аналізу;
  • setFigure() – записує координати розстановки для кожної фігури з board, встановлює відповідним фігурам прапор присутності;
  • analyze() – викликає функії підрахунку фігур, підрахунку балів за фігурами, визначення можливих ходів і битих полів для кожної фігури і для сторони в цілому, функції аналізу комбінації на шах, пат, мат.Детальніше роботу функції описано в відповідному підрозділі.

Private-методи класу chess, викликаються з інших методів:

  • checkAnalyze() – аналіз комбінації на шах;
  • countFigures() – підрахунок фігур кожного виду;
  • scanWays() – аналіз можливих ходів і битих полів для кожної фігури;
  • setFields() – аналіз всіх контрольованих полів за білими і чорними;
  • kingWays() – уточнює можливі ходи короля.

Клас chessмістить масив об’єктів з 32 елементів класу figures.  Структура цього класу наведена на рисунку 3.6.

 

Рисунок 3.6 – структура класу  figures

Вміст цього класу був перелічений  вище. Детальніше його можна подивитись в лістингу.

 

3.3Генерація випадкових комбінацій

За генерацію випадкових комбінацій відповідає метод randomCombination() класу chess.  Основні вимоги до випадкових комбінацій наведені в розділі 2.

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

Крім розташування фігур для  кожної комбінації задається черга  ходу.

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

  1. Випадковим числом вибирається черга ходу.
  2. В циклі перебираються числа від 1 до 30 (всі фігури, крім королів);
  3. Для кожної фігури викликається метод setRandomкласу figures, який генерує випадкові координати, дотримуюючись певних правил залежно від номеру фігури;
  4. Після отримання координат метод randomCombination() перевіряє значення, що повернула функція setRandom(). Якщо фігура вимагає встановлення (setRandom = true) і поле, на яке вона посилається вільне, то поставити її на це поле. Виконувати кроки 3-4, доки не поле з згенерованими координатами не буде вільним;
  5. Виконати кроки 3-4 для всіх фігур від 1 до 30 (крім королів);
  6. Обрати того короля, чий зараз хід і поставити на випадкове вільне поле (метод setRandom);
  7. Проаналізувати биті поля (метод analyze());
  8. Обрати іншого короля і поставити на випадкове, вільне, не бите поле;
  9. Проаналізувати згенеровану комбінацію (метод analyze()).

Метод setRandom(intbuf) генерує випадкові координати. Точніше не генерує, а вираховує відносноцілочисельного аргумента buf. Аргумент випадковий і генеруєтьсяоб’єктом класу System.Randomв діапазоні значень від 0 до 127 в методі randomCombination(), що викликає setRandom(intbuf). Таке ускладнення зроблене для того, щоб не створювати багато об’єктів класу System.Random.

В найпростішому випадку x-координата – це остача від ділення аргументу bufна 8, а y-координата – результат від цього ділення. Звідси випливає, що якщо число bufвипало більше 63, то фігура на дошку виставлена не буде (в даному випадку координати задаються як вказівники масива, тобто починаючи від нуля). 

Для деяких фігур координати вираховуються  особливим чином:

  • Якщо фігура – офіцер з ID3 або 4, то вибрати координати однієї з білих клітинок;
  • Якщо фігура – офіцер з ID 5 або 6, то вибрати координати однієї з чорних клітинок;
  • Якщо фігура – білий пішак, то y-координату задати випадково в діапазоні від 2 до 7, а x-координату задати як суму початкової  x-координати та випадкового зміщення, що не перевищує              y-координату;
  • Якщо фігура – чорний пішак, виконати всі дії, визначені для білого пішака та інвертувати (відносно 8) його y-координату;
  • Якщо фігура – король, то y-координата вираховується, як результат від ділення аргументу bufна 16.

Будь яка фігура, крім короля, може мати згенеровану y-координату, що не входить в діапазон шахової дошки. В такому випадку фігура на дошку не ставиться. Таким чином досягається випадковість встановлення фігури (встановлювати фігуру чи ні), при чому король ставиться завжди. Належність y-координати діапазону дошки перевіряється в самому методі setRandom, що повертає значення типу bool (true якщо фігура знаходиться в заданому діапазоні).

Алгоритм генерування випадкових комбінацій наведено в додатку A.

 

3.4 Аналіз комбінацій

Аналіз шахових комбінацій виконує  метод analyze() класу chess. По суті він всього лиш викликає набір інших методів. Послідовність дій цих методів така:

  1. Задати всім елементам масиву figure[32] координати та видимість відповідно до їх розташування в масиві board[8, 8] – метод setFigures();
  2. Підрахувати кількість фігур кожного виду (заповнити масив figuresNumber[12])–метод countFigures();
  3. Визначити всі можливі ходи, биті та криті поля кожної фігури та чорних і білих загалом–метод scanWays();
  4. Уточнити ходи королів – метод kingWays();
  5. Проаналізувати комбінацію на шах – метод checkAnalyze().

Оскільки всі ходи позначаються через велику кількість текстових  міток (загальна їх кількість для  позначення ходів – 64), то керувати ними, звертаючись окремо до кожного, досить складно. Тому було вирішено створити клас ways з полем класу Label і створити масив об’єктів цього класу. Для централізації керування цим масивом його приховано в клас action, єдиним полем якого є масив ways.

На панелі фігур (зправа від дошки) кожен елемент є об’єктом класу  items. Цей клас містить об’єкт PictureBox (для позначення фігури) і об’єкт Label (для позначення їх кількості). Як видно з головного вікна, таких об’єктів 12. Вони утворюють масив, прихований в класі panel (Не System.Windows.Forms.Panel). Крім цього масиву клас panelмає ще одне поле типу int – номер обраного елементу при розстановці шахів вручну. Тобто клас panel містить інформацію з панелі фігур, клас action – про відображення ходів фігур на дошці.

4 РЕАЛІЗАЦІЯ  ПРОГРАМИ МОВОЮ С# НА ПЛАТФОРМІ .NET


 

4.1 Проект WindowsForms

Програму реалізовано, як проект WindowsForms. Для створення цього проекту необхідно запустити середовище VisualStudio (в даному випадку розглядається VisualStudio 2012). Далі створити новий проект. Зявиться наступне вікно:

Рисунок 4.1 – Створення нового проекту  в VisualStudio 2012

 

У цьому вікні потрібно обрати мову C#, підрозділ Windowsпроект WindowsFormsApplication. В полі nameнеобхідно ввести ім’я, після чого натиснути ОК.

Після цього створиться проект і  пуста форма – головне вікно  програми. Це клас Form1 унаслідуваний від класу FormбібліотекиSystem.Windows.Forms платформи .NET.  Далі на форму можна розміщувати компоненти.

Список компонентів, які можна  додавати на форму міститься у  вікні Toolbox. Якщо воно вимкнене, то увімкнути його можна обравши пункт Toolbox меню VIEW або натиснувши комбінацію клавіш Ctrl+Alt+X.

Усі компоненти WindowsFormsзнаходятся в dll-бібліотеці System.Windows.Forms. Для того щоб в файлі лістингу можна було їх викоритовувати необхідно підключити цю бібліотеку до файлу *.cs:

 

4.2 Розробка інтерфейсу

Бібліотека System.Windows.Forms містить багато компонентів віконного інтерфейсу. Для цільової програми знадобиться:

  • MenuStrip – для головного меню;
  • StatusStrip – для панелі стану;
  • Label – для всіх текстових написів у вікні програми;
  • PictureBox – контейнер для виведення зображень. Сюди поміщатимуться всі фігури, дошка та інші графічні елементи інтерфейсу;
  • Panel – елемент для групування кількох елементів. В даному випадку буде використаний для об’єднання шахової дошки та всіх фігур;
  • Button – кнопка. Це досить зручний елемент керування. Доцільно використати для основних функцій цільової програми;
  • OpenFileDialogта SaveFileDialog – діалогові вікна для вибору файлу для відкривання і зберігання відповідно. Необхідно використати, оскільки в програмі має бути можливість зберігання і завантаження комбінацій.

Після вибору і розташування необхідних компонентів та задання їх властивостей головне вікно набуло остаточного  вигляду. Вигляд головного вікна  наведений на рисунку 4.2.

 

 


Рисунок 4.2 – Остаточний вигляд вікна  пограми

 

Основні елементи вікна програми:

  • Головне меню;
  • Шахова дошка;
  • Панельфігур(ліворучвідшаховоїдошки);
  • Кнопки керування комбінаціями(нижче панелі фігур);
  • Рядок стану.

Головне меню має наступні пункти:

  • Файл - робота з файлами, вихід з програми:
    1. Відкрити комбінацію - завантажує шахову комбінацію з файлу і аналізує її;
    2. Зберегти комбінацію - зберігає поточну комбінацію в файл;
    3. Вихід - закриває програму;
  • Керування - маніпулювання комбінаціями:
    1. Генерувати комбінацію - випадковим чином розставляє шахи на дошці;
    2. Розставити шахи вручну - дозволяє самостійно розставити фігури і вибрати, чий хід;
    3. Відновити початкову комбінацію - розставляє фігури в їх початкові позиції;
  • Вигляд дошки - задає стиль дошки:
    1. Коричневий (за замовчуванням);
    2. Червоний;
    3. Натуральний;
  • Довідка - інформація про програму та довідка до неї:
    1. Про програму;
    2. Довідка.

Додаткового пояснення потребує панель фігур праворуч від шахової дошки. На цій панелі позначається кількість  фігур кожного виду, що присутні на дошці. Також з цієї панелі виконується  вибір фігури, якщо увімкнена ручна  розстановка шахів. Кількість фігур  позначається в правому нижньому кутку піктограми фігури. Максимальна  кількість фігур відповідає їх початковій комбінації. Якщо максимальна кількість  фігур якогось виду досягнена, то кількість відображається сірим  кольором. Якщо ні - то чорним. Наприклад, на рисунку 4.3 зображена ситуація, коли кількість чорних пішаків - 8 (максимальна), а білих – 7.

Информация о работе Рух Короля в шахах