на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Еврістичне створення головоломки
p align="left">У майбутньому, коли користувач буде переміщати клітки, він фактично буде робити операції з масивом і на екран буде виводитися інформація з масиву, у якім здійснена перестановка, а клітки залишаться незмінними.

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 на клавіатурі і розклад майже розбереться.

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

Таблиця 3.3. Опис вхідних і вихідних даних

Вхідні

Вихідні

2. Введення за допомогою курсору напрямку переходу:

- Вліво;

- Вправо;

- Вгору

- Вниз;

ESC - залишити гру в будь-який момент

1 Гра - вивід на екран табло з комбінацією цифр.

3.1 Інструкція програміста

Дана програма складається з наступних файлів:

15.PAS - містить основний текст програми;

Graph.tpu - модуль, що дозволяє виконувати операції з графічними об'єктами;

EGAVGA.BGI - файл, необхідний для ініціалізації графічної системи.

Файл EGAVGA.BGI повинен знаходитися в робочому каталозі, наявність файлу EGAVGA.BGI перевіряється під час запуску програми. Без нього робота програми неможлива.

4. Тестування

Тестування програми з відповідними малюнками і коментарями наведений у додатку 1.

Додаток А

Інструкція користувача

Дана програма-головоломка призначена для розвитку логічного мислення користувача, а також для використання у якості розважальної гри.

Для запуску гри досить будь-якого комп'ютера, на якім установлена хоч яка-небудь операційна система, сімейство Windows.

Управління у програмі відбувається за допомогою клавіш курсору, а також клавіш END та ESC.

Після того, як гру розпочато, користувачеві пропонується гральне поле (Рис. А.1. Гральне поле), що складається з авторських даних, деяких вказівок щодо керування і грального поля

Рис. А.1. Гральне поле

Користувачеві необхідно за допомогою курсору переміщати клітки табло, до тих пір, поки на екрані не відобразиться, послідовна комбінація цифр. (Рис. А.2 Гральне поле)

Рис. А.2 Гральне поле

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

Додаток Б

Текст програми

15.pas

{*************************************************************}

