После долгого баловства с гридами решил заняться графикой и написать простенькую игру. Но обломился на первой же минуте.
Создал игровое поле, вот его код:
- Код: Выделить всё
unit field;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics;
type TField = class
var xnum, ynum, cellsize: integer; //Количество столбцов, количество строк, размер клетки в пикселях
constructor Create(cxnum, cynum, ccellsize: integer);
end;
var
GField: TField; //Собственно поле
implementation
constructor TField.Create(cxnum, cynum, ccellsize: integer);
begin
xnum:=cxnum;
ynum:=cynum;
cellsize:=ccellsize;
end;
end.
В основную форму налепил кнопку, по которой в соответствии с полем рисуется сетка
- Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
field;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
i: integer;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
GField.Create(10, 10, 50);
//i:=GField.xnum;
for i:=1 to GField.ynum do Form1.Canvas.Line(0, GField.cellsize*i, GField.xnum*GField.cellsize, GField.cellsize*i);
for i:=1 to GField.xnum do Form1.Canvas.Line(GField.cellsize*i, 0, GField.cellsize*i, GField.xnum*GField.cellsize);
end;
end.
При обращении к любому параметру GField вылезает ошибка External: SIGSEGV. Раньше она у меня вылезала при выходе за границу массива, но сейчас, проверив строкой i:=GField.xnum и наблюдением за переменной, убедился, что она вылезает потому что GField просто не создается.
Помогите, пожалуйста, это исправить. Буду очень благодарен.