Реферат: Игра "Пятнашки"

Игра "Пятнашки"

width="2" height="25" align="LEFT" />




Нет



Да









Схема - 8 Раздел Итог.


Количество ходов

В течение всей игры, программа записывает каждый сделанный ход. Таким образом, по завершению игры, т.е. когда пользователь разложил верный расклад, а не когда просто покинул игру, мы знаем точное количество ходов, за которое игрок разложил расклад (Количество ходов присваивается переменной hod).


Считывание результатов из файла.

В данном разделе программа считывает данные из файла res.txt и для удобства обработки этой информации, вносит ее в два массива it и res. Массив it содержит информацию о количестве ходов, за которое игроки, игравшие ранее разложили расклад, массив res содержит имена этих игроков.


Проверка, входит ли данный результат в список лучших

В данном разделе результат текущего игрока сравнивается с результатами игроков из массива it.

В случае если игроки, игравшие ранее разложили расклад за наименьшее количество ходов, то программа завершает свою работу и переходит в Главное меню, в противном случае программа продолжает свою работу (сл. пункт.)

Ввод имени.

Пользователю предлагается ввести свое имя, чтобы его имя и результат были сохранены в списке лучших игроков.


Перестановки в файле результатов.

В данном разделе необходимо совершить перестановки в массиве, но нужно не просто удалить какой то элемент, а на его место поставить текущий результат, нужно осуществить сдвиг всех элементов на один, а если текущей результат будет десятым, то заменить его.

Эту задачу можно решить несколькими способами. Один из способов, это совершать перестановки непосредственно в массивах it и res и осуществлять сдвиг элементов, но, на мой взгляд, наиболее простой способ, это создать еще два массива, для удобства назовем их itv и resv, и в результате совершить простейшие операции перемещения элементов из одного массива в другой. Эти операции совершим по следующей схеме:

При помощи инструкции For сравниваем каждый элемент массива результатов (it), с результатом текущего игрока (переменная hod). Если результат игрока из массива it меньше результата текущего игрока, то результат и имя игрока из массива it и res присваиваем массивам itv и resv. Если результат текущего игрока меньше чем очередной элемент массива it и больше предыдущего элемента массива it, то результат текущего игрока вносится в очередной элемент массивов itv и его имя присваивается очередному элементу массива resv, а результат текущего элемента массивов it и res добавляется в массивы itv и resv за результатами текущего игрока. Соответственно когда инструкция For начнет сравнивать следующий элемент массива it, то результат текущего игрока, будет меньше, как текущего так и предыдущего элементов массива it, а это не удовлетворяет условию. Это означает, что очередной элемент массивов it и res просто добавится за последним элементом массивов itv и resv. Так будет происходить пока массивы itv и resv не будут полностью заполнены, а последний элемент массивов it и res, соответственно не войдут, во вновь созданный список лучших игроков, которые описаны в массивах itv и resv. В итоге мы осуществим сдвиг результатов на одну позицию.

Для более полного описания данной процедуры рассмотрим пример:

В таблице 3 расположены две строки. В верхней содержатся элементы массива it, а в нижней массива res.

Таблица 3 – Массивы it и res.


It 10 20 30 40 50 60 70 80 90 95
res A B C D E F G H K L

Предположим, что текущий игрок, под именем Z, победил за 44 хода.

Программа начинает искать в каком интервале расположен текущей результат (44). Для этого каждый элемент массива it сравнивается с переменной hod. Если первый элемент меньше 44, то его имя и результат переносится в массивы itv и resv, если следующий элемент меньше 44, то и его переносят в массивы itv и resv (таблица 4)

Таблица 4 – Массивы it и res.


Itv 10 20







resv A B








Так происходит до тех пор пока, программа не найдет элемент в массиве it, который больше 44, но при этом программа проверяет, что 44 больше и предыдущего элемента массива it. Если данное условие выполняется, то программа добавляет результат и имя текущего игрока под именем Z, в массивы itv и resv соответственно, а текущий результат из массивов it и res, также добавляется в массив, но уже за результатами игрока Z (Таблица 5).

Таблица 5 – Массивы it и res.


Itv 10 20 30 40 44 50



resv A B C D Z E




У нас получилось, что 44 меньше 50, но больше 40, по этому за результатом 40 добавили 44, а за ним текущий элемент с результатом 50.

Далее, при проверки результата 44 со следующем элементом с результатом 60, 44 будет меньше результата 60, но 44 и меньше результата 50, а следовательно, условие не выполняется и игрок с результатом 60 переносится в массивы itv и resv. Так происходит пока оба массива itv и resv, не будут заполнены. А последний результат соответственно исчезнет (Таблица 6)

Таблица 6 – Массивы it и res.