{*kyrsova robota na temu 'Evristuchne stvorennja golovolomku»*}

{*Vukonav stydent grypu KSM-09-2 *}

{* Levenec* Artem *}

{*************************************************************}

program Game;

uses crt, Graph;

var

as:array [1.. 4,1..4] of string; {Двухмерный массив, содержит элементы табло}

bs:array [1..16] of integer;

hod:integer;

i, j:integer; {Переменные для работы с массивами}

strok, stolb:integer; {Координаты пустого элемента}

ch:char; {Переменная, которой присваивается код нажатой клавиши на клавиатуре}

procedure Vivod;

{Процедура вывода на экран табло с цифрами сформированное на момент отображения}

var lx, ly:integer; {Координаты вывода двухмерного массива}

x, y:integer; {Координаты клеток}

j1, i1:integer; {Переменные счетчики, для рисование клеток}

w1, h1:integer; {Ширина и высота клеток}

begin

OutTextXY (70,10,'*************************************************************');

OutTextXY (70,20,'*Kyrsova robota na temy, Evristuchne stvotennja golovolomku,*');

OutTextXY (70,30,'* Vukonav stydent grypu KSM-09-2 *');

OutTextXY (70,40,'* Levenec* Artem *'); OutTextXY (70,50,'*************************************************************');

OutTextXY (210,90,'For leaving press ESC');

OutTextXY (180,100,'Dlja zavershennya natusnit END');

w1:=30;

h1:=30; {Клетка размером 30 на 30}

for i1:=0 to 3 do {Цикл, прорисовки клеток}

for j1:=0 to 3 do

begin

x:=235+j1*35; {Сдвиг клеток по х}

y:=150+i1*35; {Сдвиг клеток по у}

setFillStyle (1,1); {Цвет и стиль клеток, цвет синий, стиль заполнение текущем цветом}

Bar (x, y, x+w1, y+h1); {Рисование клетки}

end;

lx:=245;

ly:=162;

for i:=1 to 4 do {Цикл вывода двухмерного массива по вверх клеток}

begin

for j:=1 to 4 do

begin

OutTextXY (lx, ly, as [i, j]); {Вывод текста на экран}

lx:=lx+35;

end;

lx:=245;

ly:=ly+35;

end;

line (220,135,220,300); {Рисование рамки}

line (385,135,385,300);

line (220,135,385,135);

line (220,300,385,300);

end;

procedure Tablo;

{Формирование табло при первом запуске заполненное случайными и неповторяющимися цифрами}

var b:integer; {Переменная, которой присваивается случайное число}

k, z:integer; {Счетчики для операций с массивами}

begin

randomize;

For z:=1 to 16 do

begin

b:=random(15); {Выбор случайного числа}

k:=1;

while k<>17 do {Цикл пока не будет заполнен массив с целыми цифрами}

begin

if bs[k]=b then

begin

b:=random(17);

k:=1;

end

else k:=k+1;

end;

bs[z]:=b; {Присвоение очередного неповторяющегося элемента массива}

end;

z:=1;

for i:=1 to 4 do {Заполнение двухмерного массива, вместо цифр из одномерного, присваиваются строковые элементы}

begin

for j:=1 to 4 do

begin

case bs[z] of

1: as [i, j]:='1 ';

2: as [i, j]:='2 ';

3: as [i, j]:='3 ';

4: as [i, j]:='4 ';

5: as [i, j]:='5 ';

6: as [i, j]:='6 ';

7: as [i, j]:='7 ';

8: as [i, j]:='8 ';

9: as [i, j]:='9 ';

10: as [i, j]:='10';

11: as [i, j]:='11';

12: as [i, j]:='12';

13: as [i, j]:='13';

14: as [i, j]:='14';

15: as [i, j]:='15';

16: as [i, j]:=' ';

end;

z:=z+1;

end;

end;

vivod; {Вывод табло на экран}

end;

Procedure Poisk;

{Поиск пустого элемента в табло}

begin

for i:=1 to 4 do

begin

for j:=1 to 4 do

begin

if as [i, j] = ' ' Then {Поиск, равен ли текущий элемент пробелу}

begin

Strok:=i; {Если равен, то присваиваются координаты пустого элемента}

Stolb:=J

end;

end;

end;

end;

procedure bonus;

{Бонус, для проверки. При нажатии клавиши END на клавиатуре расклад собирается}

begin

as [1,1]:='1 '; as [1,2]:='2 '; as [1,3]:='3 '; as [1,4]:='4 ';

as [2,1]:='5 '; as [2,2]:='6 '; as [2,3]:='7 '; as [2,4]:='8 ';

as [3,1]:='9 '; as [3,2]:='10'; as [3,3]:='11'; as [3,4]:='12';

as [4,1]:='13'; as [4,2]:='14'; as [4,4]:='15'; as [4,3]:=' ';

Strok:=4; Stolb:=3;

end;

procedure napravlenie;

{Ввод направления перехода}

begin

ch:=readkey; {Переменной присваивается код нажатой пользователем клавиши на клавиатуре}

end;

procedure Zamena;

{Передвижение клеток с цифрами в зависимости от выбора пользователя}

begin

napravlenie; {Процедура, ввод направления перехода}

if ord (ch)=79 then bonus; {Если нажата клавиша END на клавиатуре то расклад сам собирается}

if ord(ch)=75 then {Если нажата клавиша влево}

begin

if stolb<>4 then {Если это не последний элемент, стоящий у границы табло}

begin

as [strok, stolb]:=as [strok, stolb+1]; {На место пустого элемента присваивается элемент стоящий справа от пустого}

as [strok, stolb+1]:=' '; {Элементу стоящему справа от пустого присваивается пустой элемент}

stolb:=stolb+1; {Новая координата пустого элемента}

hod:=hod+1; {Очередной сделанный ход}

end;

end;

if ord(ch)=72 then {Если нажата клавиша вверх}

begin

if strok<>4 then {Если это не последний элемент, стоящий у границы табло}

begin

as [strok, stolb]:=as [strok+1, stolb]; {На место пустого элемента присваевается элемент стоящий снизу от пустого}

as [strok+1, stolb]:=' '; {Элементу стоящему снизу от пустого присваевается пустой элемент}

strok:=strok+1; {Новая координата пустого элемента}

hod:=hod+1; {Очередной сделанный ход}

end;

end;

if ord(ch)=77 then {Если нажата клавиша вправо}

begin

if stolb<>1 then {Если это не последний элемент, стоящий у границы табло}

begin

as [strok, stolb]:=as [strok, stolb-1]; {На место пустого элемента присваивается элемент стоящий слева от пустого}

as [strok, stolb-1]:=' '; {Элементу стоящему слева от пустого присваивается пустой элемент}

stolb:=stolb-1; {Новая координата пустого элемента}

hod:=hod+1; {Очередной сделанный ход}

end;

end;

if ord(ch)= 80 then {Если нажата клавиша вниз}

begin

if strok<>1 then {Если это не последний элемент, стоящий у границы табло}

begin

as [strok, stolb]:=as [strok-1, stolb]; {На место пустого элемента присваивается элемент стоящий сверху от пустого}

as [strok-1, stolb]:=' '; {Элементу стоящему сверху от пустого присваивается пустой элемент}

strok:=strok-1; {Новая координата пустого элемента}

hod:=hod+1; {Очередной сделанный ход}

end;

end;

Vivod;

end;

procedure Game15;

{Подключение графики и переход в режим ИГРЫ}

var grMode:integer; {Режим работы видеосистемы}

grPath:string; {Путь к файлу}

grDriver:integer; {Используемый программой драйвер видеоадаптера}

begin

hod:=0;

grDriver:=VGA;

grmode:=VGAHi;

grPath:='EGAVGA.BGI';

initGraph (grDriver, grMode, grPath); {Инициализация графического режима}

Tablo; {Формирование табло}

Poisk; {Поиск пустого элемента}

repeat {Цикл, пока не нажата клавиша ESC или пока игрок не победил играть}

Zamena; {Передвижение в массиве}

until (ord (ch)=27);

closeGraph; {Закрытие графического режима}

end;

begin

repeat {Цикл, доки не натиснута клавіша ESC}

Game15; {Виклик процедури переходу у режим гри}

until ord(ch)=27

end.

Висновок

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

Метою даної курсової роботи, було поглиблення знань і розширення навичок по розробці алгоритмів і їх реалізації на персональному комп'ютері, розроблена мною програма, цілком відповідає поставленим цілям. Особливостями даної програми є:

- Чітко побудований алгоритм;

- Інтуїтивно зрозумілий інтерфейс;

- Зручне керування;

- Простота у використанні;

- Відсутність зайвих доповнень.

До недоліків даної програми можна віднести наступне:

Використання стандартного відеорежиму VGA, 640 на 480 пікселов і палітрою в 16 кольорів, замість вищих дозволів (800 на 600 пікселов) і палітри в 256 кольорів.

Перелік посилань

1. Кассера В. Turbo Pascal 7.0 / В. Кассера, Ф. Кассера - М.: DiaSoft, 2003. - 425 с.

2. Ілюстрований самовчитель по Турбо Паскалю [Електронний ресурс] - Режим доступу до книги:

http:// 256bit.ru/education/TurboPascal/;

3. Еврістичні функції [Електронний ресурс] - 2001. - Глава 4 - Режим доступу до книги:

http://rriai.org.ru/evristicheskie-funktsii.html;

4. Еврістика [Електронний ресурс] // Вікіпедія - вільна енциклопедія - 2009. - Режим доступу до статті:

http://ru.wikipedia.org/wiki/Эвристика;

5. Пятнашки [Електронний ресурс] // Вікіпедія - вільна енциклопедія - 2009. - Режим доступу до статті:

http://ru.wikipedia.org/wiki/Пятнашки

6. Використання графічного інтерфейсу [Електронний ресурс] // Керівництво по мові B. Pascal 7 & Objects/LR - 1997. - Глава 19 - Режим доступу до книги:

http://www.citforum.ru/programming/bp70_lr/lr19.shtml#13;

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



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.