p align="left">bar(35,285,605,335); bar(35,355,605,405); {Рисование эллипса под надписью ***MENU***} fillellipse(298,57,210,35); {Надписи на экране об авторе прграммы} setcolor(12); settextstyle(1,0,1); outtextxy(20,430,'Copyright Software 1998'); outtextxy(20,450,'Written by Volkov Konstantin'); {Надпись ***MENU*** печатается серым цветом, тем самым создается эффект тени} setcolor(8); settextstyle(1,0,6); outtextxy(142,33,'*** MENU ***'); {Печать надписи ***MENU*** синим цветом} setcolor(10); outtextxy(140,30,'*** MENU ***'); setbkcolor(9); {Цвет фона экрана} repeat setfillstyle(1,5); {Орнамент и цвет заполнения полоски-указателя} {Полоска,передвигающаяся по пунктам меню} bar(35,145+70*ym,605,195+70*ym); {Печать пунктов меню} outtextxy(50,135,'Game'); outtextxy(50,205,'Best players'); outtextxy(50,275,'About this game'); outtextxy(50,345,'Exit'); om:=readkey; {При переходе указателя на другой пункт, возврашение пункту меню прежнего цвета} setfillstyle(1,1); bar(35,145+70*ym,605,195+70*ym); {Изменение координат указателя, в зависимости от нажатия пользователем однойиз клавиш управления} if om=up then ym:=ym-1; if om=down then ym:=ym+1; if ym=-1 then ym:=3; if ym=4 then ym:=0; setcolor(10); {Цвет пунктов меню} {Создание звукового эффекта при перемещении по пунктам меню} sound(300); for i:=-maxint to maxint do j:=j; nosound; until om=Enter ; end;(*menu*) (* Процедура начала игры *) procedure game; begin(*game*) cleardevice; {Очистка экрана} steps:=0;{Число шагов 0} {Рисование области, на фоне которой будет выводится кол-во шагов} setfillstyle(1,3); bar(10,90,130,155); setfillstyle(1,7); bar(30,120,80,145); {Обведение области темными линиями} setlinestyle(0,0,1); setcolor(1); rectangle(10,90,130,155); rectangle(29,119,81,146); setlinestyle(0,0,1); {Печать надписи и кол-ва шагов, пока число шагов просто 0} setcolor(4); settextstyle(0,0,1); outtextxy(20,100,'Number steps '); outtextxy(40,130,'0'); setcolor(13); vict:=false; {Победа не инициализирована} setfillstyle(1,14); {Параметры заполнения кубика} bar3d(152,86,509,445,10,true);{Рисование коробки} {Создание в верхней части экрана полоски и надписи на ней} bar(0,0,639,50); settextstyle(7,0,5); outtextxy(125,2,'* 15 *'); {Создание в нижней части экрана полоски и надписи на ней} bar(0,450,639,480); settextstyle(7,0,3); outtextxy(80,450,'Press Esc for quit to main menu'); {Задание прежних параметров} settextstyle(7,0,5); setfillstyle(1,11); {Включение генератора случайных чисел} randomize; {Заполнение массива случайными числами от 1 до 15} mas[16]:=0; mas[1]:=random(14)+1; n:=2; repeat u:=true; while u do begin{Раскладывание пятнашек} j:=random(15)+1; u:=false; for i:=1 to n-1 do {Проверка элементов массива на равенство друг другу} if mas[i]=j then u:=true; end;{Раскладывание пятнашек} mas[n]:=j; n:=n+1; until n=16;{Условие выхода заполнение всего массива} {Рисование фишек игрового поля (табличек)} for j:=0 to 3 do for i:=0 to 3 do kv(i,j); {Рисование фона на котором расположена коробка} setbkcolor(7); {Разкраска коробки} setfillstyle(1,8); floodfill(157,90,13); setfillstyle(1,3); floodfill(168,82,13); floodfill(513,90,13); setfillstyle(1,11); {Нумерация табличек} n:=1; for j:=0 to 3 do for i:=0 to 3 do if (i<>3) or (j<>3) then begin nomer(i,j,n); n:=n+1; end; x1:=3; y1:=3; x:=3; y:=3; {Рисование таблички в нижнем правом углу,пока не сделанно ни одного хода} setcolor(1); setfillstyle(1,11); bar3d(418,358,493,433,7,true); repeat kl:=readkey; tabl(x,y,kl,x,y); {Cмены активной таблички} {Проверка условия нажатия клавиши пробел} if kl=Space then begin(*if1*) u:=(abs(x1-x)=1) and (abs(y1-y)=0) or (abs(x-x1)=0) and (abs(y1-y)=1); {Условие перестановки элементов массива} if u then begin(*if2*) {Элементы массива, которые меняются местами} i:=4*y+x+1; i1:=4*y1+x1+1; setcolor(11); nomer(x,y,i); setcolor(13); nomer(x1,y1,i); n:=mas[i1]; {Перестановка элементов массива} mas[i1]:=mas[i]; mas[i]:=n; x1:=x; y1:=y; steps:=steps+1; {Увеличение числа шагов на единицу} {Вывод на экран числа шагов} setfillstyle(1,7); bar(30,120,80,145);{Рисование табл.} setcolor(4); str(steps,st1); settextstyle(0,0,1); outtextxy(40,130,st1); setcolor(13); settextstyle(7,0,5); setfillstyle(1,11); {Проверка следования чисел в массиве} u:=true; j:=0; n:=0; repeat j:=j+1; n:=n+1; if (n<>mas[j]) and (n<>12) then u:=false; if (n=11) and (mas[12]=0) then j:=j+1; until mas[j]=15; if u and ((mas[15]=15) or (mas[16]=15)) then begin(*if3*) pl:=Esc;{Выход из цикла} vict:=true;{Инициализация победы} end;(*if3*) end;(*if2*) end;(*if1*) {Игрок нажал клавишу Esc} if kl=Esc then begin (*if*) {Помещение странички в буфер посредством разбиения ее на 4 части} m:=imagesize(0,0,320,240); getmem(p,m); getimage(0,0,320,240,p^); m1:=imagesize(320,0,639,240); getmem(p1,m1); getimage(320,0,639,240,p1^); m2:=imagesize(0,240,320,480); getmem(p2,m2); getimage(0,240,320,480,p2^); m3:=imagesize(320,240,639,480); getmem(p3,m3); getimage(320,240,639,480,p3^); {Вывод меню, после того как игрок нажал Esc} cleardevice; setbkcolor(0); b3:=0; repeat {Рисование двойной рамочки} setcolor(1); setlinestyle(0,0,1); rectangle(243,183,417,257); rectangle(248,188,412,252); setfillstyle(1,14);{Орнамент и цвет заполнения указателя} {Указатель-выбор пункта} bar(250,190+30*b3,410,220+30*b3); setcolor(13); settextstyle(8,0,1); outtextxy(275,195,'Continue . . .'); outtextxy(275,220,'Exit '); b2:=readkey; setfillstyle(1,0); bar(250,190+30*b3,410,220+30*b3); {Движение по пунктам меню} if b2=up then b3:=0; if b2=down then b3:=1; if b3=0 then kl:='z'{Выбран пункт Continue} else kl:=Esc{Выбран пункт Exit} until b2=Enter; end; (*if*) {Если выбран пункт Continue,то страничка возвращается из буфера,а затем буфер очищается} if kl='z' then begin cleardevice; setbkcolor(7); putimage(0,0,p^,normalput); freemem(p,m); putimage(320,0,p1^,normalput); freemem(p1,m1); putimage(0,240,p2^,normalput); freemem(p2,m2); putimage(320,240,p3^,normalput); freemem(p3,m3); settextstyle(7,0,5); setfillstyle(1,11) end until (kl=Esc) or (pl=Esc) ; {Демонстрация победы после завершения игры} if vict then begin(*vict*) cleardevice;{Очистка экрана} victory;{Процедура победы} {Вывод на экран числа шагов,сделанных пользователем, и поздравления} setcolor(4); settextstyle(7,0,5); outtextxy(100,50,'You are win ! ! !'); str(steps,step); outtextxy(100,100,'You made'); outtextxy(150,150,step); outtextxy(250,150,'steps.'); repeat until keypressed; kl:=readkey; i:=0; {Сравнение результатов} repeat i:=i+1; val(stroka[i*2],b,x); until (b>steps) or (i=6); {Если результат игрока превосходит один из результатов в таблице,он заносится в таблицу} if i<6 then begin(*Переформирование таблицы рекордов*) for j:=5 downto i do begin(*Сдвиг рекордов*) stroka[j*2+1]:=stroka[j*2-1]; stroka[j*2+2]:=stroka[j*2]; end;(*Сдвиг рекордов*) {Преглашение игрока к вводу имени} cleardevice; setbkcolor(0); outtextxy(10,130,'Please, enter your name :'); {Создание рамочки} setcolor(10); rectangle(100,225,525,290); rectangle(98,223,527,292); {Ввод имени игрока} kl:=readkey; j:=1; stroka[i*2-1]:=''; u:=not(kl=enter); while u do begin(*Чтение имени игрока*) u:=(kl>' ') and (kl<'z') and (j<11); if u then begin(*нц*) stroka[i*2-1]:=stroka[i*2-1]+kl; outtextxy(80+j*40,230,kl);{Печать буквы на новой позиции} j:=j+1; end;(*кц*) kl:=readkey; u:=not(kl=Enter); end;(*Чтение имени игрока*)
Страницы: 1, 2, 3, 4
|