Рефераты. Игровая программа "15"

end

end;(*victory*)

(* Процедура рисования номера пятнашки*)

procedure nomer(xp,yp,ip:integer);

begin (*nomer*)

{Преобразование числа mas[ip] в

посл-ть символов}

str(mas[ip]:1,st);

{Вывод посл-ти символов st}

outtextxy(175+xp*86,120+yp*86,st);

end;(*nomer*)

(*Процедура рисования парал-да*)

procedure kv(xk,yk:integer);

begin(*kv*)

bar3d(160+xk*86,100+yk*86,235+xk*86,

175+yk*86,7,true);

end;(*kv*)

(*Процедура смены активной таблички*)

procedure tabl(xv,yv:integer;klv:char;var

xv1,yv1:integer);

begin(*tabl*)

{Фишка(табличка),которая была активизирована

рисуется таким же цветом, что и остальные

фишки}

setcolor(13);

kv(xv,yv);

{Надпись номера фишки}

if mas[4*yv+xv+1]<>0 then

nomer(xv,yv,4*yv+xv+1);

{Нажатие пользователем одной из клафиш case

управления}

klv of

Down :if yv<3 then yv:=yv+1;

Up :if yv>0 then yv:=yv-1;

Left :if xv>0 then xv:=xv-1;

Right :if xv<3 then xv:=xv+1;

end;(*case*)

xv1:=xv;

yv1:=yv;

{Фишка, которая становится активизированной,

рисуется темным цветом}

setcolor(1);

kv(x,y);

{Надпись номера активизированной фишки}

if mas[4*yv+xv+1]<>0

then nomer(x,y,4*y+x+1);

end;(*tabl*)

(*Процедура меню*)

procedure menu(var ym:integer);

var

om:char;

begin(*menu*)

ym:=0;

cleardevice; {Очистка графического экрана}

{Рисование тени пунктов меню,прямоугольники

серого цвета}

setcolor(8);

setfillstyle(1,8);

bar(45,152,615,202);

bar(45,222,615,272);

bar(45,292,615,342);

bar(45,362,615,412);

fillellipse(304,62,210,35);

{Рисование пунктов меню,прямоугольники синего

цвета}

setcolor(1);

setfillstyle(1,1);

bar(35,145,605,195);

bar(35,215,605,265);

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

{Проверка следования чисел в массиве}

Страницы: 1, 2, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.