Решил освоить паскаль, а для этого прикупил книгу за авторством Лукина-"ТР 7.0 для начинающих", и вот там задание создать игру "Торпедная атака".Програма показалась не совсем сложной даже для меня, но вот возникла проблема: при выстреле торпеды всё идеёт нормально, потом результаты анализируются и, когда должна пойти вторая попытка торпеда сама вылетает. Я предпологаю, что это из-за буфера, в котором остаётся нажатой клавиша пробовал вставлять строку для очистки , не помогает, а вот сама программа:
program torped_atack;
uses crt,graph;
var schet,torped,device,mode,x,y,x1,y1:integer;
s,a,kl:char;name:string;
procedure risunok;forward;
procedure analiz;
begin
torped:=torped+1;
if torped=5 then halt;
risunok;
end;
procedure nepopal;
begin
schet:=schet+0;
analiz;
end;
procedure popal;
begin
schet:=schet+1;
analiz;
end;
pROCEDURE ATAKA;
BEGIN
x1:=400;
y1:=360;
repeat
setcolor(7);
line(x,240,y,240);
line(x-20,220,y-40,240);
line(x+60,220,y,240);
line(x-20,220,x+60,220);
rectangle(310,x1,330,y1);
setfillstyle(1,7);
floodfill(x+47,230,7);
floodfill(315,x1-39,7);
delay(2000);
setcolor(9);
line(x,240,y,240);
line(x-20,220,y-40,240);
line(x+60,220,y,240);
line(x-20,220,x+60,220);
setcolor(1);
rectangle(310,x1,330,y1);
setfillstyle(1,7);
floodfill(x+47,230,7);
floodfill(315,x1-39,7);
y:=y+1;
x:=x+1;
x1:=x1-1;
y1:=y1-1;
until y1=240;
if (y1+100<=y) and (y1+100>=y-40) then popal
else nepopal;
END;
procedure clearboofer;
begin
while keypressed do kl:=readkey;
ataka;
end;
PROCEDURE KORABL;
label i2;
BEGIN
x:=1;
y:=40;
repeat
setcolor(7);
line(x,240,y,240);
line(x-20,220,y-40,240);
line(x+60,220,y,240);
line(x-20,220,x+60,220);
setfillstyle(1,7);
floodfill(x+47,230,7);
delay(2000);
setcolor(9);
line(x,240,y,240);
line(x-20,220,y-40,240);
line(x+60,220,y,240);
line(x-20,220,x+60,220);
setfillstyle(1,7);
floodfill(x+47,230,7);
y:=y+1;
x:=x+1;
if keypressed then begin kl:=readkey;
if kl='x' then ataka
end;
until y1=240;
end;
procedure risunok;
begin
device:=0;
initgraph(device,mode,'d:bpbgi');
line(1,240,640,240);
setfillstyle(1,9);
floodfill(1,1,15);
setfillstyle(1,1);
floodfill(400,400,15);
line(300,480,300,400);
line(340,480,340,400);
line(300,400,340,400);
setfillstyle(1,0);
floodfill(301,430,15);
korabl;
end;
procedure nachalo;
label i1;
begin
schet:=0;
writeln('Enter your name');
readln(name);
writeln('Control:S-start game');
writeln('Space-atack in game');
i1: s:=readkey;
if s='s' then risunok
else goto i1;
end;
begin
torped:=1;
nachalo;
end.
![]() |