6 System.SysUtils, System.Types, System.UITypes, System.Classes,
\r
8 FMX.Types, FMX.Controls, FMX.Forms3D, FMX.Types3D, FMX.Forms, FMX.Graphics,
\r
9 FMX.Dialogs, System.Math.Vectors, FMX.Objects3D, FMX.Controls3D,
\r
10 FMX.MaterialSources, FMX.StdCtrls, FMX.Layers3D, Generics.Collections;
\r
18 TForm1 = class(TForm3D)
\r
22 LightMaterialSource1: TLightMaterialSource;
\r
24 LightMaterialSource2: TLightMaterialSource;
\r
26 procedure Timer1Timer(Sender: TObject);
\r
27 procedure Form3DKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
\r
28 Shift: TShiftState);
\r
29 procedure Form3DCreate(Sender: TObject);
\r
30 procedure Form3DDestroy(Sender: TObject);
\r
32 { private
\90é
\8c¾ }
\r
52 procedure TForm1.Form3DCreate(Sender: TObject);
\r
54 Char := TList.Create;
\r
55 rec := TList<TRec>.Create;
\r
59 procedure TForm1.Form3DDestroy(Sender: TObject);
\r
61 Timer1.Enabled := false;
\r
67 procedure TForm1.Form3DKeyDown(Sender: TObject; var Key: Word;
\r
68 var KeyChar: Char; Shift: TShiftState);
\r
72 Cone1.RotationAngle.Z := Cone1.RotationAngle.Z - 5;
\r
74 Cone1.RotationAngle.Z := Cone1.RotationAngle.Z + 5;
\r
80 procedure TForm1.Start;
\r
83 Dummy := TComponent.Create(Form1);
\r
86 Cone1.Position.X := 0;
\r
87 Cone1.Position.Y := 0;
\r
88 Cube1.Position.X := 9 - Random(19);
\r
89 Cube1.Position.Y := 9 - Random(19);
\r
92 Timer1.Enabled := true;
\r
95 procedure TForm1.Timer1Timer(Sender: TObject);
\r
101 s.X := Cone1.Position.X;
\r
102 s.Y := Cone1.Position.Y;
\r
103 s.Z := Cone1.RotationAngle.Z;
\r
105 if rec.count > Char.count * 10 then
\r
107 for i := 1 to Char.count - 1 do
\r
110 if i * 10 > rec.count then
\r
112 s := rec.Items[rec.count - i * 10];
\r
113 s1.Position.X := s.X;
\r
114 s1.Position.Y := s.Y;
\r
115 s1.RotationAngle.Z := s.Z;
\r
116 if s1.Visible = false then
\r
117 s1.Visible := true;
\r
119 Cone1.Position.X := Cone1.Position.X + 0.1 *
\r
120 cos(DegToRad(Cone1.RotationAngle.Z - 90));
\r
121 Cone1.Position.Y := Cone1.Position.Y + 0.1 *
\r
122 sin(DegToRad(Cone1.RotationAngle.Z - 90));
\r
123 if (Abs(Cone1.Position.X - Cube1.Position.X) < 1) and
\r
124 (Abs(Cone1.Position.Y - Cube1.Position.Y) < 1) and (Cube1.Visible = true)
\r
127 Cube1.Visible := false;
\r
128 Cube1.Position.X := 9 - Random(19);
\r
129 Cube1.Position.Y := 9 - Random(19);
\r
130 s1 := TCube.Create(Dummy);
\r
131 s1.Visible := false;
\r
132 s1.MaterialSource := LightMaterialSource1;
\r
133 s1.Parent := Form1;
\r
137 if Cube1.Visible = false then
\r
141 Cube1.Visible := true;
\r
144 if (Cone1.Position.X < -10) or (Cone1.Position.X > 10) or
\r
145 (Cone1.Position.Y < -10) or (Cone1.Position.Y > 10) then
\r
146 Timer1.Enabled := false;
\r
147 for i := 2 to Char.count - 1 do
\r
149 s1 := TCustomMesh(Char[i]);
\r
150 if (Abs(Cone1.Position.X - s1.Position.X) < 1) and
\r
151 (Abs(Cone1.Position.Y - s1.Position.Y) < 1) and (s1.Visible = true) then
\r
152 Timer1.Enabled := false;
\r
154 inc(score, 10 * Char.count);
\r
155 Text3D1.Text := score.ToString;
\r