Рефераты. Еврістичне створення головоломки

- Занесення інформації в масив.

Значення змінної b, яке було знайдено раніше, вноситься в масив bs[і], за останнім елементом внесений у масив

- Перевірка чи заповнений масив.

Програма перевіряє чи заповнений масив повністю, якщо ні, те алгоритм повертається.

У підсумку ми маємо одномірний масив заповнений, у випадковому порядку неповторюваному цифрами від 1 до 16.

- Заповнення двовимірного масиву.

Заповнення двовимірного масиву, за допомогою інструкції For і змінних і й j, які позначають стовпець і рядок.

Алгоритм заповнення двовимірного масиву полягає в наступному:

- Спочатку змінної z привласнюється одиниця. Дана змінна нам необхідна як лічильник.

- Кожному елементу j рядка й і стовпця привласнюється строковий елемент, залежно від цифри вартої під номером z в одномірному масиві, якщо поточної елемент одномірного масиву містить цифру 8, те поточному елементу двовимірного масиву привласнюється строковий елемент «8». Виключенням становить цифра 16. У цьому випадку у двовимірний масив уводиться пробіл. Вибір строкового елемента здійснюється за допомогою інструкції case.

- Так відбувається доти, поки двовимірний масив не буде повністю заповнений.

3) Виведення табло.

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

Даний розділ реалізований в процедурі Vivod.

Загальний алгоритм (Рис. 2.2.3. Алгоритм виведення табло.) даного розділу полягає в наступному:

- Промальовування клітинок;

- Промальовування рамки;

- Виведення елементів масиву зверху клітинок табло;

Рис. 2.2.3. Алгоритм виведення табло

Промальовування клітинок;

Малювання кліток здійснюється в наступному порядку:

2) Визначення розміру майбутніх кліток, за допомогою двох змінні (h1, w1, координати верхньої лівої й правої нижньої крапок);

3) За допомогою процедури Setfillstyle, задаємо потрібний колір і стиль заповнення. Колір виберемо синій, а стиль заповнення поберемо Solidfill - суцільне заливання поточному кольором, тобто синім.

4) За допомогою процедури Bar вичерчуємо на екрані квадрат.

5) Щоб дані дії не повторювати 16 раз, використовуємо інструкцію For.

Промальовування рамки;

Для того, щоб табло мало закінчений вигляд, помістимо раніше створені клітинки в рамку, за допомогою процедури Line.

Виведення елементів масиву на клітинках табло;

У підсумку на екрані з'являється табло із шістнадцятьома клітками, залишається лише в центр цих кліток помістити цифри із двовимірного масиву.

Тому що ми перебуваємо в графічному режимі, то для висновку елементів двовимірного масиву використовуємо процедуру Outtextxy.

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

У майбутньому, коли користувач буде переміщати клітки, він фактично буде робити операції з масивом і на екран буде виводитися інформація з масиву, у якім здійснена перестановка, а клітки залишаться незмінними.

4) Пошук порожнього елементу.

У даному розділі здійснюється пошук порожнього елементу, щоб надалі відносно його можна було б здійснювати пересування

Даний розділ реалізований в процедурі Poisk. Програма за допомогою інструкції For і змінних i і j порівнює кожен елемент двовимірного масиву AS, з порожнім елементом, за допомогою інструкції IF і коли знаходить, привласнює значення змінних i і j змінним strok і stolb. Таким чином, змінні strok і stolb як би є координатами порожнього елементу.

Загальний алгоритм (Рис. 2.2.4. Алгоритм пошуку порожнього елементу.) даного розділу полягає в наступному:

- Вибір елементу масиву;

- Перевірка, чи є даний елемент пропуском;

Привласнення координат рядка і стовпця змінним;

Рис. 2.2.4. Алгоритм пошуку порожнього елементу

Вибір елементу масиву;

За допомогою інструкції For по черзі вибиратимемо кожен елемент масиву.

