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

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

;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-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; {Поиск пустог?/p>