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 3 by yamat0jp, Tue Oct 6 00:25:26 2015 UTC revision 4 by yamat0jp, Wed Oct 7 08:54:52 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      procedure Walk(var p, q: integer); virtual;      function Walk: Boolean; 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      procedure Walk(var p, q: integer); override;      function Walk: Boolean; override;
31      procedure Wall; overload; override;      procedure Wall; override;
32      procedure Clear; override;      procedure Clear; override;
33      procedure RunAway(out p, q: integer);      procedure RunAway;
34    end;    end;
35    
36    TWorry = class(TEnemy)    TWorry = class(TEnemy)
# Line 41  type Line 41  type
41    TGhost = class(TEnemy)    TGhost = class(TEnemy)
42    public    public
43      constructor Create;      constructor Create;
44      procedure Wall(p, q: integer); overload;      procedure Wall; override;
45    end;    end;
46    
47    TMap = class(TObject)    TMap = class(TObject)
# Line 74  type Line 74  type
74      { private 宣言 }      { private 宣言 }
75    public    public
76      { public 宣言 }      { public 宣言 }
     Map: TMap;  
     Char: TChar;  
77      List: TList;      List: TList;
78      Count: integer;      Count: integer;
79      procedure Start;      procedure Start;
# Line 86  type Line 84  type
84    
85  var  var
86    Form1: TForm1;    Form1: TForm1;
87      Map1: TMap;
88      Char1: TChar;
89    
90  implementation  implementation
91    
# Line 141  var Line 141  var
141    i, j, k: integer;    i, j, k: integer;
142    s: TChar;    s: TChar;
143  begin  begin
144    Map := TMap.Create;    Map1 := TMap.Create;
145    Map.Clear;    Map1.Clear;
146    ClientWidth := Map.Size * Map.Wid;    ClientWidth := Map1.Size * Map1.Wid;
147    ClientHeight := Map.Size * Map.Hei;    ClientHeight := Map1.Size * Map1.Hei;
148    List := TList.Create;    List := TList.Create;
149    Char := TChar.Create;    Char1 := TChar.Create;
150    List.Add(Char);    List.Add(Char1);
151    List.Add(TWorry.Create);    List.Add(TWorry.Create);
152    List.Add(TGhost.Create);    List.Add(TGhost.Create);
153    for i := 0 to Map.Wid - 1 do    for i := 0 to Map1.Wid - 1 do
154      for j := 0 to Map.Hei - 1 do      for j := 0 to Map1.Hei - 1 do
155      begin      begin
156        k := Map[i, j];        k := Map1[i, j];
157        if k in [2 .. 4] then        if k in [2 .. 4] then
158        begin        begin
159          s := List[k - 2];          s := List[k - 2];
# Line 169  var Line 169  var
169    i: integer;    i: integer;
170    s: TChar;    s: TChar;
171  begin  begin
172    Map.Free;    Map1.Free;
173    for i := 0 to List.Count - 1 do    for i := 0 to List.Count - 1 do
174    begin    begin
175      s := List[i];      s := List[i];
# Line 183  procedure TForm1.FormKeyDown(Sender: TOb Line 183  procedure TForm1.FormKeyDown(Sender: TOb
183  begin  begin
184    case Key of    case Key of
185      vkLeft:      vkLeft:
186        Char.Dir := TDir.Left;        Char1.Dir := TDir.Left;
187      vkRight:      vkRight:
188        Char.Dir := Right;        Char1.Dir := Right;
189      vkUp:      vkUp:
190        Char.Dir := Up;        Char1.Dir := Up;
191      vkDown:      vkDown:
192        Char.Dir := Down;        Char1.Dir := Down;
193      vkEscape:      vkEscape:
194        Start;        Start;
195    end;    end;
# Line 203  var Line 203  var
203    s: TChar;    s: TChar;
204    procedure detail(X, Y: integer; z: Extended);    procedure detail(X, Y: integer; z: Extended);
205    begin    begin
206      Canvas.DrawBitmap(Image1.Bitmap, RectF(X * Map.Size, Y * Map.Size,      Canvas.DrawBitMap(Image1.BitMap, RectF(X * Map1.Size, Y * Map1.Size,
207        (X + 1) * Map.Size, (Y + 1) * Map.Size), RectF(i * Map.Size, j * Map.Size,        (X + 1) * Map1.Size, (Y + 1) * Map1.Size),
208        (i + 1) * Map.Size, (j + 1) * Map.Size), z);        RectF(i * Map1.Size, j * Map1.Size, (i + 1) * Map1.Size,
209          (j + 1) * Map1.Size), z);
210    end;    end;
211    procedure enemy(X, Y: integer);    procedure enemy(X, Y: integer);
212    begin    begin
213      Canvas.FillRect(RectF(X * Map.Size, Y * Map.Size, (X + 1) * Map.Size,      Canvas.FillRect(RectF(X * Map1.Size, Y * Map1.Size, (X + 1) * Map1.Size,
214        (Y + 1) * Map.Size), 0, 0, [], 1);        (Y + 1) * Map1.Size), 0, 0, [], 1);
215    end;    end;
216    
217  begin  begin
218    for i := 0 to Map.Wid - 1 do    for i := 0 to Map1.Wid - 1 do
219      for j := 0 to Map.Hei - 1 do      for j := 0 to Map1.Hei - 1 do
220        case Map[i, j] of        case Map1[i, j] of
221          0:          0:
222            detail(0, 0, 1);            detail(0, 0, 1);
223          1:          1:
# Line 224  begin Line 225  begin
225          10:          10:
226            detail(2, 1, 1);            detail(2, 1, 1);
227        end;        end;
228    i := Char.X;    i := Char1.X;
229    j := Char.Y;    j := Char1.Y;
230    case Char.Dir of    case Char1.Dir of
231      TDir.Left, Stop:      TDir.Left, Stop:
232        detail(0, 1, 1);        detail(0, 1, 1);
233      Right:      Right:
# Line 249  var Line 250  var
250    i: integer;    i: integer;
251    j: integer;    j: integer;
252  begin  begin
253    for i := 0 to Map.Wid - 1 do    for i := 0 to Map1.Wid - 1 do
254      for j := 0 to Map.Hei - 1 do      for j := 0 to Map1.Hei - 1 do
255        if Map[i, j] = 0 then        if Map1[i, j] = 0 then
256          Exit;          Exit;
257    Start;    Start;
258  end;  end;
# Line 264  begin Line 265  begin
265    for i := 1 to 2 do    for i := 1 to 2 do
266    begin    begin
267      s := List[i];      s := List[i];
268      if (Char.X = s.X) and (Char.Y = s.Y) then      if (Char1.X = s.X) and (Char1.Y = s.Y) then
269        if Action = true then        if Action = true then
270          with s as TEnemy do          with s as TEnemy do
271          begin          begin
272            Visible := false;            Visible := false;
273            Count:=20;            Count := 20;
274          end          end
275        else        else
276        begin        begin
# Line 297  var Line 298  var
298    s: TChar;    s: TChar;
299  begin  begin
300    Action := false;    Action := false;
301    Map.Clear;    Map1.Clear;
302    for i := 0 to List.Count - 1 do    for i := 0 to List.Count - 1 do
303    begin    begin
304      s := List[i];      s := List[i];
305      s.Clear;      s.Clear;
306      if s = Char then      if s = Char1 then
307        Map[s.X, s.Y] := 10        Map1[s.X, s.Y] := 10
308      else      else
309        Map[s.X, s.Y] := 0;        Map1[s.X, s.Y] := 0;
310    end;    end;
311  end;  end;
312    
# Line 314  var Line 315  var
315    i, p, q: integer;    i, p, q: integer;
316    s: TChar;    s: TChar;
317  begin  begin
318    Char.Walk(p, q);    if Char1.Walk = true then
   if Map[p,q] in [0, 9, 10] then  
