| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402 |
- Uses Crt,dos,graph;
- Const fx=40;
- fy=10;
- Var
- x : array[0..2000] of byte;
- y : array[0..2000] of byte;
- xb,c,e,s,yb,xx,xy,xe,ye : byte;
- e1,e2,e3,e4 : word;
- ch : char;
- l,i,right,top : 0..2000;
- dr,f,mo,speed,s1,score,t,n : integer;
- otv : string[3];
- Procedure SetCursorSize( c_Start, c_End : Byte );
- { 0 .. 32
- Устанавливает форму курсора}
- var
- Regs : Registers;
- BEGIN
- with Regs do begin
- AH := $01; {функция формы курсора}
- CH := c_Start; {стартовая линия курсора}
- CL := c_End; {конечная линия курсора}
- end;
- Intr( $10, Regs ) {вызов прерывания 10H БСВВ}
- End;
- Procedure SetNoCursor; {Невидимый курсора}
- BEGIN
- SetCursorSize( 32, 0 )
- END;
- begin
- ClrScr;
- s1:=0; t:=0; n:=0;
- dr:=detect;
- initgraph(dr,mo,'bgi');
- SetColor(0);
- SetBkColor(0);
- SetFillStyle(4,9);
- repeat
- s1:=s1+5;
- t:=t+5;
- n:=n+1;
- c:=random(15);
- Setcolor(c);
- Rectangle(s1,t,getmaxx-s1,getmaxy-t);
- delay(50);
- until(n=5);
- SetColor(15);
- Bar(50,90,GetMaxX-50,300);
- MoveTo(80,GetMaxY div 3);
- SetTextStyle(1,0,5);
- OutText('Worms, Worms, Worms');
- SettextStyle(0,0,2);
- OutTextXY(getmaxx div 3 ,getmaxy div 2,'Начнем !!!');
- readLn;
- SetColor(0);
- SetBkColor(0);
- CloseGraph;
- ClrScr;
- SetNoCursor;
- GotoXy(15,5);
- Write('Введите скорость от 1-20 (чем больше ,тем медленнее): ');
- ReadLn(speed);
- if speed > 20 then
- begin
- GoToXY(20,6);
- Write('Скорость слишком маленькая, введите еще раз: ');
- Read(speed);
- end;
- ClrScr;
- TextColor(9);
- Write(chr(201));
- GotoXy(50,1);
- Write(chr(187));
- for top:=2 to 49 do
- begin
- GotoXY(top,1);
- write(chr(205));
- end;
- for right:=2 to 24 do
- begin
- GotoXy(1,right);
- Write(chr(186));
- GotoXy(50,right);
- Write(chr(186));
- end;
- GotoXY(1,24);
- Write(chr(200));
- GotoXY(50,24);
- Write(chr(188));
- for top:=2 to 49 do
- begin
- GotoXy(top,24);
- Write(chr(205));
- end;
- { for i:=0 to 2000 do begin
- x[i]:=0;
- y[i]:=0;
- end;}
- x[1]:=35;
- y[1]:=10;
- Randomize;
- repeat
- c:=random(16);
- TextColor(c);
- Gotoxy(Random(79),random(24));
- xx:=WhereX;
- xy:=WhereY;
- Until(xx<>x[1]) and (xy<>x[1]) and (c<>0) and (xx>1) and (xy>1) and (xx<49) and (xy<24);
- Write('X');
- xb:=x[1]; xe:=x[1];
- yb:=y[1]; ye:=y[1];
- l:=1;
- score:=0;
- GotoXY(xb,yb);
- Write('[');
- GotoXY(51,2);
- Write('Длина червя = ',l);
- GotoXY(51,4);
- Write('Скорость червя = ',speed);
- GoToXY(51,6);
- Write('Кол-во очков = ',score);
- repeat
- ch:=readkey;
- ch:=readkey;
- if ch =#77 then
- begin
- repeat
- if e=2 then
- begin
- sound(150);
- delay(1000);
- Nosound;
- Exit;
- end;
- e:=1;
- xb:=x[1]+1;
- if xb=50 then
- begin
- sound(150);
- delay(1000);
- Nosound;
- Exit;
- end;
- if not((xb-1=xx) and (yb=xy)) then
- begin
- Gotoxy(xe,ye);
- Write(' ');
- end
- else
- begin
- l:=l+1;
- f:=l;
- score:=score+5;
- GotoXY(51,2);
- Write('Длина червя = ',l);
- if f in [10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200] then speed:=Speed+1;
- {(l=10) or (l=20) or (l=30) or (l=40) or (l=50) or (l=60) or (l=70) or (l=80)}
- if speed=21 then
- begin
- ClrScr;
- Gotoxy(40,12);
- Write('ВЫ ВЫИГРАЛИ');
- end;
- GotoXY(51,4);
- Write('Скорость червя = ',speed);
- GoToXY(51,6);
- Write('Кол-во очков = ',score);
- repeat
- c:=random(16);
- TextColor(c);
- Gotoxy(Random(80),random(25));
- xx:=WhereX;
- xy:=WhereY;
- Until(xx<>x[1]) and (xy<>y[1]) and (c<>0) and (xx>1) and (xy>1) and (xx<49) and (xy<24);
- Write('X');
- end;
- repeat
- c:=random(15);
- TextColor(c);
- until(c<>0);
- Gotoxy(xb,yb);
- Write ('O');
- delay(1000+round(1/speed*220));
- For i:=l downto 1 do
- begin x[i]:=x[i-1];y[i]:=y[i-1];
- end;
- x[1]:=xb;y[1]:=yb;
- xe:=x[l];ye:=y[l];
- for i:=2 to l do
- if (xb = x[i]) and (yb = y[i]) then Exit;
- until(keypressed);
- end;
- if ch =#75 then
- begin
- repeat
- xb:=x[1]-1;
- if e=1 then
- begin
- sound(150);
- delay(1000);
- Nosound;
- Exit;
- end;
- e:=2;
- if xb=1 then
- begin
- sound(150);
- delay(1000);
- Nosound;
- Exit;
- end;
- if not((xb+1=xx) and (yb=xy)) then
- begin
- Gotoxy(xe,ye);
- Write(' ');
- end
- else
- begin
- l:=l+1;
- f:=l;
- score:=score+5;
- GotoXY(51,2);
- Write('Длина червя = ',l);
- if f in [10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200]
- {(l=10) or (l=20) or (l=30) or (l=40) or (l=50) or (l=60) or (l=70) or (l=80)} then speed:=Speed+1;
- if speed=21 then
- begin
- ClrScr;
- Gotoxy(40,12);
- Write('ВЫ ВЫИГРАЛИ');
- end;
- GotoXY(51,4);
- Write('Скорость червя = ',speed);
- GoToXY(51,6);
- Write('Кол-во очков = ',score);
- repeat
- c:=random(16);
- TextColor(c);
- Gotoxy(Random(80),random(25));
- xx:=WhereX;
- xy:=WhereY;
- Until(xx<>x[1]) and (xy<>x[1]) and (c<>0) and (xx>1) and (xy>1) and (xx<49) and (xy<24);
- Write('X');
- end;
- repeat
- c:=random(15);
- TextColor(c);
- until(c<>0);
- Gotoxy(xb,yb);
- Write ('O');
- delay(1000+round(1/speed*220));
- For i:=l downto 1 do
- begin x[i]:=x[i-1];
- y[i]:=y[i-1];
- end;
- x[1]:=xb; y[1]:=yb;
- xe:=x[l]; ye:=y[l];
- for i:=2 to l do
- if (xb = x[i]) and (yb = y[i]) then Exit;
- until(keypressed);
- end;
- if ch =#80 then
- begin
- if e = 4 then
- begin
- sound(150);
- delay(1000);
- Nosound;
- Exit;
- end;
- e:=3;
- repeat
- yb:=y[1]+1;
- if yb=24 then
- begin
- sound(150);
- delay(1000);
- Nosound;
- Exit;
- end;
- if not((xb=xx) and (yb-1=xy)) then
- begin
- Gotoxy(xe,ye);
- Write(' ');
- end
- else
- begin
- l:=l+1;
- f:=l;
- score:=score+5;
- GotoXY(51,2);
- Write('Длина червя = ',l);
- if f in [10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200]
- {(l=10) or (l=20) or (l=30) or (l=40) or (l=50) or (l=60) or (l=70) or (l=80)} then speed:=Speed+1;
- if speed=21 then
- begin
- ClrScr;
- Gotoxy(40,12);
- Write('ВЫ ВЫИГРАЛИ');
- end;
- GotoXY(51,4);
- Write('Скорость червя = ',speed);
- GoToXY(51,6);
- Write('Кол-во очков = ',score);
- repeat
- c:=random(16);
- TextColor(c);
- Gotoxy(Random(80),random(25));
- xx:=WhereX;
- xy:=WhereY;
- Until(xx<>x[1]) and (xy<>x[1]) and (c<>0) and (xx>1) and (xy>1) and (xx<49) and (xy<24);
- Write('X');
- end;
- repeat
- c:=random(15);
- TextColor(c);
- until(c<>0);
- Gotoxy(xb,yb);
- Write ('O');
- delay(1000+round(1/speed*220));
- For i:=l downto 1 do
- begin x[i]:=x[i-1];y[i]:=y[i-1];end;
- x[1]:=xb;y[1]:=yb;
- xe:=x[l];ye:=y[l];
- y[1]:=yb;
- for i:=2 to l do
- if (xb = x[i]) and (yb = y[i]) then Exit;
- until(keypressed);
- end;
- if ch =#72 then
- begin
- if e = 3 then
- begin
- sound(150);
- delay(1000);
- Nosound;
- Exit;
- end;
- repeat
- e:=4;
- yb:=y[1]-1;
- if yb=1 then
- begin
- sound(150);
- delay(2000);
- Nosound;
- Exit;
- end;
- if not((xb=xx) and (yb+1=xy)) then
- begin
- Gotoxy(xe,ye);
- Write(' ');
- end
- else
- begin
- l:=l+1;
- score:=score+5;
- GotoXY(51,2);
- Write('Длина червя = ',l);
- if f in [10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200]
- {(l=10) or (l=20) or (l=30) or (l=40) or (l=50) or (l=60) or (l=70) or (l=80)} then speed:=Speed+1;
- if speed=21 then
- begin
- ClrScr;
- Gotoxy(40,12);
- Write('ВЫ ВЫИГРАЛИ');
- end;
- GotoXY(51,4);
- Write('Скорость червя = ',speed);
- GoToXY(51,6);
- Write('Кол-во очков = ',score);
- repeat
- c:=random(16);
- TextColor(c);
- Gotoxy(Random(80),random(25));
- xx:=WhereX;
- xy:=WhereY;
- Until(xx<>x[1]) and (xy<>x[1]) and (c<>0) and (xx>1) and (xy>1) and (xx<49) and (xy<24);
- Write('X');
- end;
- repeat
- c:=random(15);
- TextColor(c);
- until(c<>0);
- Gotoxy(xb,yb);
- Write ('O');
- delay(1000+round(1/speed*220));
- For i:=l downto 1 do
- begin x[i]:=x[i-1];y[i]:=y[i-1];end;
- x[1]:=xb;y[1]:=yb;
- xe:=x[l];ye:=y[l];
- y[1]:=yb;
- for i:=2 to l do
- if (xb = x[i]) and (yb = y[i]) then Exit;
- until(keypressed);
- end;
- until(ch=#3);
- end.
|