Игра "Пятнашки"
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
;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>