Itv 10 20 30 40 44 50 60 70 80 90
resv A B C D Z E F G H K

На первый взгляд, все достаточно усложнено, но при создании алгоритма перестановки непосредственно внутри массивов it и res, получается еще хуже.


Сохранения результатов в файл.

В данном разделе информация из массивов itv и resv вносится в файл res.txt. Данный файл открывается в режиме перезаписи и информация в файле обновляется и когда пользователь выдя в Главное меню зайдет в раздел Результаты, он уже уведет обновленную информацию из файла res.txt и соответственно и свой результат.

Результаты.

В данном разделе для пользователя отображается информация о лучших игроках, которые за наименьшее количество ходов собрали требуемую комбинацию.

Данный раздел реализован при помощи процедуры result. Данная процедура считывает информацию из файла res.txt и выводит считанную информацию на экран для ознакомления пользователю.

Реализована данная процедура, точно таким же способом, как и в разделе 5.1 Описание, за исключением, того, что обращение происходит к файлу res.txt, по этому подробно останавливаться на данном разделе не имеет смысла.

Описание входных и выводных данных

В таблице 7 описываются входные и выходные данные, которые выстроены примерно в том порядке, в котором они должны взаимодействовать с пользователем

Таблица 7 Описание входных и выходных данных


Входные Выходные

2. Выбор раздела в Главном меню программы


4. Ввод при помощи курсора направления перехода:

Влево;

Вправо;

Вверх

Вниз;

ESC – покинуть игру в любой момент

5. Ввод имени в случае победы за наименьшее количество ходов.

1. Отображение на экране Главного меню


3. Вывод на экран ранее выбранного раздела:

Описание – вывод на экран описание программы

Управление – вывод на экран информацию о клавишах управления

Результаты – вывод на экран списка лучших игроков

Игра – Вывод на экран табло с комбинацией цифр



Программное и аппаратное обеспечение программы.

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


Руководство пользователя


8.1. Для запуска программы необходимо запустить файл Super15.exe. Откроется Главное меню (Рисунок 1)


Рисунок 1 – Главное меню


Основное меню содержит пять пунктов:

Описание (About program).

Управление (Key).

Игра (Play).

Результаты (Results).

Выход (Exit).

Перемещаясь при помощи курсора вверх или вниз, можно выбирать интересующие Вас меню.


8.2 При первом запуске программы пользователю рекомендуется прочитать раздел Описание (Рисунок 2), в котором указанно:

Назначение программы;

Разработчик;

Описание программы;


Рисунок 2 – Окно Описание


8.3 Раздел Управление.


Здесь пользователю выводится на экран клавиши управления (Рисунок 3).

Рисунок 3 - Управление


8.4 Раздел Игра.


При переходе в этот раздел перед пользователем открывается основное табло игры (Рисунок 4), на котором расположены 15 цифр, заполненные в случайном порядке и одно пустое поле.



Рисунок 4 – Основное игровое поле.


Управление происходит при помощи клавиш курсора:

Стрелка влево – перемещает влево цифру, стоящую справа от пустой клетки;

Стрелка вправо – перемещает вправо цифру стоящую слева от пустой клетки;

Стрелка вниз – перемещает вниз цифру стоящую сверху от пустой клетки;

Стрелка вверх – перемещает вверх цифру стоящую снизу от пустой клетки.

Пользователю необходимо при помощи курсора перемещать клетки табло, до тех пор, пока на экране не отобразится, последовательная комбинация цифр, как показано на рисунке 5



Рисунок 5 – Игровое поле с правильно заполненной, комбинацией.


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

В течение всей игры, программа считает каждый ход игрока и если игрок раскладывает требуемую комбинацию, за меньшее количество ходов, чем это сделали игроки ранее, то после победы, пользователю предлагается ввести свое имя и информация об игроке, который разложил расклад быстрее, заносится в список лучших игроков (Рисунок 6).

Рисунок 6 - Ввод имени


8.5 пункт Результаты.


В данном разделе меню можно посмотреть результаты лучших игроков (Рисунок 7), а именно тех игроков, которые собрали требуемую комбинацию за наименьшее количество ходов.

На экране небольшая табличка в левом столбце Move записано количество ходов, а в правом Name имя игрока.


Рисунок 7 – Список лучших игроков


8.5 Последний пункт меню Выход.


При нажатии на данный пункт меню, программа завершает свою работу.


Заключение

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

Целью данной курсовой работы, являлось углубление знаний и расширение навыков по разработке алгоритмов и их реализации на персональном компьютере, на мой взгляд, разработанная мной программа, вполне отвечает поставленным целям. Особенностями данной программы является:

Четко построенный алгоритм;

Интуитивно понятный интерфейс;

Удобное управление;

Простота в использовании;

