% 
%   >> obj = RandomWalk( 100, 100 )
%   >> obj.walk( 1 );
%   >> obj.walk( 10 );
% 
classdef RandomWalk < handle
  
  properties
    nZ = 0;         % Zahl der Zeilen des Feldes
    nS = 0;         % Zahl der Spalten
    mult = 20;      % Multiplizität der Schrittlänge
    start = [0,0];  % Startpunkt
  end
  
  methods
    % Konstruktor übernimmt Größe des Feldes  
    function obj = RandomWalk( nZ, nS )
      obj.nZ = nZ;  
      obj.nS = nS;
      obj.start = [nZ/2,nS/2];  % Startpunkt in der Mitte des Feldes
      
      figure;   % neue Grafik als Start
      plot( obj.start(1), obj.start(2), 'b-+' );
      axis( [0 obj.nS 0 obj.nZ] );
    end
    
    % steps Schritte laufen, z.B. steps = 1 
    function walk( obj, steps )
      
      hold on
      
      akt = obj.start;   % nächster Punkt
      pre = obj.start;   % Startpunkt
      for( n = 1:steps )     % steps Schritte laufen 
        d = rand( 1, 2 ) - 0.5;   % 2 Zufallszahlen für x und y
        akt = pre + obj.mult*d;   % nächster Punkt
        % Linie zu nächstem Punkt zeichnen
        plot( [pre(1),akt(1)], [pre(2),akt(2)], 'b-+' ); 
        pre = akt;
      end
      
      axis( [0 obj.nS 0 obj.nZ] );
      hold off
      
      obj.start = akt;  % Endpunkt
    end
    
    % Feld initialisieren
    function init( obj )
      obj.start = [obj.nZ/2,obj.nS/2];
      clf;
      plot( obj.start(1), obj.start(2), 'b-+' );
      axis( [0 obj.nS 0 obj.nZ] );
    end
    
  end
  
end
