Develop and Download Open Source Software

Browse Subversion Repository

Diff of /Unit1.pas

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 4 by yamat0jp, Wed Oct 7 08:54:52 2015 UTC revision 5 by yamat0jp, Wed Oct 7 13:11:07 2015 UTC
# Line 16  type Line 16  type
16      Dir: TDir;      Dir: TDir;
17      X, Y: integer;      X, Y: integer;
18      AX, AY: integer;      AX, AY: integer;
19      function Walk: Boolean; virtual;      procedure Walk; virtual;
20      procedure Wall; virtual;      procedure Wall; virtual;
21      procedure Clear; virtual;      procedure Clear; virtual;
22    end;    end;
# Line 27  type Line 27  type
27      Max: integer;      Max: integer;
28      Visible: Boolean;      Visible: Boolean;
29      constructor Create;      constructor Create;
30      function Walk: Boolean; override;      procedure Walk; override;
     procedure Wall; override;  
31      procedure Clear; override;      procedure Clear; override;
32      procedure RunAway;      procedure Wall; override;
33    end;    end;
34    
35    TWorry = class(TEnemy)    TWorry = class(TEnemy)
36    public    public
37      constructor Create;      constructor Create;
38        procedure Wall; override;
39    end;    end;
40    
41    TGhost = class(TEnemy)    TGhost = class(TEnemy)
# Line 147  begin Line 147  begin
147    ClientHeight := Map1.Size * Map1.Hei;    ClientHeight := Map1.Size * Map1.Hei;
148    List := TList.Create;    List := TList.Create;
149    Char1 := TChar.Create;    Char1 := TChar.Create;
   List.Add(Char1);  
