ані між кожною кісточкою і її позицією в зібраної головоломці. Для вирішення використовуються алгоритми зразок алгоритму A *.
нерозв'язані комбінація, запропонована Ноєм Чепменом - малюнок 1.
Малюнок - 1
Можна показати, що рівно половину з усіх можливих 1 307 674 368 000 (= 15!) початкових положень пятнашек неможливо привести до зібраного увазі: нехай квадратик з числом i розташований до (якщо вважати зліва направо і зверху вниз) k квадратиків з числами меншими i. Будемо вважати ni=k, тобто якщо після кісточки з i-м числом немає чисел, менших i, то k=0. Також введемо число e - номер ряду порожньої клітки (рахуючи з 1).
Якщо сума
є непарної, то вирішення головоломки не існує.
Для узагальнених пятнашек (з бо? льшим, ніж 15, кількістю кісточок) задача пошуку найкоротшого рішення є NP-повною.
Якщо допустити поворот коробки на 90 градусів, при якому зображення цифр виявляться лежачими на боці, то можна перевести нерозв'язні комбінації в розв'язні (і навпаки). Таким чином, якщо замість цифр на кісточки нанести точки і не фіксувати положення коробки, то нерозв'язних комбінацій взагалі не виявиться.
2. Функціональне опис
У курсовій роботі використовуються основні можливості мови в роботі зі структурами, файлами, графікою.
В даній грі передбачалося створення:
1) інтуїтивно зрозумілого інтерфейсу;
) скромного, але графічно точного табло, де здійснюється переміщення цифр;
) зручного для користувача управління.
алгоритм комбінація гра число
Висновок
У ході виконання курсового проекту розроблена програма, що реалізує гру «п'ятнашки».
Зовнішній вигляд вікна програми представлений в додатку А, вихідний текст програми представлений у додатку Б.
Список використаних джерел
1. «Delphi. Програмування на мові високого рівня »Фаронов В.В., СПб .: Питер, 2011 - 640с .: ил. [Текст]
2. «Біблія Delphi - 2-е видання» Фленов М., С.-Пб, БХВ-Петербург, 2008р. [Текст]
Додаток А
Основне вікно програми на малюнку 2. Вікно з закінченням гри на малюнку 3.
Малюнок 2 - основне вікно
Малюнок 3 - перемога
Додаток Б
Лістинг програми: main;
, Messages, SysUtils, Classes, Graphics, Controls, Forms ,, StdCtrls, Menus, XPMan, ExtCtrls;
=class (TForm): TMainMenu ;: TMenuItem ;: TMenuItem ;: TTimer ;: TLabel; FormCreate (Sender: TObject); FormShow (Sender: TObject); N1Click (Sender: TObject); N2Click (Sender: TObject); tmr1Timer (Sender: TObject); ButClicked (Sender: TObject); CreatFishkas (); KillOldFihkas (); position (const x, y: integer): integer; victopia ();
{Private declarations}
{Public declarations};
Tfish=TButton;// Вказуємо тип фішок
=80;// Ширина фішки=10;// Відстань між фішками=D + W;// Відстань між х у фішок=3;// Розмір поля 4х4=1; M=9;// Розмірність масиву фішок=10; POLEL=10;// початкові позиції поля фішок на формі= Fishka raquo ;;
: TForm1 ;: array [N..M] of Tfish ;: array [N..M] of boolean ;, zeroY: integer ;: array [1..M, 1..2 ] of integer;: TDateTime;
{$ R * .dfm}
//розмір форми
FormSize; .Width:=(POLEL * 2) + (L * NXM) ;. Height:=(L * NXM) + POLET + 90; .Lbl1.Left:=Round (Form1. Width/2) - 35; .Lbl1.Top:=Form1.Height - 90 ;;
TForm1.FormCreate (Sender: TObject); i, ty, lx: integer;:=time ;; i:=0;
//заповнюємо масив координатами на які будуть випадковим чином ставитися
//фішки при початку нової гри:=POLET; lx:=POLEL; i:=N to M do begin [i, 1]:=lx; [i, 2]:=ty;:=lx + L; i mod NXM=0 then begin:=ty + L; :=POLEL ;;; () ;;
TForm1.FormShow (Sender: TObject); () ;;
//клік по пункту меню - нова гра
TForm1.N1Click (Sender: TObject); ();
(); ();:=time ;;
{скидає всі елементи масиву в true,
масив відповідає за неповторювані порядкові номери фішок
які вибираються випадковим чином