Blame lazarus/maze/unit1.pas

Ivan Mahonin 3f629b
unit Unit1;
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
{$mode objfpc}{$H+}
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
interface
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
uses
Ivan Mahonin 3f629b
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, LCLType;
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
type
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
  { TForm1 }
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
  TForm1 = class(TForm)
Ivan Mahonin 3f629b
    procedure FormCreate(Sender: TObject);
Ivan Mahonin 3f629b
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
Ivan Mahonin 3f629b
    procedure FormPaint(Sender: TObject);
Ivan Mahonin 3f629b
  private
Ivan Mahonin 3f629b
    { private declarations }
Ivan Mahonin 3f629b
  public
Ivan Mahonin 3f629b
    { public declarations }
Ivan Mahonin 3f629b
  end;
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
const
Ivan Mahonin 3f629b
  rows = 10;
Ivan Mahonin 3f629b
  cols = 10;
Ivan Mahonin 3f629b
  size = 30;
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
var
Ivan Mahonin 3f629b
  Form1: TForm1;
Ivan Mahonin 3f629b
  board: array[0..rows, 0..cols] of boolean;
Ivan Mahonin 3f629b
  px, py: integer;
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
implementation
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
{$R *.lfm}
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
procedure TForm1.FormCreate(Sender: TObject);
Ivan Mahonin 3f629b
var
Ivan Mahonin 3f629b
  f: textfile;
Ivan Mahonin 3f629b
  c: char;
Ivan Mahonin 3f629b
  x, y: integer;
Ivan Mahonin 3f629b
begin
Ivan Mahonin 3f629b
  AssignFile(f, 'level.txt');
Ivan Mahonin 3f629b
  Reset(f);
Ivan Mahonin 3f629b
  for y:=0 to rows-1 do begin
Ivan Mahonin 3f629b
    for x:=0 to cols-1 do begin
Ivan Mahonin 3f629b
      Read(f, c);
Ivan Mahonin 3f629b
      if c = '.' then board[x, y] := true;
Ivan Mahonin 3f629b
      if c = '#' then board[x, y] := false;
Ivan Mahonin 3f629b
      if c = 'X' then begin
Ivan Mahonin 3f629b
        board[x, y] := true;
Ivan Mahonin 3f629b
        px := x;
Ivan Mahonin 3f629b
        py := y;
Ivan Mahonin 3f629b
      end;
Ivan Mahonin 3f629b
    end;
Ivan Mahonin 3f629b
    Readln(f, c);
Ivan Mahonin 3f629b
  end;
Ivan Mahonin 3f629b
  CloseFile(f);
Ivan Mahonin 3f629b
end;
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
procedure TForm1.FormPaint(Sender: TObject);
Ivan Mahonin 3f629b
var
Ivan Mahonin 3f629b
  x, y: integer;
Ivan Mahonin 3f629b
begin
Ivan Mahonin 3f629b
  for y:=0 to rows-1 do begin
Ivan Mahonin 3f629b
    for x:=0 to cols-1 do begin
Ivan Mahonin 3f629b
      if board[x, y] = false then begin
Ivan Mahonin 3f629b
        Canvas.Rectangle(x*size, y*size, (x+1)*size, (y+1)*size);
Ivan Mahonin 3f629b
      end;
Ivan Mahonin 3f629b
    end;
Ivan Mahonin 3f629b
  end;
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
  Canvas.Ellipse(px*size, py*size, (px+1)*size, (py+1)*size);
Ivan Mahonin 3f629b
end;
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Ivan Mahonin 3f629b
  Shift: TShiftState);
Ivan Mahonin 3f629b
var
Ivan Mahonin 3f629b
  x, y: integer;
Ivan Mahonin 3f629b
begin
Ivan Mahonin 3f629b
  x := px;
Ivan Mahonin 3f629b
  y := py;
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
  if Key = VK_UP then y := py - 1;
Ivan Mahonin 3f629b
  if Key = VK_DOWN then y := py + 1;
Ivan Mahonin 3f629b
  if Key = VK_LEFT then x := px - 1;
Ivan Mahonin 3f629b
  if Key = VK_RIGHT then x := px + 1;
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
  if board[x, y] then begin
Ivan Mahonin 3f629b
    px := x;
Ivan Mahonin 3f629b
    py := y;
Ivan Mahonin 3f629b
  end;
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
  if (x < 0) or (y < 0) or (x >= cols) or (y >= rows) then begin
Ivan Mahonin 3f629b
    ShowMessage('You are escaped from this maze!');
Ivan Mahonin 3f629b
  end;
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
  Refresh;
Ivan Mahonin 3f629b
end;
Ivan Mahonin 3f629b
Ivan Mahonin 3f629b
end.
Ivan Mahonin 3f629b