150    List.Add(TWorry.Create);    List.Add(TWorry.Create);
151    List.Add(TGhost.Create);    List.Add(TGhost.Create);
152    for i := 0 to Map1.Wid - 1 do    for i := 0 to Map1.Wid - 1 do
153      for j := 0 to Map1.Hei - 1 do      for j := 0 to Map1.Hei - 1 do
154      begin      begin
155        k := Map1[i, j];        k := Map1[i, j];
156        if k in [2 .. 4] then        if k in [3, 4] then
157        begin        begin
158          s := List[k - 2];          s := List[k - 3];
159          s.AX := i;          s.AX := i;
160          s.AY := j;          s.AY := j;
161        end;        end;
162          if k = 2 then
163          begin
164            Char1.AX := i;
165            Char1.AY := j;
166          end;
167      end;      end;
168    Start;    Start;
169  end;  end;
# Line 169  var Line 173  var
173    i: integer;    i: integer;
174    s: TChar;    s: TChar;
175  begin  begin
176      Char1.Free;
177    Map1.Free;    Map1.Free;
178    for i := 0 to List.Count - 1 do    for i := 0 to List.Count - 1 do
179    begin    begin
# Line 200  procedure TForm1.FormPaint(Sender: TObje Line 205  procedure TForm1.FormPaint(Sender: TObje
205  var  var
206    i: integer;    i: integer;
207    j: integer;    j: integer;
208    s: TChar;    s: TEnemy;
209    procedure detail(X, Y: integer; z: Extended);    procedure detail(X, Y: integer; z: Extended);
210    begin    begin
211      Canvas.DrawBitMap(Image1.BitMap, RectF(X * Map1.Size, Y * Map1.Size,      Canvas.DrawBitMap(Image1.BitMap, RectF(X * Map1.Size, Y * Map1.Size,
# Line 237  begin Line 242  begin
242      Down:      Down:
243        detail(2, 0, 1);        detail(2, 0, 1);
244    end;    end;
245    for i := 1 to 2 do    for i := 0 to List.Count - 1 do
246    begin    begin
247      s := List[i];      s := List[i];
248      if (s as TEnemy).Visible = true then      if s.Visible = true then
249        enemy(s.X, s.Y);        enemy(s.X, s.Y);
250    end;    end;
251  end;  end;
# Line 260  end; Line 265  end;
265  procedure TForm1.GameOver;  procedure TForm1.GameOver;
266  var  var
267    i: integer;    i: integer;
268    s: TChar;    s: TEnemy;
269  begin  begin
270    for i := 1 to 2 do    for i := 0 to List.Count - 1 do
271    begin    begin
272      s := List[i];      s := List[i];
273      if (Char1.X = s.X) and (Char1.Y = s.Y) then      if (Char1.X = s.X) and (Char1.Y = s.Y) then
274        if Action = true then        if Action = true then
275          with s as TEnemy do        begin
276          begin          s.Visible := false;
277            Visible := false;          s.Count := 20;
278            Count := 20;        end
         end  
279        else        else
280        begin        begin
281          Start;          Start;
# Line 295  end; Line 299  end;
299  procedure TForm1.Start;  procedure TForm1.Start;
300  var  var
301    i: integer;    i: integer;
302    s: TChar;    s: TEnemy;
303  begin  begin
304    Action := false;    Action := false;
305    Map1.Clear;    Map1.Clear;
# Line 303  begin Line 307  begin
307    begin    begin
308      s := List[i];      s := List[i];
309      s.Clear;      s.Clear;
310      if s = Char1 then      Map1[s.X, s.Y] := 0;
       Map1[s.X, s.Y] := 10  
     else  
       Map1[s.X, s.Y] := 0;  
311    end;    end;
312      Char1.Clear;
313      Map1[Char1.X, Char1.Y] := 10;
314  end;  end;
315    
316  procedure TForm1.Timer1Timer(Sender: TObject);  procedure TForm1.Timer1Timer(Sender: TObject);
317  var  var
318    i, p, q: integer;    i, p, q: integer;
319    s: TChar;    s: TEnemy;
320  begin  begin
321    if Char1.Walk = true then    Char1.Walk;
322    begin    p := Char1.X;
323      p := Char1.X;    q := Char1.Y;
324      q := Char1.Y;    if Map1[p, q] = 9 then
325      if Map1[p, q] = 9 then      Action := true;
326        Action := true;    Map1[p, q] := 10;
327      Map1[p, q] := 10;    GameOver;
     GameOver;  
   end  
   else  
     Char1.Wall;  
328    for i := 0 to List.Count - 1 do    for i := 0 to List.Count - 1 do
329    begin    begin
330      s := List[i];      s := List[i];
331      if s = Char1 then      if s.Visible = true then
332        continue;        s.Walk
333      if (s as TEnemy).Visible = true then      else if s.Count = 0 then
334      begin        s.Clear
       if Action = false then  
         (s as TEnemy).RunAway;  
       if s.Walk = false then  
         s.Wall;  
     end  
335      else      else
336        with s as TEnemy do        dec(s.Count);
         if Count = 0 then  
           Clear  
         else  
           dec(Count);  
337    end;    end;
338    if Action = true then    if Action = true then
339    begin    begin
# Line 365  begin Line 355  begin
355    Dir := Stop;    Dir := Stop;
356  end;  end;
357    
358  function TChar.Walk: Boolean;  procedure TChar.Walk;
359  var  var
360    p, q: integer;    p, q: integer;
361  begin  begin
# Line 385  begin Line 375  begin
375    begin    begin
376      X := p;      X := p;
377      Y := q;      Y := q;
     result := true;  
378    end    end
379    else    else
380      result := false;      Wall;
381  end;  end;
382    
383  procedure TChar.Wall;  procedure TChar.Wall;
# Line 422  begin Line 411  begin
411    Visible := true;    Visible := true;
412  end;  end;
413    
414  procedure TEnemy.RunAway;  procedure TEnemy.Walk;
415    begin
416      inherited;
417      dec(Count);
418      if Count = 0 then
419        Wall;
420    end;
421    
422    procedure TEnemy.Wall;
423  var  var
424    p, q: integer;    p, q: integer;
425  begin  begin
426    p:=X;    p := Char1.X;
427    q:=Y;    q := Char1.Y;
428    Randomize;    Randomize;
429    case Random(2) of    case Random(2) of
430      0:      0:
431        if p < X then        if (p <= X) and (Map1[X + 1, Y] <> 1) then
432          p := X - 1          Dir := Right
433        else if p > X then        else
434          p := X + 1;          Dir := TDir.Left;
435      1:      1:
436        if q < Y then        if (q <= Y) and (Map1[X, Y + 1] <> 1) then
437          q := Y - 1          Dir := Down
438        else        else
439          q := Y + 1;          Dir := Up;
   end;  
   if Map1[p, q] <> 1 then  
   begin  
     X := p;  
     Y := q;  
440    end;    end;
441      Count := Max;
442  end;  end;
443    
444  function TEnemy.Walk: Boolean;  { TWorry }
445    
446    constructor TWorry.Create;
447  begin  begin
448    inherited;    Max := 5;
   dec(Count);  
   if Count = 0 then  
   begin  
     Wall;  
     Count := Max;  
   end;  
449  end;  end;
450    
451  procedure TEnemy.Wall;  procedure TWorry.Wall;
452  begin  begin
453    Count := Max;    if Form1.Action = true then
454      begin
455        inherited;
456        Exit;
457      end;
458    Randomize;    Randomize;
459    case Random(4) of    case Random(4) of
460      0:      0:
# Line 473  begin Line 466  begin
466      3:      3:
467        Dir := Down;        Dir := Down;
468    end;    end;
469  end;    Count := Max;
   
 { TWorry }  
   
 constructor TWorry.Create;  
 begin  
   Max := 5;  
470  end;  end;
471    
472  { TGhost }  { TGhost }
# Line 493  procedure TGhost.Wall; Line 480  procedure TGhost.Wall;
480  var  var
481    p, q: integer;    p, q: integer;
482  begin  begin
483    inherited;    if Form1.Action = true then
484      begin
485        inherited;
486        Exit;
487      end;
488    p := Char1.X;    p := Char1.X;
489    q := Char1.Y;    q := Char1.Y;
490    Randomize;    if p > X then
491    case Random(2) of    begin
492      0:      if Map1[p + 1, q] <> 1 then
493        if p > X then        Dir := Right
494          Dir := Right      else if q > Y then
495        else if p < X then        Dir := Down
496          Dir := TDir.Left;      else if q < Y then
497      1:        Dir := Up;
498        if q > Y then    end
499          Dir := Down    else if p < X then
500        else if q < Y then      if Map1[p - 1, q] <> 1 then
501          Dir := Up;        Dir := TDir.Left
502    end;      else if q > Y then
503          Dir := Down
504        else if q < Y then
505          Dir := Up;
506      Count := Max;
507  end;  end;
508    
509  end.  end.

Legend:
Removed from v.4  
changed lines
  Added in v.5

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26