Перевірка, чи є елемент порожньою коміркою;

За допомогою інструкції If, порівнюємо кожен елемент масиву з пропуском.

Запам'ятовування координат порожньої комірки;

Змінним strok і Stolb привласнюємо координати порожнього елементу.

5) Введення напряму переходу.

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

Даний розділ алгоритму реалізований в процедурі Napravlenie.

Фактично деякою змінною ch (типу char) привласнюється код натиснутої клавіші.

Алгоритм процедури полягає в наступному:

- Користувачеві пропонується, за допомогою курсору, ввести напрями переходу.

- Після того, як користувач, натиснув кнопку на клавіатурі, код клавіші привласнюється змінною ch, за допомогою функції readkey [3];

Наприклад, якщо користувач ввів напрям курсору вгору, це означає, що користувач натиснув службову клавішу під кодом 72.

6) Переміщення елементів табло

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

Стрілка вліво - переміщає вліво цифру, що стоїть праворуч від порожньої клітинки;

Стрілка управо - переміщає управо цифру що стоїть зліва від порожньої клітинки;

Стрілка вниз - переміщає вниз цифру що стоїть зверху від порожньої клітинки;

Стрілка вгору - переміщає вгору цифру що стоїть знизу від порожньої клітинки.

Загальний алгоритм (Рис. 2.2.5. Алгоритм переміщення елементів табло.) реалізований в процедурі Zamena і полягає в наступному:

Вибір напряму перестановки;

Переміщення клітинок;

Рис. 2.2.5. Алгоритм переміщення елементів табло

Вибір напряму перестановки;

Коли користувач робить хід, він натискає службову клавішу, що кодується під певним номером. За допомогою інструкції IF і функції ord, вибирається напрями перестановки елементів.

Переміщення клітинок;

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

Наприклад, користувач ввів напрям курсору вгору, це означає, що користувач натиснув службову клавішу під кодом 72, тоді, за допомогою інструкції if і функції ord (if ord(ch)=72 then), здійснюється переміщення.

Переміщення здійснюється за наступним принципом: порожньої клітинки, а саме елементу масиву з координатами as [strok, stolb], привласнюється вміст елементу що стоїть під порожньою клітинкою (as [strok, stolb]:= as [strok+1, stolb];), а відповідно елементу, що стоїть під порожньою клітинкою привласнюється пропуск (as [strok+1, stolb]:=' ';).

3. Програмування

Для написання програми знадобилося використання декількох програм і функцій стандартних модулів (див. Табл. 3.1.). Також для зручності текст програми був розбитий на декілька окремих дій, оформлених у вигляді процедур (див. табл. 3.2.)

Таблиця 3.1. Використані стандартні процедури та функції

32

Таблиця 3.2. Підпрограми користувача

Ім'я підпрограми

Призначення

Процедури

Основні процедури

Tablo

Дана процедура формує табло, заповнене випадковими цифрами, що не повторюються, від 1 до 8 і однією порожньою кліткою. Процедура реалізована з використанням двовимірного масиву.

Певній змінній привласнюється випадковим чином певне число від 0 до 8, при чому робиться негайна перевірка для виключення повторень. Після завершення, двовимірному масиву привласнюється значення змінної на одиницю більше (оскільки ми визначили діапазон її значень від 0 до 8), при чому числу 9 відповідає

Vivod

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

Napravlenie

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

Poisk

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

Zamena

Програма залежно від вибору напряму здійснює перестановку елементів в двовимірному масиві.

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

Також ця процедура надає можливість користувачу скористатися бонусом: при натисканні клавіші END, розклад складається самотужки.

Game15

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

Гра продовжуватиметься до тих пір, поки користувач не перерве гру за допомогою клавіші ESC, або не вирішить розпочати гру заново за допомогою клавіші ENTER.

Допоміжні процедури

Bonus

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

Страницы: 1, 2, 3



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.