📄 rei_24.pas
字号:
unit Rei_24;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Menus, StdCtrls;
type
TRei40_24 = class(TForm)
Timer1: TTimer;
MainMenu1: TMainMenu;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private 定义 }
public
{ Public 定义 }
end;
const
Yoko = 37; //显示的横向图案数
Tate = 27; //显示的纵向图案数
DYoko = Yoko * 16; //显示的横向点数
DTate = Tate * 16; //显示的纵向点数
TX = 312; //目标X座标
TY = 224; //目标Y座标
var
Rei40_24: TRei40_24;
// 定义原图用与绘制用的点阵图
Back_Bmap, Make_Bmap: TBitmap;
// 定义各种变量(Byte类型、TRect类型)
AT, Ct, LW: Byte;
Rect_B, Rect_M, Rect_D: TRect;
implementation
{$R *.DFM}
procedure TRei40_24.FormCreate(Sender: TObject);
begin
// 设定Form属性
Rei40_24.Height := 480;
Rei40_24.Width := 640;
Button1.Height := 25;
Button1.Left := 603;
Button1.Top := 16;
Button1.Width := 25;
Button2.Height := 25;
Button2.Left := 603;
Button2.Top := 56;
Button2.Width := 25;
Button3.Height := 25;
Button3.Left := 603;
Button3.Top := 96;
Button3.Width := 25;
Button4.Height := 25;
Button4.Left := 603;
Button4.Top := 136;
Button4.Width := 25;
// 储存原图用点阵图并载入原图
Back_Bmap := TBitmap.Create;
Back_Bmap.Width := DYoko;
Back_Bmap.Height := DTate;
Back_Bmap.LoadFromFile(GetCurrentDir + '\ExData\Bunny.bmp');
// 储存绘制用点阵图
Make_Bmap := TBitmap.Create;
Make_Bmap.Width := DYoko + 32;
Make_Bmap.Height := DTate + 32;
end;
procedure TRei40_24.Timer1Timer(Sender: TObject);
var
// 定义局部变量
Bt: Byte;
begin
// 攻击效果(1)~(4)的处理
case AT of
0: begin
Make_Bmap.Canvas.CopyMode := cmSrcCopy;
Rect_B := Rect(48, 24, 640, 480 - 24);
Rect_M := Rect(16, 16, DYoko + 16, DTate + 16);
Make_Bmap.Canvas.CopyRect(Rect_M, Back_Bmap.Canvas, Rect_B);
end;
1: begin
Make_Bmap.Canvas.Pen.Mode := pmXor;
Make_Bmap.Canvas.Pen.Width := 1;
Make_Bmap.Canvas.Pen.Color := clYellow;
Make_Bmap.Canvas.Brush.Color := clOlive;
Bt := Ct;
Make_Bmap.Canvas.Ellipse
(TX - Bt * 8, TY - 20 - Bt * 8, TX + Bt * 8, TY + 20 + Bt * 8);
if Ct >= 33 then
begin
Bt := Ct - 32;
Make_Bmap.Canvas.Ellipse
(TX - Bt * 8, TY - 20 - Bt * 8, TX + Bt * 8, TY + 20 + Bt * 8);
end;
Ct := Ct + 1;
if Ct > 80 then
AT := 0;
end;
2: begin
Make_Bmap.Canvas.Pen.Mode := pmXor;
Make_Bmap.Canvas.Pen.Width := 2;
Make_Bmap.Canvas.Pen.Color := clWhite;
Make_Bmap.Canvas.Brush.Color := clBlack;
if Ct = 0 then
for Bt := 25 downto 1 do
Make_Bmap.Canvas.Ellipse
(TX - Bt * 8, TY - Bt * 8, TX + Bt * 8, TY + Bt * 8)
else begin
Bt := 26 - Ct;
Make_Bmap.Canvas.Ellipse
(TX - Bt * 8, TY - Bt * 8, TX + Bt * 8, TY + Bt * 8);
end;
Ct := Ct + 1;
if Ct > 26 then
AT := 0;
end;
3: begin
Make_Bmap.Canvas.Pen.Mode := pmXor;
Make_Bmap.Canvas.Pen.Width := 80;
Make_Bmap.Canvas.Pen.Color := clGreen;
Make_Bmap.Canvas.Brush.Color := clLime;
Make_Bmap.Canvas.Ellipse(TX - 150, TY - 170, TX + 150, TY + 170);
Ct := Ct + 1;
if Ct = 20 then
AT := 0;
end;
4: begin
Make_Bmap.Canvas.Pen.Mode := pmXor;
case Ct and 3 of
0, 1: begin
LW := 38;
Make_Bmap.Canvas.Pen.Width := 25;
Make_Bmap.Canvas.Pen.Color := clRed;
Make_Bmap.Canvas.Brush.Color := clFuchsia;
end;
2, 3: begin
LW := 48;
Make_Bmap.Canvas.Pen.Width := 30;
Make_Bmap.Canvas.Pen.Color := clPurple;
Make_Bmap.Canvas.Brush.Color := clWhite;
end;
end;
Make_Bmap.Canvas.Polygon([
Point(TX - 4 * LW, TY), Point(TX - 2 * LW, TY + LW),
Point(TX - 3 * LW, TY + 3 * LW), Point(TX - LW, TY + 2 * LW),
Point(TX, TY + 4 * LW), Point(TX + LW, TY + 2 * LW),
Point(TX + 3 * LW, TY + 3 * LW), Point(TX + 2 * LW, TY + LW),
Point(TX + 4 * LW, TY), Point(TX + 2 * LW, TY - LW),
Point(TX + 3 * LW, TY - 3 * LW), Point(TX + LW, TY - 2 * LW),
Point(TX, TY - 4 * LW), Point(TX - LW, TY - 2 * LW),
Point(TX - 3 * LW, TY - 3 * LW), Point(TX - 2 * LW, TY - LW)]);
Ct := Ct + 1;
if Ct = 23 then
AT := 0;
end;
end;
Rei40_24.Canvas.CopyMode := cmSrcCopy;
Rect_M := Rect(16, 16, DYoko + 16, DTate + 16);
Rect_D := Rect(0, 0, DYoko, DTate);
Rei40_24.Canvas.CopyRect(Rect_D, Make_Bmap.Canvas, Rect_M);
end;
procedure TRei40_24.Button1Click(Sender: TObject);
begin
// 攻击效果(1)的指定
if AT = 0 then
begin
AT := 1;
Ct := 0;
end;
end;
procedure TRei40_24.Button2Click(Sender: TObject);
begin
// 攻击效果(2)的指定
if AT = 0 then
begin
AT := 2;
Ct := 0;
end;
end;
procedure TRei40_24.Button3Click(Sender: TObject);
begin
// 攻击效果(3)的指定
if AT = 0 then
begin
AT := 3;
Ct := 0;
end;
end;
procedure TRei40_24.Button4Click(Sender: TObject);
begin
// 攻击效果(4)的指定
if AT = 0 then
begin
AT := 4;
Ct := 0;
end;
end;
procedure TRei40_24.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// 将原图用与绘制用的点阵图释放掉
Back_Bmap.Free;
Make_Bmap.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -