game... des lebens

wertzuiop123

Grünschnabel
hallo
ich hab ein problem beim folgendem programm und ich komm nicht drauf, wieso die zellen falsch erstellt werden:
bitte um hilfe
danke:

Code:
PROGRAM life;
USES crt;
CONST
 zeilen = 40;
 spalten = 20;


VAR
 feld1 : array [1..spalten,1..zeilen] of integer;
 feld2 : array [1..spalten,1..zeilen] of integer;
	x,y,runden,neumann:integer;
        k,taste:char;

PROCEDURE clearzustand;
  var x,y : integer;
   begin
   for x := 1 to spalten do
       begin
          for y := 1 to zeilen do
              begin
                feld1 [x,y] := 0;
                feld2 [x,y] := 0;
              end;{for}
       end;{for}
   end;{clearzustand}
  

PROCEDURE Bakterienzone;
   BEGIN {Gleiter}
     neumann:=0;
     gotoxy(50,0);write('wieviele runden?');readln(runden);
    
     gotoxy(50,0);writeln('Für Moore Automat 1 eingeben');
     gotoxy(50,2);readln(neumann);
     
     x:=1;
     y:=1;
     if neumann=1 then begin gotoxy(45,5);writeln('Navigation: Moore'); end;
     if neumann=0 then begin gotoxy(45,5);writeln('Navigation: Neumann'); end;
     writeln;
     gotoxy(45,7);writeln('Numblock: 8,4,6,2');
     gotoxy(45,8);writeln('oder: w,a,d,s');
     writeln;
     gotoxy(45,10);writeln('Zellen Einfügen:');
     gotoxy(45,11);writeln('+');
     writeln;
     gotoxy(45,13);writeln('Zellen entfernen:');
     gotoxy(45,14);writeln('-');
     writeln;
     gotoxy(45,16);writeln('Neue Eingabe: (Neustart)');
     gotoxy(45,17);writeln('n');
     writeln;
     gotoxy(45,19);writeln('X = Zelle');
     writeln;

     
     repeat
     gotoxy(1,50); write('x: ',x,' y: ',y);
     gotoxy(x,y);
     taste:= readkey;
     if (taste='w') or (taste = '8') then dec(y); { oben }
     if (taste='s') or (taste = '2') then inc(y); { unten }
     if y=spalten then y:=1;
     if y=0 then y:=spalten-1;
     if (taste='a') or (taste = '4') then dec(x); { links }
     if (taste='d') or (taste = '6') then inc(x); { rechts }
     if x=zeilen then x:=1;
     if x=0 then x:=zeilen-1;
     if taste = '+' then begin
                       write('X');
                       feld1 [x,y] := 1;
                     end;
     if taste = '-' then begin
                       write(' ');
                       feld1 [x,y] := 0;
                     end;
     {if taste='r' then ruecksetzen;}
     until taste = chr(27); {Esc}

   end;


   PROCEDURE Bakterienanzeigen;           {die Position der zuvor gesetzten Bakterien wird erkannt} 
  var x,y:integer;
   begin
   for x := 1 to spalten do
       begin
          for y := 1 to zeilen do
              begin
                if feld1 [x,y] = 1 then
                  begin
                    gotoxy(x,y);
                    write('X');
                  end
                    else
                     begin
                       gotoxy(x,y);
                       write(' ');
                     end;
              end;
       end;
   end;{grafikzeigen}

   function Nachbar_position_speichern(x,y:integer):integer;
   var n:integer;

   begin
     n := 0;
     If feld1 [x,y+1] = 1   then inc(n);      {wenn an der position [x,y+1] ein x steht, wird n um 1 erhöht}
     If feld1 [x,y-1] = 1   then inc(n);
     If feld1 [x+1,y] = 1   then inc(n);
     If feld1 [x-1,y] = 1   then inc(n);
     if neumann=1 then
       begin
         If feld1 [x-1,y-1] = 1 then inc(n);
         If feld1 [x+1,y+1] = 1 then inc(n);
         If feld1 [x-1,y+1] = 1 then inc(n);
         If feld1 [x+1,y-1] = 1 then inc(n);
       end;
     nachbar_position_speichern:=n;
   end;

   procedure Nachbarn_erkennen;
   begin
   for x := 1 to spalten do
       begin
          for y := 1 to zeilen do
              begin
               feld2 [x,y] := 0;
               if nachbar_position_speichern(x,y) = 3 then feld2 [x,y] := 1;
               if nachbar_position_speichern(x,y) = 2 then feld2 [x,y] := 1;
              end;{for}
       end;{for}
   end;{erzeugezustand2}

   PROCEDURE vertauschezustaende;
  var x,y : integer;
   begin
   for x := 1 to spalten do
       begin
          for y := 1 to zeilen do
              begin
                feld1 [x,y] := feld2 [x,y];
              end;{for}
       end;{for}
   end;{clearzustand}



   var
    runden_zaehler:integer;
   begin

   clearzustand;
   Bakterienzone;
   bakterienanzeigen;
   repeat
     runden_zaehler:=runden_zaehler+1;
     nachbarn_erkennen; 
     vertauschezustaende;
     Bakterienanzeigen;
   until runden_zaehler=runden;;
   end.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück