Forum
Tipps
News
Menu-Icon

game des lebens

hab ein problem bei folgendem programm
die zellen  werden nicht richtig erzeugt.
ich konnte den fehler nicht finden und bitte um hilfe
danke

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.

Antworten zu game des lebens:

Das ganze Programm sieht n bissle komisch aus. Hab das game of life auch mal gemacht aber bei mir war der quelltext 4mal so lange :-p.

Wo hast du denn überhaupt Zellen? bei dir sind die Zellen doch lediglich die einzelnen Elemente von den arrays oder versteh ich da was nicht? Die werden dann doch gar nicht erzeugt und du hast sie ja auch mit 0 vorinitialisiert. Versteh nicht so ganz wo dein Problem liegt? Was meldet denn der Compiler?

Das ganze Programm sieht n bissle komisch aus. Hab das game of life auch mal gemacht aber bei mir war der quelltext 4mal so lange :-p.

Vielleicht konnte Dein Programm viermal so viele Zellen verwalten  :P:P:P:P:P:P:P:P:P:P:P

nö  :P:P:P aber n drittel davon war bestimmt ne grapfische ausgabe *lol* aber trotzdem sah das bei mir anders aus.


« JAVA-SUCHE DRINGEND EINE METHODEVC++ 6.0 SDI-Anwendung aus dialogfeldbasierender Anwendung starten? »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Quellcode
Ein Quellcode, auch als Quelltext bekannt, bezeichnet den unkompilierten Programm-Code einer Software. Quell- oder Programm-Code ist der auch für Menschen lesbare Co...

Unicode
Unicode ist ein international anerkannter Standard, der als universeller Zeichencode ("Universal Code") dient und durch das Unicode-Konsortium entwickelt und verwaltet wi...

QR-Code
QR-Codes, die Abkürzung für "Quick Response Codes", sind eine Form von zweidimensionalen Barcodes. Damit lassen sich Informationen schnell und effizient speiche...