source: trunk/UFormMain.pas

Last change on this file was 4, checked in by chronos, 3 years ago
  • Added: Human and AI player mode.
  • Added: Human can select one of offered tokens for movement.
File size: 3.7 KB
Line 
1unit UFormMain;
2
3{$mode delphi}{$H+}
4
5interface
6
7uses
8 Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Types, ExtCtrls, UGame, UGraphics;
9
10type
11
12 { TGameCanvas }
13
14 TGameCanvas = class(TCanvas)
15 private
16 FSize: TSize;
17 protected
18 function GetSize: TSize; override;
19 procedure SetSize(AValue: TSize); override;
20 public
21 Canvas: Graphics.TCanvas;
22 procedure TextOut(const Pos: TPoint; Text: string); override;
23 procedure Rectangle(const Rect: TRect); override;
24 procedure Line(const P1, P2: TPoint); override;
25 procedure Ellipse(const Bounds: TRect); override;
26 end;
27
28 { TFormMain }
29
30 TFormMain = class(TForm)
31 TimerEngineTick: TTimer;
32 procedure FormCreate(Sender: TObject);
33 procedure FormDestroy(Sender: TObject);
34 procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
35 procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
36 Shift: TShiftState; X, Y: Integer);
37 procedure FormPaint(Sender: TObject);
38 procedure TimerEngineTickTimer(Sender: TObject);
39 private
40 GameCanvas: TGameCanvas;
41 public
42 Game: TGame;
43 end;
44
45var
46 FormMain: TFormMain;
47
48
49implementation
50
51{$R *.lfm}
52
53uses
54 UClovece, UTetris;
55
56{ TGameCanvas }
57
58function TGameCanvas.GetSize: TSize;
59begin
60 Result := FSize;
61end;
62
63procedure TGameCanvas.SetSize(AValue: TSize);
64begin
65 FSize := AValue;
66end;
67
68procedure TGameCanvas.TextOut(const Pos: TPoint; Text: string);
69begin
70 if Brush.Style = bsClear then Canvas.Brush.Style := Graphics.bsClear
71 else Canvas.Brush.Style := Graphics.bsSolid;
72 Canvas.Brush.Color := Brush.Color;
73 Canvas.Font.Color := Pen.Color;
74 Canvas.TextOut(Pos.X, Pos.Y, Text);
75end;
76
77procedure TGameCanvas.Rectangle(const Rect: TRect);
78begin
79 if Brush.Style = bsClear then Canvas.Brush.Style := Graphics.bsClear
80 else Canvas.Brush.Style := Graphics.bsSolid;
81 Canvas.Brush.Color := Brush.Color;
82 if Brush.Style = bsClear then Canvas.Pen.Style := Graphics.psClear
83 else Canvas.Pen.Style := Graphics.psSolid;
84 Canvas.Pen.Color := Pen.Color;
85 Canvas.FillRect(Rect);
86end;
87
88procedure TGameCanvas.Line(const P1, P2: TPoint);
89begin
90 if Brush.Style = bsClear then Canvas.Brush.Style := Graphics.bsClear
91 else Canvas.Brush.Style := Graphics.bsSolid;
92 Canvas.Brush.Color := Brush.Color;
93 if Brush.Style = bsClear then Canvas.Pen.Style := Graphics.psClear
94 else Canvas.Pen.Style := Graphics.psSolid;
95 Canvas.Pen.Color := Pen.Color;
96 Canvas.Pen.Width := Pen.Width;
97 Canvas.Line(P1, P2);
98end;
99
100procedure TGameCanvas.Ellipse(const Bounds: TRect);
101begin
102 if Brush.Style = bsClear then Canvas.Brush.Style := Graphics.bsClear
103 else Canvas.Brush.Style := Graphics.bsSolid;
104 Canvas.Brush.Color := Brush.Color;
105 if Brush.Style = bsClear then Canvas.Pen.Style := Graphics.psClear
106 else Canvas.Pen.Style := Graphics.psSolid;
107 Canvas.Pen.Color := Pen.Color;
108 Canvas.Pen.Width := Pen.Width;
109 Canvas.Ellipse(Bounds);
110end;
111
112{ TFormMain }
113
114procedure TFormMain.FormCreate(Sender: TObject);
115begin
116 Randomize;
117 Game := TClovece.Create;
118 GameCanvas := TGameCanvas.Create;
119 GameCanvas.Canvas := Canvas;
120 Game.Reset;
121end;
122
123procedure TFormMain.FormDestroy(Sender: TObject);
124begin
125 GameCanvas.Free;
126 Game.Free;
127end;
128
129procedure TFormMain.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState
130 );
131begin
132 Game.KeyUp(Key);
133end;
134
135procedure TFormMain.FormMouseUp(Sender: TObject; Button: TMouseButton;
136 Shift: TShiftState; X, Y: Integer);
137begin
138 Game.MouseUp(Button, Point(X, Y));
139end;
140
141procedure TFormMain.FormPaint(Sender: TObject);
142begin
143 GameCanvas.Size := TSize.Create(Width, Height);
144 Game.Paint(GameCanvas);
145end;
146
147procedure TFormMain.TimerEngineTickTimer(Sender: TObject);
148begin
149 //Engine.Tick;
150 if Game.RedrawPending then
151 Repaint;
152end;
153
154end.
155
Note: See TracBrowser for help on using the repository browser.