我使用TDrawGrid组件绘制网格。 46Y x 70X
如果我选择一个单元格,它将用clGrey
着色,如果我再次选择它,它将再次以白色着色。我想要计算所有clGrey
couloured细胞。
我的以下代码是我尝试过的,但没有用。
procedure TForm2.RasterDrawGridSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
UniversumsMatrix[ACol, ARow] := not UniversumsMatrix[ACol, ARow];
begin
if RasterDrawGrid.Brush.Color = clGrey then begin
Zellenstand := Zellenstand - 1
end
else
Zellenstand := Zellenstand +1 ;
end;
end;
procedure TForm2.RasterDrawGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if UniversumsMatrix[ACol, ARow] then
RasterDrawGrid.Canvas.Brush.Color := clGray // Grauer der lebendigen Hintergrund
else
RasterDrawGrid.Canvas.Brush.Color := clWhite; // Weißer Hintergrund
RasterDrawGrid.Canvas.FillRect(Rect);
end;
答案 0 :(得分:6)
处理计数器的一种更有效的方法是使用相应的setter和getter将数组包装在一个类中,并仅通过setter和getter访问数组。
Type
TUniverseClass = Class
Private
FArray: Array [0 .. 71, 0 .. 45] of Boolean;
FLivingCount: Integer;
function GetXY(X, Y: Integer): Boolean;
procedure SetXY(X, Y: Integer; const Value: Boolean);
Public
Property XYValue[X, Y: Integer]: Boolean Read GetXY Write SetXY;
Property LivingCount: Integer Read FLivingCount;
End;
var
UniverseClass: TUniverseClass;
{ UniverseClass }
function TUniverseClass.GetXY(X, Y: Integer): Boolean;
begin
Result := FArray[X, Y];
end;
procedure TUniverseClass.SetXY(X, Y: Integer; const Value: Boolean);
begin
if FArray[X, Y] <> Value then
if Value then
Inc(FLivingCount)
else
Dec(FLivingCount);
FArray[X, Y] := Value;
end;
// example call
procedure TForm1.Button1Click(Sender: TObject);
begin
UniverseClass.XYValue[0, 0] := true;
Memo1.Lines.Add(IntToStr(UniverseClass.LivingCount));
UniverseClass.XYValue[1, 1] := true;
Memo1.Lines.Add(IntToStr(UniverseClass.LivingCount));
UniverseClass.XYValue[0, 0] := false;
Memo1.Lines.Add(IntToStr(UniverseClass.LivingCount));
end;
initialization
UniverseClass := TUniverseClass.Create;
finalization
UniverseClass.Free;
答案 1 :(得分:3)
看起来在UniversumsMatrix中你已经有了布尔值。只需计算真或假值。
答案 2 :(得分:1)
UniversumsMatrix由你填补。为什么没有一个Sum变量,当你将值设置为TRUE时,该变量会增加?你甚至不用打算在绘制网格中计算细胞?