Вполне понятное руководство пользователя;

Отсутствие лишних дополнений.


Список литературы

10.1 Учебное пособие. «Основы алгоритмизации и программирования», Е. Н. Сафьяновой

10.2 Самоучитель. «Программирование в Turbo Pascal», Н. Культин.

10.3 Открытие Интернет источники.

Приложение 1 Листинг программы

program Game;

uses crt, Graph;

var

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

bs:array[1..16] of integer; {Массив для заполнения случайными числами}

men:array[1..5] of integer; {Массив выводи элементы Главного меню}

res:array[1..10] of string; {Имена игроков с лучшими результатами}

it:array[1..10] of integer; {Результаты лучших игроков}

resv:array[1..10] of string; {Массив со вновь сформированным списком лучших игроков}

itv:array[1..10] of integer; {Массив со вновь сформированным списком результатов лучших игроков}

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

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

hod:integer; {Счетчик, считывает каждый ход сделанный пользователем}

lom:integer; {Переменная для работы с Главным меню}

name:string; {Имя игравшего пользователя}

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

prov:boolean;{Проверка правильности расклада}

f: text; {файловая переменная}

procedure Vivod;

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

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

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

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

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

begin

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

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 readFile;

{Добавляет в файл информацию о лучших результатах}

begin

assign(f,'res.txt'); {Объявления файла}

reset(f); {Открытие файла}

j:=1;

for i:=1 to 10 do

begin

readln(f,res[i]); {Занесение имен лучших игроков из файла в массив}

readln(f,it[j]); {Занесение результатов лучших игроков в массив}

j:=j+1; {Счетчик для лучших результатов}

end;

close(f);

end;

procedure writeFile;

{Считывает файл с лучшими результатами}

begin

assign(f,'res.txt'); {Объявление файла}

rewrite(f);{Открытие в режиме перезаписи}

for i:=1 to 10 do

begin

writeln(f,resv[i]);writeln(f,itv[i]); {Внесение информации о лучших игроках и их результатах из массивов в файл}

end;

close(f);

end;


procedure Mesto;

{Процедура в которой устанавливается занял ли игрок какое либо место, если да то занесение в список лучших игроков}

var chetcik:integer; {Счетчик, объявляет что информация о лучим игроке уже внесена, повторной информации не должно быть}

begin

if prov = true then {Если игрок разложил расклад}

begin

readfile; {Процедура считывание информации из файла с лучшими результатами}

chetcik:=0;

j:=1;

for i:=1 to 10 do

begin

if (hod<=it[i]) and (hod>=it[i-1]) and (chetcik<1) then

begin

{Ввод имени игрока}

OutTextXY(132,325,'will Enter name and press Enter:');

line(400,338,530,338);

GoToXY(52,21);

read(name);

{Присвоение очередному элементу данных текущего игрока}

itv[i]:=hod;

resv[i]:=name;

j:=j+1;

chetcik:=1;

end;

{Перенос из одного массива в другой}

if j<=10 then

begin

itv[j]:=it[i];

resv[j]:=res[i];

j:=j+1;

end;

end;

writeFile; {Сохранение информации в файл}

OutTextXY(230,360,'For leaving press ENTER');

readln;

end;

end;

procedure proverka;

{Проверка правильно ли разложено табло}

begin

prov:=false;

if (as[1,1]='1 ') and (as[1,2]='2 ') and (as[1,3]='3 ') and (as[1,4]='4 ')

and (as[2,1]='5 ') and (as[2,2]='6 ') and (as[2,3]='7 ') and (as[2,4]='8 ')

and (as[3,1]='9 ') and (as[3,2]='10') and (as[3,3]='11') and (as[3,4]='12')

and (as[4,1]='13') and (as[4,2]='14') and (as[4,3]='15') and (as[4,4]=' ')

then

begin

prov:=true; {Если табло разложено верно, то ИСТИНА}

OutTextXY(230,100,'Congratulate You have won');

Mesto; {Процедура, устанавливающая на каком месте текущий пользователь}

end;

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; {Передвижение в массиве}

proverka; {Проверка является ли данный расклад верным}

until (ord (ch)=27) or (prov=true);

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

end;

procedure help;

{Переход в режим справки}

var f: text; {Файловая переменная}

g1:string; {Переменная для работы со строками в файле}

begin

clrscr;

assign(f,'fhelp.txt'); {Объявление файла}

reset(f); {Открытие файла}

readln(f,g1); writeln(g1); {Присвоение переменной строки файла и вывод ее на экран}

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

writeln('For leaving press ENTER');

readln;

close(f);{Закрытие файла}

end;

procedure result;

{Отображение лучших игроков}

begin

clrscr;

GoToXY(26,5);

writeln('Best players');

