📄 rei_31.pas
字号:
unit Rei_31;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Menus, StdCtrls;
type
TRei40_31 = class(TForm)
Timer1: TTimer;
MainMenu1: TMainMenu;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ReDraw(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private 定义 }
public
{ Public 定义 }
end;
var
Rei40_31: TRei40_31;
// 定义重绘用的点阵图
Make_Bmap: TBitmap;
// 定义各种变量类型(Byte、Word、Integer、Extended、TRect)
St: Byte;
Cheight, Cwidth, CT: Word;
X1, Y1, X2, Y2, QX, QY: Integer;
TR1, DR1, TR2, DR2, QTR, TX, TY: Extended;
Rect_D: TRect;
implementation
{$R *.DFM}
procedure TRei40_31.FormCreate(Sender: TObject);
begin
// 设定Form属性
Rei40_31.Height := 480;
Rei40_31.Width := 640;
Button1.Height := 41;
Button1.Left := 580;
Button1.Top := 16;
Button1.Width := 41;
Cheight := Rei40_31.ClientHeight;
Cwidth := 570;
// 储存重绘用点阵图
Make_Bmap := TBitmap.Create;
Make_Bmap.Width := Cwidth;
Make_Bmap.Height := Cheight;
end;
procedure TRei40_31.Timer1Timer(Sender: TObject);
begin
with Rei40_31 do
case St of
// 若St=0则将画面与变量初始化
0: begin
Rect_D := Rect(0, 0, Cwidth, Cheight);
Canvas.Brush.Color := clBlack;
Canvas.FillRect(Rect_D);
Make_Bmap.Canvas.Brush.Color := clBlack;
Make_Bmap.Canvas.FillRect(Rect_D);
X1 := Cwidth div 2;
Y1 := 117;
TR1 := -Pi / 2;
DR1 := 2 * Pi / 180;
X2 := Cwidth div 2;
Y2 := 10;
TR2 := -Pi / 2;
DR2 := -3 * Pi / 180;
St := 1;
end;
// 让白点与黄点旋转
1: begin
Canvas.Pixels[X1, Y1] := clBlack;
Canvas.Pixels[X1, Y1 + 1] := clBlack;
Canvas.Pixels[X1 + 1, Y1] := clBlack;
Canvas.Pixels[X1 + 1, Y1 + 1] := clBlack;
QTR := TR1;
TR1 := TR1 + DR1;
X1 := X1 + Round(100 * (Cos(TR1) - Cos(QTR)));
Y1 := Y1 + Round(100 * (Sin(TR1) - Sin(QTR)));
Canvas.Pixels[X1, Y1] := clWhite;
Canvas.Pixels[X1, Y1 + 1] := clWhite;
Canvas.Pixels[X1 + 1, Y1] := clWhite;
Canvas.Pixels[X1 + 1, Y1 + 1] := clWhite;
Canvas.Pixels[X2, Y2] := clBlack;
Canvas.Pixels[X2, Y2 + 1] := clBlack;
Canvas.Pixels[X2 + 1, Y2] := clBlack;
Canvas.Pixels[X2 + 1, Y2 + 1] := clBlack;
QTR := TR2;
TR2 := TR2 + DR2;
X2 := X2 + Round(217 * (Cos(TR2) - Cos(QTR)));
Y2 := Y2 + Round(217 * (Sin(TR2) - Sin(QTR)));
Canvas.Pixels[X2, Y2] := clYellow;
Canvas.Pixels[X2, Y2 + 1] := clYellow;
Canvas.Pixels[X2 + 1, Y2] := clYellow;
Canvas.Pixels[X2 + 1, Y2 + 1] := clYellow;
end;
// 计算黄点至白点的弧度
2: begin
QX := X2;
QY := Y2;
TX := X1 - X2;
TY := Y1 - Y2;
if TX = 0 then
DR2 := Pi / 2
else
DR2 := ArcTan(TY / TX);
if ((TX <= 0) and (TY <= 0)) or ((TX < 0) and (TY > 0)) then
DR2 := DR2 + Pi;
St := 3;
CT := 0;
end;
// 黄点冲向白点
3: begin
Canvas.Pixels[X2, Y2] := clBlue;
Canvas.Pixels[X2, Y2 + 1] := clBlue;
Canvas.Pixels[X2 + 1, Y2] := clBlue;
Canvas.Pixels[X2 + 1, Y2 + 1] := clBlue;
Make_Bmap.Canvas.Pixels[X2, Y2] := clBlue;
Make_Bmap.Canvas.Pixels[X2, Y2 + 1] := clBlue;
Make_Bmap.Canvas.Pixels[X2 + 1, Y2] := clBlue;
Make_Bmap.Canvas.Pixels[X2 + 1, Y2 + 1] := clBlue;
CT := CT + 5;
X2 := QX + Round(CT * Cos(DR2));
Y2 := QY + Round(CT * Sin(DR2));
if (X2 < -1) or (X2 >= Cwidth-2) or
(Y2 < -1) or (Y2 >= Cheight-2) then
begin
St := 2;
X2 := QX;
Y2 := QY;
end;
Canvas.Pixels[X2, Y2] := clYellow;
Canvas.Pixels[X2, Y2 + 1] := clYellow;
Canvas.Pixels[X2 + 1, Y2] := clYellow;
Canvas.Pixels[X2 + 1, Y2 + 1] := clYellow;
Canvas.Pixels[X1, Y1] := clWhite;
Canvas.Pixels[X1, Y1 + 1] := clWhite;
Canvas.Pixels[X1 + 1, Y1] := clWhite;
Canvas.Pixels[X1 + 1, Y1 + 1] := clWhite;
end;
end;
end;
procedure TRei40_31.Button1Click(Sender: TObject);
begin
// 黄点冲向白点(旋转中)或重来(攻击中)的指示
if St = 1 then
St := 2
else if St = 3 then
St := 0;
end;
procedure TRei40_31.ReDraw(Sender: TObject);
begin
// 重绘Form画面
Rei40_31.Canvas.CopyMode := cmSrcCopy;
Rei40_31.Canvas.Draw(0, 0, Make_Bmap);
end;
procedure TRei40_31.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// 将重绘用的点阵图释放掉
Make_Bmap.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -