Регистрация | Вход
Program NoName; Var a: array [2 ..18 ] of string; akt,pas,szd,m:boolean; razv,x,y,j:integer; temper,golod:integer; Procedure ZAP(i:integer); {Записывает события и "возможные события"} Var n:integer; Begin Repeat n:=Pos('1', a[i]); If n<>0 then Begin a[i][n]:='2'; end until n=0; Repeat n:=Pos('0', a[i]); If n<>0 then Begin a[i][n]:='3'; end until n=0; end; Procedure CTR(i:integer); {Стерает происшедшие события} Var n:integer; Begin For n:=3 to 18 do If a[n][i*2]='2' then a[n][i*2]:='1'; end; {------------------------------} {------------------------------} Procedure BLK(i:integer); {Блокирует невозможные события} Var n:integer; Begin For n:=3 to 18 do If a[n][i*2]='2' then a[n][i*2]:='4'; end; {------------------------------} {------------------------------} Procedure PRO(i:integer); {Проверяет наличие событиий} Var n:integer; s:string; Begin s:=''; akt:=false; pas:=false; szd:=false; For n:=3 to 18 do s:=s+a[n][i*2]; If Pos('1', s)<>0 then pas:=true; If Pos('2', s)<>0 then akt:=true; If Pos('3', s)<>0 then szd:=true; end; {------------------------------} {------------------------------} Procedure SOZ(i:integer); {создаёт событие из "возможного события"} Var n,n1:integer; Begin If (a[2][i*2]='3') or (a[2][i*2]='4') then Begin For n:=3 to 18 do If a[n][i*2]='3' then Begin a[n][i*2]:='2'; Repeat n1:=Pos('3', a[n]); If n1<>0 then a[n][n1]:='0'; until n1=0; end; If (a[2][i*2]='3') then a[2][i*2]:='0'; end; end; {------------------------------} {------------------------------} Procedure VIV; {Вывод массива памяти} Var t:integer; Begin Font(8 ,0 ,600 ); TextColor( 200,0,0 ); MoveTo(0,15); For t:=2 to 18 do WriteLn( a[t] ); end; {------------------------------} {------------------------------} Procedure UDO(j:integer); {Удоляет лишние "возможные события"} Var n,n1:integer; Begin For n:=3 to 18 do If (a[n][j*2]='1') or (a[n][j*2]='2') then Repeat n1:=Pos('3', a[n]); If n1<>0 then a[n][n1]:='0'; until n1=0; end; {------------------------------} {------------------------------} Procedure DV1; {Движения в среде}Begin WriteLn( 'd' ); If razv=1 then x:=x-10 else x:=x+10; m:=true; end; Procedure DV2; Begin WriteLn( 'r' ); {y:=y+10;} If razv=1 then razv:=0 else razv:=1; m:=true; end; {------------------------------} {------------------------------} Procedure RIS; Begin Brush( 1, 255, 255, 255 ); Pen( 3,255,255,255 ); Rectangle( 150, 180, 400, 650 ); Pen( 1,250,100,70 ); Rectangle(150 ,180 ,400 ,250 ); Font(20 ,0 ,800 ); TextColor( 250,100,70 ); MoveTo(230,200); WriteLn( 'ПИЩА' ); Pen( 1,150,100,200 ); Rectangle( 150,580 ,400 ,650 ); TextColor( 150,100,200 ); MoveTo(225,595); WriteLn( '' ); end; {------------------------------} {------------------------------} Begin m:=false; RIS; razv:=1; x:=600; y:=110; golod:=200; temper:=0; {|------Память-----|} a[2]:= ' 4 4 3 3 3 3 3 3 3 3 3 3'; a[3]:= ' 4 4 0 0 0 0 0 0 0 0 0 0'; a[4]:= ' 4 4 0 0 0 0 0 0 0 0 0 0'; a[5]:= ' 4 4 0 0 0 0 0 0 0 0 0 0'; a[6]:= ' 4 4 0 0 0 0 0 0 0 0 0 0'; a[7]:= ' 4 4 0 0 0 0 0 0 0 0 0 0'; a[8]:= ' 4 4 0 0 0 0 0 0 0 0 0 0'; a[9]:= ' 4 4 0 0 0 0 0 0 0 0 0 0'; a[10]:=' 4 4 0 0 0 0 0 0 0 0 0 0'; a[11]:=' 0 0 0 0 0 0 0 0 0 0 0 0'; a[12]:=' 0 0 0 0 0 0 0 0 0 0 0 0'; a[13]:=' 0 0 0 0 0 0 0 0 0 0 0 0'; a[14]:=' 0 0 0 0 0 0 0 0 0 0 0 0'; a[15]:=' 0 0 0 0 0 0 0 0 0 0 0 0'; a[16]:=' 0 0 0 0 0 0 0 0 0 0 0 0'; a[17]:=' 0 0 0 0 0 0 0 0 0 0 0 0'; a[18]:=' 0 0 0 0 0 0 0 0 0 0 0 0'; Repeat {--События среды--} If m=true then Begin temper:=temper+1; golod:=golod-1; end; m:=false; If (x>180)and(x<250) then golod:=200; If golod>100 then ZAP(4) else ZAP(6); If (x<=400) then zap(9); If (x>400) then zap(10); If razv=1 then zap(3) else zap(5); {--события среды--} For j:=1 to 12 do Begin PRO(j); If (szd=true) then Begin SOZ(j); end; If(akt=true)or(pas=true) then If(szd=false) then Begin UDO(j); end; end; For j:=1 to 12 do Begin PRO(j); If(akt=true) and (pas=true) then CTR(j); end; For j:=3 to 12 do Begin PRO(j); If(akt=true) and (pas=false) and(j>2) then Begin CTR(j); ZAP(j+8); end; end; VIV; {--Действия в среде--} For j:=1 to 2 do Begin PRO(j); If(akt=true) then Begin If j=1 then Begin DV1; If ((razv=1)and (x<190)) or ((razv=0)and (x>600)) then Begin BLK(j); end ; CTR(j); end; If j=2 then Begin DV2; If ((razv=1)and (x<190)) or ((razv=0)and (x>600)) then Begin BLK(j); end; CTR(j); end; end; end; {--дейсвия в среде--} RIS; Pen( 3,150,250,70 ); Brush( 0,0,0,0 ); Ellipse( 150+y,x ,150+y+30 ,x+30 ); TextColor( 0,0,0 ); MoveTo(180,50); Font(10 ,0 ,800 ); WriteLn( 'X=',x:3,' Y=',y:3,' razv=',razv,' golod=',golod:4,' temper=',temper:4 ); MoveTo(170,80); until j<0; end.