Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Написание игр _ О буфере

Автор: Chuchello 1.08.2003 15:11

Решил освоить паскаль, а для этого прикупил книгу за авторством Лукина-"ТР 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.

Автор: cutter 13.08.2003 17:20

Попробуй для начала в процедуре KORABL заменить строку
until y1=240;
например на строку
until y=340;
Может проблема вовсе не в буфере?  ;)

Автор: trminator 9.09.2003 21:34

http://forum.pascal.dax.ru/?board=makegame;action=display;num=1050079872 - я тоже по этой книжке учился... и программу такую писАл  :D