Inhalt

Aktueller Ordner: beute
โฌ… รœbergeordnet

unitbeute.pas

unit Unitbeute;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils;

(******************************************************************)
(* Paul Koop M.A. Raeuber Beute System                            *)
(* Die Simulation wurde ursprunglich entwickelt,                  *)
(* um die Verwendbarkeit von Zellularautomaten                     *)
(* fuer die Algorithmisch Rekursive Sequanzanalyse                *)
(* zu ueberpruefen								*)
(* Modellcharakter hat allein der Quelltext. Eine Compilierung    *)
(* dient nur als Falsifikationsversuch                            *)
(******************************************************************)

(*------------------------------------ Datenstruktur -----------------*)
CONST

 l = char(2);

TYPE
 s = 0..10;
raum = array[1..80,1..24] of s;
 zahl = ^inhalt;
 inhalt = RECORD
           i:integer;
           v:zahl;
           n:zahl;
          END;
VAR
 a,b:raum;
 n,x,y,xa,ya:zahl;

PROCEDURE aufbau;
PROCEDURE abbaux(x:zahl);
PROCEDURE abbauy(y:zahl);
FUNCTION neu (VAR r:raum; VAR x,y:zahl):s;
PROCEDURE zufall(VAR von:raum);
PROCEDURE spiel(VAR von,nach :raum);

implementation


USES dos,crt;



(*---------------------------------------- Prozeduren ---------------*)
PROCEDURE aufbau;
 VAR z:integer;
 BEGIN
  z := 1;
  new(n);
  xa := n;
  x := n;
  x^.i := z;
  REPEAT
   z := z +1;
   new(n);
   x^.n := n;
   n^.v := x;
   x := n;
   x^.i := z;
  UNTIL z = 80;
  x^.n := xa;
  xa^.v := x;

  z := 1;
  new(n);
  ya := n;
  y := n;
  y^.i := z;
  REPEAT
   z := z +1;
   new(n);
   y^.n := n;
   n^.v := y;
   y := n;
   y^.i := z;
  UNTIL z = 24;
  y^.n := ya;
  ya^.v := y;
 END;

PROCEDURE abbaux(x:zahl);
 BEGIN
  IF x^.n <> xa THEN abbaux(x^.n);
  dispose(x);
 END;

PROCEDURE abbauy(y:zahl);
 BEGIN
  IF y^.n <> ya THEN abbauy(y^.n);
  dispose(y);
 END;

FUNCTION neu (VAR r:raum; VAR x,y:zahl):s;
 VAR z1,z2,z:integer;
 BEGIN
  z:=(
   r(.x^.v^.i,y^.v^.i.)+
   r(.x^.i   ,y^.v^.i.)+
   r(.x^.n^.i,y^.v^.i.)+
   r(.x^.v^.i,y^.i   .)+
   r(.x^.n^.i,y^.i   .)+
   r(.x^.v^.i,y^.n^.i.)+
   r(.x^.i   ,y^.n^.i.)+
   r(.x^.n^.i,y^.n^.i.));

  z2 := z div 10;
  z1 := z mod 10;

  IF (r(.x^.i,y^.i.) =0)
   THEN
    BEGIN
     IF z1 > 1
      THEN neu:= 1
      ELSE neu := 0
    END
   ELSE
    BEGIN
     IF (r(.x^.i,y^.i.) =1)
      THEN
       BEGIN
        IF z2  > 1
         THEN neu := 10
          ELSE
           BEGIN
            IF z1 in (.2,3.)
             THEN neu := 1
             ELSE neu := 0
           END
       END
      ELSE
       IF z1 <1
        THEN
          neu := 0
        ELSE
         BEGIN
          IF z2 in (.2,3.)
           THEN neu := 10
           ELSE neu := 0
         END
    END
 END;



PROCEDURE zufall(VAR von:raum);
 VAR x,y,z:integer;
 BEGIN
  randomize;gotoxy(1,1);
  FOR y := 1 TO 24
   DO
   FOR x := 1 TO 80
    DO
     BEGIN
      z := random(3);
      IF z = 2 THEN
         z := 10;
      von(.x,y.):=z;

     END;
 END;




PROCEDURE spiel(VAR von,nach :raum);
 BEGIN
  y :=ya;
  x :=xa;
  REPEAT
   REPEAT
    nach(.x^.i,y^.i.):=neu(von,x,y);
    x := x^.n
   UNTIL x =xa;
   y := y^.n
  UNTIL y =ya;
 END;




end.