Move_rand(i_vrag,k_vrag,p_vrag)



Quot;НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ   ВЫСШИЙ КОЛЛЕДЖ ИНФОРМАТИКИ   Кафедра информатики   Вводный проект     ОТЧЕТ О разработке игровой программы   «Спаси принцессу»   Автор: Донцова Надежда Александровна                 / Подпись студента /   Группа 213c   Преподаватель: Календарева С . Т .                           Отчет принят:                                             ОЦЕНКА                                                      / Подпись преподавателя/   Дата принятия отчета   Новосибирск 2012г. Содержание отчета: 1. Сценарий (правила) игры. 2. Структура программы (описание процедур и функций и порядка их взаимодействия). 3. Код программы (листинг) 1.История игры В некотором царстве в некотором государстве жил принц, которого звали Рудольф. В один прекрасный день он встретил девушку по имени Марианна,которую полюбил… И как только они решили пожениться… Её похитил злой         рыцарь и увёз далеко-далеко.Рудольф отправился на поиски возлюблинной!!! Првила игры Помоги принцу отыскать свою возлюбленную!!! Тебе нужно будет пройти лаберинт собирая ВСЕ ключи, Для перехода на следующий уровень. Тебе будут мешать посланики злого рыцаря. Ты должен будешь пройти так, чтобы не столкнуться с ними. В противном случае у принца будут отниматься жизни. Их у него 3. Если ты попадешься три раза, то наступит конец игры.                                                     2. Procedure Opengraph{запускает всю графику игры} Function Loader{В этой процедуре указывается место в памяти,где хранится рисунок} Procedure Load{Процедура для загрузки всех рисунков} Procedure Menu{меню нашей игры} Procedure Zastavka{наша заставка} Procedure Help|{Вывод помоши на экран} Procedure FIle_To_Mas{Копирование файла с уровнем игры в массив} Procedure Zapolnenielab{Рисование лабиринта} Procedure Move_Rand{Движение врагов Procedure Bufer{Очистка буфера клавиатуры Function Proverka{Проверка совмешение героя игры и врага} Procedure Schet{Вывод очков на экран} Procedure Upr_Move{Управляемое движение героем} Procedure GAME{самая главная часть программы, без этой процедуры игра работать не будет}   3. uses wincrt,graph; const n=30;  dx=30;  dy=28;  up=#72;  left=#75;  right=#77;  down=#80;  esc=#27;  SPACE=#32;  enter=#13;  nn=4; var ch:char; gd,gm,xm,ym:integer; p_kursor:pointer; nomer:integer; type mas_str=array[1..nn] of string; mas_ur=array[1..3] of string; const st:mas_str=('ABOUT AUTOR','GAME','HELP','EXIT'); lab:mas_ur=('lab.txt','lab2.txt','lab3.txt'); type massiv=array[1..n,1..n] of integer;

Var

x0,y0:integer;

ochki,uroven,i_exit,k_exit:integer;

tab:massiv;

i_vrag,k_vrag:integer;

i_drug,k_drug:integer;

p_drug,p_vrag,p_stena,p_bonus:pointer;

type mas_vrag=array[1..3]of integer;

Type Tresult=record

Name:string;

Ochki1:integer;

End;

Var

Result:Tresult;

F:file of Tresult;

i_vr,k_vr:mas_vrag;

procedure opengraph;

Begin

  gd:=detect;

  initgraph(gd,gm,'');

  xm:=getmaxx;

  ym:=getmaxy;

end;

Function loader(filename:string):pointer;

   var f:file; p:pointer; size:longint;

Begin

             assign(f,filename);

             reset(f,1);

             size:=filesize(f);

             getmem(p,size);

             blockread(f,p^,size);

             close(f);

             loader:=p;

            End;

procedure load;

Begin

p_drug:=loader('drug33');

p_vrag:=loader('vragg');

p_stena:=loader('STENAaa');

p_bonus:=loader('kl');

p_kursor:=loader('STRELKA');

end;

procedure menu(var ns:integer);

Const

 h=70;

var i,x,y,y1:integer;

Begin

 cleardevice;

 x:=600;

 y1:=300;

 y:=y1;

 setcolor(12);

 settextstyle(1,0,3);

 for i:=1 to nn do

Begin

outtextxy(x,y,st[i]);

y:=y+h;

end;

y:=y1;

x:=x-30;

ns:=1;

putimage(x,y,p_kursor^,xorput);

Repeat

ch:=readkey;

if ch=#0 then

Begin

ch:=readkey;

putimage(x,y,p_kursor^,xorput);

Case ch of

     down: if ns<nn then

              ns:=ns+1 else ns:=1;

       up: if ns>1 then

              ns:=ns-1 else ns:=nn;

  end;

y:=y1+(ns-1)*h;

putimage(x,y,p_kursor^,xorput);

end;

until(ch=enter) or (ch=esc);

if ch=esc then

ns:=0;

end;

procedure help;

Var

 f:text;

 s:string;

 y:integer;

Begin

assign(f,'help.pas');

reset(f);

setcolor(12);

settextstyle(1,0,2);

y:=20;

cleardevice;

While not (eof(f)) do

Begin

  readln(f,s);

  outtextxy(300,y,s);

  y:=y+30;

End;

close(f);

readkey;

cleardevice;

End;

procedure zastavka;

var c,n:integer;

Begin

  cleardevice;

Repeat

  c:=random(15)+1;

  n:=random(500)+500;

  setcolor(c);

  settextstyle(7,0,9);

  outtextxy(150,100,' СПАСИ ПРИНЦЕССУ ');

  settextstyle(3,0,4);

  outtextxy(100,500,' Автор проекта Донцова Надежда Александровна ');

  outtextxy(100,600,' Преподаватель Календарёва Светлана Тимофеевна ');

  delay(30);

  until KEYPRESSED;

  cleardevice;

end;

procedure avtor;

Var

 f:text;

 s:string;

 y:integer;

Begin

assign(f,'avtor.pas');

reset(f);

setcolor(12);

settextstyle(1,0,2);

y:=250;

cleardevice;

While not (eof(f)) do

Begin

    readln(f,s);

    outtextxy(250,y,s);

    y:=y+30;

  End;

close(f);

readkey;

cleardevice;

End;

procedure file_to_mas(nf:string;var a:massiv);

var f:text;

i,j:integer;

Begin

assign(f,nf);

reset(f);

for i:=1 to n do

Begin

for j:=1 to n do

   read(f,a[i,j]);

 readln(f);

end;

close(f);

end;

procedure zapolnenielab;

var x,y,k,i,m:integer;

Begin

 cleardevice;

 m:=1;

 for i:=1 to n do

for k:=1 to n do

Begin

x:=x0+(k-1)*dx;

y:=y0+(i-1)*dy;

case tab[i,k] of

  1:putimage(x,y,p_stena^,xorput);

Begin

     putimage(x,y,p_drug^,xorput);

     i_drug:=i;

     k_drug:=k;

     i_exit:=i;

     k_exit:=k;

     tab[i,k]:=0;

   end;

  3:begin if uroven =1 then

Begin

          putimage(x,y,p_vrag^,xorput);

          i_vrag:=i;

          k_vrag:=k;

          tab[i,k]:=0;

End

Else

Begin

          putimage(x,y,p_vrag^,xorput);

          i_vr[m]:=i;

          k_vr[m]:=k;

          tab[i,k]:=0;

          m:=m+1;

      end;

  end;

  4:putimage(x,y,p_bonus^,xorput);

end;

end;

end;

procedure move_rand(var i,k:integer; p:pointer);

var x,y,r:integer;

Begin

x:=x0+(k-1)*dx;

y:=y0+(i-1)*dy;

putimage(x,y,p^,xorput);

r:=1+random(4);

Case r of

1:if (k<n) and (tab[i,k+1]<>1) then k:=k+1;

2:if (i>1) and (tab[i-1,k]<>1) then i:=i-1;

3:if (k>1) and (tab[i,k-1]<>1) then k:=k-1;

4:if (i<n) and (tab[i+1,k]<>1) then i:=i+1;

end;

x:=x0+(k-1)*dx;

y:=y0+(i-1)*dy;

putimage(x,y,p^,xorput);

delay(200);

end;

procedure bufer;

var a:char;

Begin

While keypressed do

      a:=readkey;

end;

function proverka(i_drug,k_drug,i_vrag,k_vrag:integer):boolean;

Begin

if (i_drug=i_vrag) and (k_drug=k_vrag) then

proverka:=true

else proverka:=false;

 end;

procedure schet(ochki:integer);

var st:string;

Begin

bar(xm-100,10,xm,50);

setcolor(15);

settextstyle(0,0,5);

str(ochki,st);

outtextxy(xm-80,15,st);

end;

procedure upr_move(var i,k:integer;p:pointer);

var x,y:integer;

Begin

 ch:=readkey;

 if ch=#0 then

Begin

ch:=readkey;

x:=x0+(k-1)*dx;

y:=y0+(i-1)*dy;

putimage(x,y,p^,xorput);

Case ch of

right:if (k<n) and (tab[i,k+1]<>1) then k:=k+1;

up:if (i>1) and (tab[i-1,k]<>1) then i:=i-1;

left:if (k>1) and (tab[i,k-1]<>1) then k:=k-1;

down:if (i<n) and (tab[i+1,k]<>1) then i:=i+1;

end;

x:=x0+(k-1)*dx;

y:=y0+(i-1)*dy;

putimage(x,y,p^,xorput);

if tab[i,k]=4 then

Begin

tab[i,k]:=0;

putimage(x,y,p_bonus^,xorput);

ochki:=ochki+1;

schet(ochki);

end;

end;

end;

procedure game;

var x,y,h,i,j:integer;

d:string;

Begin

cleardevice;

if uroven<=3 then

file_to_mas(lab[uroven],tab)

else uroven:=1;

zapolnenielab;

h:=3;

putimage(xm-300,50,p_drug^,xorput);

putimage(xm-350,50,p_drug^,xorput);

putimage(xm-400,50,p_drug^,xorput);

ochki:=0;

schet(ochki);

Repeat

if uroven=1 then

move_rand(i_vrag,k_vrag,p_vrag)

Else

Begin

  for i:=1 to 3 do

    move_rand(i_vr[i],k_vr[i],p_vrag);

end;

If keypressed then

Begin

    upr_move(i_drug,k_drug,p_drug);

    bufer;

end;

if uroven=1 then

Begin


Дата добавления: 2018-09-23; просмотров: 82; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!