assign(f,'res.txt');

reset(f);

readfile; {Считывание информации из файла лучших результатов}

{Вывод на экран в строгом порядке имена и результаты лучших игроков}

GoToXY(26,8); write('Move Name');

GoToXY(26,10); write(it[1]);GoToXY(36,10); writeln(res[1]);

GoToXY(26,11); write(it[2]);GoToXY(36,11);writeln(res[2]);

GoToXY(26,12); write(it[3]);GoToXY(36,12);writeln(res[3]);

GoToXY(26,13); write(it[4]);GoToXY(36,13);writeln(res[4]);

GoToXY(26,14); write(it[5]);GoToXY(36,14);writeln(res[5]);

GoToXY(26,15); write(it[6]);GoToXY(36,15);writeln(res[6]);

GoToXY(26,16); write(it[7]);GoToXY(36,16);writeln(res[7]);

GoToXY(26,17); write(it[8]);GoToXY(36,17);writeln(res[8]);

GoToXY(26,18); write(it[9]);GoToXY(36,18);writeln(res[9]);

GoToXY(26,19); write(it[10]);GoToXY(36,19);;writeln(res[10]);

GoToXY(26,23);writeln('For leaving press ENTER');

readln;

end;

procedure avtor;

{Вывод общей информации на экран в раздел описание }

var f: text; {Файловая переменная}

g1:string; {Переменная которой присваивается очередная строка из файла и выводится на экран}

begin

clrscr;

assign(f,'fhelp1.txt');

reset(f);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

readln(f,g1); writeln(g1);

writeln('For exit press ENTER');

readln;

close(f);

end;

begin

{Основная программа}

{Вывод на экран главного меню}

{Элементы Главного меню, один из которых закрашен белым цветом, а остальные зеленым}

men[1]:=15;

men[2]:=2;

men[3]:=2;

men[4]:=2;

men[5]:=2;

repeat

clrscr;

strok:=1; {Текущая строка}

Lom:=1;

{Выбор цветов}

GoToXY(32,10); Textcolor(men[1]); writeln('Key');

GoToXY(32,11); Textcolor(men[2]); writeln('About program');

GoToXY(32,12); Textcolor(men[3]); writeln('Play');

GoToXY(32,13); Textcolor(men[4]); writeln('Results');

GoToXY(32,14); Textcolor(men[5]); writeln('Exit');

ch:=readkey; {Выбор направления передвижение элементов меню}

if (ord(ch)=80) then {Если вниз тогда текущий становится белым, а нижний становится зеленым}

begin

for i:=1 to 5 do

begin

if (men[i]=15) and (strok<>5) then

begin

men[strok]:=2;

men[strok+1]:=15;

end

else strok:=strok+1;

end;

end;

if ord(ch)=72 then {Если вверх, то текущий белым, а верхний зеленым}

begin

for i:=1 to 5 do

begin

if (men[i]=15) and (strok<>1)then

begin

men[strok]:=2;

men[strok-1]:=15;

end

else strok:=strok+1;

end;

end;

if ord(ch)=13 then {Если нажат ENTER}

begin

for i:=1 to 5 do

begin

if men[i]=15 then

begin

if Lom=1 then begin Help; break; end; {Переход в режим справки}

if Lom=2 then begin avtor; break; end; {Переход в режим игры}

if Lom=3 then begin Game15;break; end; {Переход в режим игры}

if Lom=4 then begin result;break; end; {Переход в режим игры}

end

else Lom:=Lom+1;

end;

end;

until Lom=5 {До тех пор пока не нажат пункт EXIT}

end.

Приложение 2 Результаты работы.


Для демонстрации результата работы программы, возьмем основной раздел ИГРА.

При запуске программы появляется табло, заполненное случайными неповторяющееся цифрами от 1 до 15 и один пустой элемент (Рисунок 8).


Рисунок 8 – Основное табло со случайными числами


Далее пользователю предлагается сделать ход. К примеры переместить цифру на пустое место. Для этого необходимо нажать клавишу (вверх) на клавиатуре. В результате цифра один переместится вверх, а пустая клетка перемещается на место единицы (Рисунок 9).



Рисунок 9 – Первый ход

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

К примеру, игрок долго играл и у него выпал следующий расклад (Рисунок 10).

Рисунок 10 – очередной ход.


Теперь пользователю необходимо сделать один, последний ход, а именно переместить клетку с цифрой 15 на пустой элемент. В результате расклад будет выполнен (Рисунок 11).

В случае если игрок разложил требуемый расклад за наименьшее количество ходов, чем игроки, игравшие ранее, то пользователю предлагается ввести имя и в дальнейшем его имя и результаты будет отображаться в разделе Результаты (Рисунок 11).

Рисунок 11 – конец игры

59