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

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


10.   Заключение

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

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

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

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

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

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

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

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


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

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 – конец игры


Информация о работе «Игра "Пятнашки"»
Раздел: Информатика, программирование
Количество знаков с пробелами: 46914
Количество таблиц: 9
Количество изображений: 27

Похожие работы

Скачать
145807
5
2

... ошибок на этом пути, то есть установки или проявления характера взрослых членов семьи, и сами по себе осложняющие отношение с детьми. Глава 2. Эмпирическое исследование преодоления страхов у детей дошкольного и младшего школьного возраста   2.1 Описание экспериментальной выборки и методов исследования Определить боящегося ребенка обычно не составляет труда. Об этом мы уже не раз говорили, ...

Скачать
14287
1
7

... Dialogs 2.3.1.2     Внешний вид формы 2.3.1.2     Входные данные положение фишек; 2.3.1.3     Промежуточные данные проверка на наличие «собранности» мозайки; 2.3.1.4     Выходные данные результат игры. 2.3.1.5     Блок-схемы алгоритмов Приложение А, стр. 13 2.3.1.6     Текст модуля Приложение Б, стр. 25   ПРИЛОЖЕНИЯ ...

Скачать
161667
15
11

... и лишь изредка - в сочетаниях. Глава 3. Опытно-экспериментальная часть   3.1 Организация и проведение педагогического эксперимента   Для того, чтобы выявить влияние подвижной игры на развитие быстроты и ловкости у детей 6-7 лет, было организовано и проведено исследование на базе МДОУ «Детский сад №10 комбинированного типа «Теремок» г.Зеленогорска Красноярского края. В детском саду ...

Скачать
170262
21
2

... гармоничного развития личности. В этом аспекте, подвижные игры выступают как эффективное средство физической подготовленности. ГЛАВА 2 ПОДВИЖНЫЕ ИГРЫ КАК СРЕДСТВО РАЗВИТИЯ ПСИХОФИЗИЧЕСКИХ КАЧЕСТВ У ДЕТЕЙ 6-7 ЛЕТ   2.1 Подвижная игра, ее значение   Игра может быть средством самопознания, развлечения, отдыха, средством физического и общего воспитания. Игра – очень эмоциональная деятельность, ...

0 комментариев


Наверх