слушайте, люди, как можно модифицировать "Змейку", чтобы она подразделялась на уровни, то есть, допустим, если "сьел" точек штук 20, то осуществлялся переход на новый уровень: увеличивалась скорость и создавались препятствия, которых с увеличением уровня становилось бы все больше и больше. Кроме того, как осуществить возможность СОЗДАВАТЬ уровни в самой игре (вот выбрали мы опцию создать уровень, сделали себе препятствия как нравится и запустили его). Сама змейка такая:
Program Snake; uses crt,graph; var gd,gm: integer; x_min, y_min, x_max, y_max, x, y, score, best: word; size,level: byte; n, k: word; way_x, way_y: shortint; score_str, best_str: string[10]; ch, level_ch: char; point, exit: boolean; koor: array[1..400,1..2] of word; f: text;
procedure Delay(time:longint); var ctime,time2:Longint; begin ctime:=meml[$40:$006c]; time2:=time div 55+ctime; while time2>meml[$40:$006c] do; end;
begin x_min:=30; y_min:=45; x_max:=615; y_max:=450; k:=15; gd:=detect; initgraph(gd,gm,'');
size:=5; x:=x_min+size*k; y:=y_max div 2; setfillstyle(9,14); bar(x-size*k,y,x,y+k); way_x:=1; way_y:=0; for n:=1 to size do begin koor[n,1]:=x-n*k+k; koor[n,2]:=y end; point:=false;
repeat level_ch:=readkey; if level_ch=#27 then halt until (level_ch>=#49) and (level_ch<=#57); val(level_ch,level,n); setfillstyle(0,0); bar(170,7,400,25); setcolor(15); outtextxy(235,7,'”p®ўҐм:'); setcolor(3); outtextxy(315,7,level_ch);
repeat if keypressed then ch:=readkey; case ch of #72: if way_y=0 then begin way_x:=0; way_y:=-1 end; #75: if way_x=0 then begin way_x:=-1; way_y:=0 end; #77: if way_x=0 then begin way_x:=1; way_y:=0 end; #80: if way_y=0 then begin way_x:=0; way_y:=1 end; #27: break end;
for n:=size downto 2 do { ЏҐpҐбзҐв Є®®p¤Ё в } begin koor[n,1]:=koor[n-1,1]; koor[n,2]:=koor[n-1,2] end; koor[1,1]:=koor[1,1]+way_x*k; koor[1,2]:=koor[1,2]+way_y*k;
if (koor[1,1]>x_max) or (koor[1,2]=y_max) or (koor[1,1]=x_min) or (koor[1,2]<y_min) then { Џ®Ї ¤ ЁҐ ў бвҐг } begin sound(100); delay(100); nosound; break end;
if point=false then { ђЁб®ў ЁҐ в®зҐЄ } begin repeat randomize; x:=(random((x_max-x_min) div k)+1)*k+x_min; y:=(random((y_max-y_min) div k)+1)*k+y_min; point:=true; for n:=1 to size do if (x=koor[n,1]) and (y=koor[n,2]+k) then point:=false until point; setfillstyle(9,4); setcolor(2); fillellipse(x-7,y-7,6,6); setcolor(0); line(0,0,0,15) end;
if (x=koor[1,1]) and (y=koor[1,2]+k) then { ‘ꥤ ЁҐ в®зҐЄ } begin sound(900); inc(size);
for n:=2 to size do { ‘ ¬®ЇҐpҐбҐзҐЁҐ } if (koor[1,1]=koor[n,1]) and (koor[1,2]=koor[n,2]) then begin sound(150); delay(100); nosound; exit:=true; break end;