Zdravím!
Pracuju na hře, ve které by se měl kurzor pohybovat po hrací ploše a nepřesáhnout hranice předem dané cesty. Mapy a cesty si může uživatel tvořit sám pomocí textového souboru, který má 20 řádků a sloupců a 0 přestavuje plné okno takže zátaras a 1 volnou cestu. Začnete výběrem mapy, kliknete na tlačítko a tím se vykreslí mapa a panáček/kurzor se přesune na danou pozici, která je volná. Problém, který teď řeším je, jak ošetřit, aby při překročení vymezené hranice byl konec hry. V uvedeném zdrojovém kódu se to snažím dělat tak, že si načítám znaky textového souboru a dokud je 0, tak se nic neděje, ale jamile se objeví v cestě 1, tak chci zaznamenat souřadnici právě té předcházející 0, ale netuším, jak na to. Předem děkuju
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, StdCtrls, jpeg;
type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
MainMenu1: TMainMenu;
Button1: TButton;
MMOtevri: TMenuItem;
procedure MMOtevriClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
polec:array [1..20,1..20] of integer;
poleo:array [1..20,1..20] of TImage;
x,y:integer;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Poloha : Tpoint;
f:textfile;
z:char;
i,j:integer;
implementation
{$R *.dfm}
procedure TForm1.MMOtevriClick(Sender: TObject); //otevírá obrázek
begin
{otevírání souboru a načítání znaků do polec}
if opendialog1.Execute then assignFile(f,opendialog1.FileName);
reset(f);
button1.Enabled:=true; //at neaktivuju mapu před načtením
j:=1;
while not eof(f) do begin
i:=1;
while not eoln(f) do begin
read (f,z);
polec[i,j]:=strtoint(z);
i:=i+1;
end;
readln(f);
j:=j+1;
end;
{zjištění souřadnic hranice mezi 0 a 1}
{j:=0;
for j:=1 to 20 do begin
i:=1;
while polec[i,j]=0 do i:=i+1;}
//zjistit pozici kurzoru
closefile(f);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.Enabled:=false;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
kurzor: THandle;
cesta: PChar;
begin
Poloha.X:=Left+295;
Poloha.Y:=Top+100;
i:=0;
j:=0;
for i:=1 to 20 do begin
for j:=1 to 20 do
begin
poleo[i,j]:=TImage.create(self);
case polec[i,j] of
0: poleo[i,j].picture.bitmap.loadfromresourcename (HInstance, 'ZED');
1: poleo[i,j].picture.bitmap.loadfromresourcename (HInstance, 'PRAZDNO');
2: begin
poleo[i,j].Picture.LoadFromFile('finish.jpg');
end;
end;
poleo[i,j].Top:=j*28-28;
poleo[i,j].Left:=i*28+28;
poleo[i,j].parent:=self;
end;
end;
SetCursorPos (Poloha.X, Poloha.Y); //Poloha.X - horizontální pozice, Poloha.Y - vertikální pozice
cesta:=PChar('Pacman.cur');
kurzor:=LoadImage(0, cesta, IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE or LR_LOADFROMFILE);
Screen.Cursors[1] := kurzor;
Form1.Cursor := 1;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
GetCursorPos(Poloha);
end;
end.