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

У таблиці 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, 3



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