1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
type
TCode = (W, F, J);
...
const
Maze = 'WWWWWWWWWWWFFWFFWFFFFFFWFFWFFFFFFWFFWFFFFFFWFFWFFFFFFWFFWFFFFFFWFFWFFFFFFWFFWFFFFFFWFFWFFWWWWWWWWWWW';
var
Map :array[0..9, 0..9] of TCode;
RawMap :array[1..100] of TCode absolute Map;
Jx, Jy, NewJX, NewJY: Integer; // Position du joueur
// Info ...
// W = Mur
// F = Espace libre
// J = Joueur
function CharCode(IChar: Char): TCode;
begin
Result := F;
case IChar of
'W': Result := W;
'F': Result := F;
'J': Result := J;
end;
end;
procedure TForm1.ChrMapClick(Sender: TObject);
var
I: Integer;
begin
for I := 1 to Length(Maze) do
begin
RawMap[i] := CharCode(Maze[i]);
End;
procedure TForm1.GameDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with Game.Canvas do
begin
case Map[ACol,ARow] of
W: Draw(Rect.Left +1, Rect.Top +1, ImW.Picture.Graphic);
F: Draw(Rect.Left +1, Rect.Top +1, ImF.Picture.Graphic);
J: Draw(Rect.Left +1, Rect.Top +1, ImJ.Picture.Graphic);
end;
end;
end;
procedure TForm1.JMove;
begin
// Ancienne position du joueur
if Map[Jy,Jx] = J then
begin
Map[Jy,Jx] := F;
GameDrawCell(Self,Jx, Jy, Rect(Jx*16, Jy*16, Jx*16+15, Jy*16+15),[]);
end;
Jx := NewJX;
Jy := NewJY;
// Nouvelle position du joueur
if Map[Jy,Jx] = F then
begin
Map[Jy,Jx] := J;
GameDrawCell(Self,Jx, Jy, Rect(Jx*16, Jy*16, Jx*16+15, Jy*16+15),[]);
end;
end;
procedure TForm1.GameKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key < 41) and (key > 36) then
begin
NewJX := Jx;
NewJY := Jy;
case key of
// Y
38: if NewJY > 0 then NewJY := Jy-1;
40: if NewJY < 9 then NewJY := Jy+1;
// X
37: if NewJX > 0 then NewJX := Jx-1;
39: if NewJX < 9 then NewJX := Jx+1;
end;
case Map[NewJx,NewJY] of
F: MoveBlip;
end;
end;
end; |
Partager