319    begin    begin
320      Char.X := p;      p := Char1.X;
321      Char.Y := q;      q := Char1.Y;
322      if Map[p, q] = 9 then      if Map1[p, q] = 9 then
323        Action := true;        Action := true;
324      Map[p, q] := 10;      Map1[p, q] := 10;
325      GameOver;      GameOver;
326    end    end
327    else    else
328      Char.Wall;      Char1.Wall;
329    for i := 0 to List.Count - 1 do    for i := 0 to List.Count - 1 do
330    begin    begin
331      s := List[i];      s := List[i];
332      if s = Char then      if s = Char1 then
333        continue;        continue;
334      if (s as TEnemy).Visible = true then      if (s as TEnemy).Visible = true then
335      begin      begin
336        if Action = false then        if Action = false then
337        begin          (s as TEnemy).RunAway;
338          p := Char.X;        if s.Walk = false then
         q := Char.Y;  
         (s as TEnemy).RunAway(p, q);  
       end;  
       s.Walk(p, q);  
       if Map[p, q] <> 1 then  
       begin  
         s.X := p;  
         s.Y := q;  
       end  
       else  
339          s.Wall;          s.Wall;
340      end      end
341      else      else
# Line 375  begin Line 365  begin
365    Dir := Stop;    Dir := Stop;
366  end;  end;
367    
368  procedure TChar.Walk(var p, q: integer);  function TChar.Walk: Boolean;
369    var
370      p, q: integer;
371  begin  begin
372    p := X;    p := X;
373    q := Y;    q := Y;
# Line 389  begin Line 381  begin
381      Down:      Down:
382        q := Y + 1;        q := Y + 1;
383    end;    end;
384      if Map1[p, q] <> 1 then
385      begin
386        X := p;
387        Y := q;
388        result := true;
389      end
390      else
391        result := false;
392  end;  end;
393    
394  procedure TChar.Wall;  procedure TChar.Wall;
# Line 422  begin Line 422  begin
422    Visible := true;    Visible := true;
423  end;  end;
424    
425  procedure TEnemy.RunAway(out p, q: integer);  procedure TEnemy.RunAway;
426    var
427      p, q: integer;
428  begin  begin
429      p:=X;
430      q:=Y;
431    Randomize;    Randomize;
432    case Random(2) of    case Random(2) of
433      0:      0:
# Line 437  begin Line 441  begin
441        else        else
442          q := Y + 1;          q := Y + 1;
443    end;    end;
444      if Map1[p, q] <> 1 then
445      begin
446        X := p;
447        Y := q;
448      end;
449  end;  end;
450    
451  procedure TEnemy.Walk(var p, q: integer);  function TEnemy.Walk: Boolean;
452  begin  begin
453    inherited;    inherited;
454    dec(Count);    dec(Count);
# Line 480  begin Line 489  begin
489    Max := 3;    Max := 3;
490  end;  end;
491    
492  procedure TGhost.Wall(p, q: integer);  procedure TGhost.Wall;
493    var
494      p, q: integer;
495  begin  begin
496    inherited Wall;    inherited;
497      p := Char1.X;
498      q := Char1.Y;
499    Randomize;    Randomize;
500    case Random(2) of    case Random(2) of
501      0:      0:

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

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