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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!