📄 rei_14.pas
字号:
nX := X;
nY := Y;
end;
if m < Tate then
begin
Make_Bmap.Canvas.CopyMode := cmSrcPaint;
for n := 0 to (Yoko - 1) do
begin
X := (X + 36) mod Yoko;
Y := (Y + 26) mod Tate;
Rect_S := Rect(X * 16, Y * 16, X * 16 + 16, Y * 16 + 16);
Rect_M := Rect(X * 16 + 16, Y * 16 + 16, X * 16 + 32, Y * 16 + 32);
if Backs = 0 then
Make_Bmap.Canvas.CopyRect(Rect_M, Back0_Bmap.Canvas, Rect_S)
else
Make_Bmap.Canvas.CopyRect(Rect_M, Back1_Bmap.Canvas, Rect_S);
Make_Bmap.Canvas.CopyRect(Rect_M, Make_Bmap.Canvas, Rect_M);
end;
end;
m := m + 1;
if m = Tate + 1 then
begin
Chan := 0;
Backs := Backs xor 1;
end;
Rect_M := Rect(16, 16, DYoko + 16, DTate + 16);
Rect_D := Rect(0, 0, DYoko, DTate);
Rei40_14.Canvas.CopyRect(Rect_D, Make_Bmap.Canvas, Rect_M);
end;
// 交换显示(3)的处理
13: begin
if m < 16 then
begin
// 以黑色去除显示中图案的交换部分(点)
Bpat_Bmap.Canvas.CopyMode := cmSrcCopy;
Rect_L := Rect(m * 8 + 32, 64, m * 8 + 40, 72);
Rect_D := Rect(0, 0, 8, 8);
Bpat_Bmap.Canvas.CopyRect(Rect_D, Load_Bmap.Canvas, Rect_L);
Rect_D := Rect(0, 0, DYoko, DTate);
if Backs = 1 then
begin
Back0_Bmap.Canvas.Brush.Bitmap := Bpat_Bmap;
Back0_Bmap.Canvas.CopyMode := cmMergeCopy;
Back0_Bmap.Canvas.CopyRect(Rect_D, Back0_Bmap.Canvas, Rect_D);
Back0_Bmap.Canvas.Brush.Bitmap := Nil;
end
else begin
Back1_Bmap.Canvas.Brush.Bitmap := Bpat_Bmap;
Back1_Bmap.Canvas.CopyMode := cmMergeCopy;
Back1_Bmap.Canvas.CopyRect(Rect_D, Back1_Bmap.Canvas, Rect_D);
Back1_Bmap.Canvas.Brush.Bitmap := Nil;
end;
// 在Make_Bmap上制作应该交换的点并将其与显示中的图案合成
Bpat_Bmap.Canvas.CopyMode := cmNotSrcCopy;
Rect_L := Rect(m * 8 + 32, 64, m * 8 + 40, 72);
Rect_D := Rect(0, 0, 8, 8);
Bpat_Bmap.Canvas.CopyRect(Rect_D, Load_Bmap.Canvas, Rect_L);
Make_Bmap.Canvas.Brush.Bitmap := Bpat_Bmap;
Rect_B := Rect(0, 0, DYoko, DTate);
Rect_M := Rect(16, 16, Dyoko + 16, Dtate + 16);
Make_Bmap.Canvas.CopyMode := cmMergeCopy;
if Backs = 0 then
begin
Make_Bmap.Canvas.CopyRect(Rect_M, Back0_Bmap.Canvas, Rect_B);
Make_Bmap.Canvas.CopyMode := cmSrcPaint;
Make_Bmap.Canvas.CopyRect(Rect_M, Back1_Bmap.Canvas, Rect_B);
end
else begin
Make_Bmap.Canvas.CopyRect(Rect_M, Back1_Bmap.Canvas, Rect_B);
Make_Bmap.Canvas.CopyMode := cmSrcPaint;
Make_Bmap.Canvas.CopyRect(Rect_M, Back0_Bmap.Canvas, Rect_B);
end;
Make_Bmap.Canvas.Brush.Bitmap := Nil;
// 将合成过的Make_Bmap显示在Form上
Rei40_14.Canvas.CopyRect(Rect_B, Make_Bmap.Canvas, Rect_M);
end
else begin
Chan := 0;
Backs := Backs xor 1;
if Backs = 0 then
DiBack0
else
DiBack1;
end;
m := m + 1;
end;
// 交换显示(4)的处理
14: begin
Make_Bmap.Canvas.CopyMode := cmSrcCopy;
for n := 0 to (Tate * 4 - 1) do
begin
Rect_S := Rect(m * 8 + 16, n * 4 + 16, DYoko + 8, n * 4 + 18);
Rect_D := Rect(m * 8 + 24, n * 4 + 16, DYoko + 16, n * 4 + 18);
Make_Bmap.Canvas.CopyRect(Rect_D, Make_Bmap.Canvas, Rect_S);
DiBox(m * 8, n * 4, m * 8 + 8, n * 4 + 2);
Rect_S := Rect(8 + 16, n * 4 + 18, DYoko - m * 8 + 16, n * 4 + 20);
Rect_D := Rect(16, n * 4 + 18, DYoko - m * 8 + 8, n * 4 + 20);
Make_Bmap.Canvas.CopyRect(Rect_D, Make_Bmap.Canvas, Rect_S);
DiBox(DYoko - m * 8 - 8, n * 4 + 2, DYoko - m * 8, n * 4 + 4);
end;
m := m + 1;
if m = Yoko * 2 then
begin
Chan := 0;
Backs := Backs xor 1;
end;
Rect_M := Rect(16, 16, DYoko + 16, DTate + 16);
Rect_D := Rect(0, 0, DYoko, DTate);
Rei40_14.Canvas.CopyRect(Rect_D, Make_Bmap.Canvas, Rect_M);
end;
// 执行後的画面显示
255: begin
FmDip;
Backs := Backs xor 1;
end;
end;
end;
procedure TRei40_14.DiBack0;
var
// 定义局部变量
X, Y: Byte;
begin
// 将原有图案(1)复制至Back0_Bmap上
for Y := 0 to (Tate - 1) do
for X := 0 to (Yoko - 1) do
PatDi(7, X * 16, Y * 16, Back0_Bmap);
ChrDi(SpSiz[0], SpSiz[1], SpPon[0], 282, 72, Back0_Bmap);
ChrDi(SpSiz[2], SpSiz[3], SpPon[1], 50, 80, Back0_Bmap);
end;
procedure TRei40_14.DiBack1;
var
// 定义局部变量
X, Y: Byte;
begin
// 将原有图案(2)复制至Back1_Bmap上
for Y := 0 to (Tate - 1) do
for X := 0 to (Yoko - 1) do
PatDi(15, X * 16, Y * 16, Back1_Bmap);
ChrDi(SpSiz[4], SpSiz[5], SpPon[2], 282, 56, Back1_Bmap);
ChrDi(SpSiz[6], SpSiz[7], SpPon[3], 50, 48, Back1_Bmap);
end;
procedure TRei40_14.FmDip;
begin
// 描绘至绘制点阵图上并显示在画面上
Chan := 0;
Make_Bmap.Canvas.CopyMode := cmSrcCopy;
Rect_M := Rect(16, 16, DYoko + 16, DTate + 16);
Rect_S := Rect(0, 0, DYoko, DTate);
if Backs = 0 then
begin
Make_Bmap.Canvas.CopyRect(Rect_M, Back0_Bmap.Canvas, Rect_S);
Rei40_14.Canvas.Draw(0, 0, Back0_Bmap);
end
else begin
Make_Bmap.Canvas.CopyRect(Rect_M, Back1_Bmap.Canvas, Rect_S);
Rei40_14.Canvas.Draw(0, 0, Back1_Bmap);
end;
end;
procedure TRei40_14.DiBox(X1, Y1, X2, Y2: Word);
begin
// 将非显示的原有图案之一部分描绘至绘制点阵图
Make_Bmap.Canvas.CopyMode := cmSrcCopy;
Rect_S := Rect(X1, Y1, X2, Y2);
Rect_M := Rect(X1 + 16, Y1 + 16, X2 + 16, Y2 + 16);
if Backs = 0 then
Make_Bmap.Canvas.CopyRect(Rect_M, Back0_Bmap.Canvas, Rect_S)
else
Make_Bmap.Canvas.CopyRect(Rect_M, Back1_Bmap.Canvas, Rect_S)
end;
procedure TRei40_14.Button1Click(Sender: TObject);
begin
// 交换显示(1)的指定
if Chan = 0 then
Chan := 1;
end;
procedure TRei40_14.Button2Click(Sender: TObject);
begin
// 交换显示(2)的指定
if Chan = 0 then
Chan := 2;
end;
procedure TRei40_14.Button3Click(Sender: TObject);
begin
// 交换显示(3)的指定
if Chan = 0 then
Chan := 3;
end;
procedure TRei40_14.Button4Click(Sender: TObject);
begin
// 交换显示(4)的指定
if Chan = 0 then
Chan := 4;
end;
procedure TRei40_14.Button5Click(Sender: TObject);
begin
// 图案的交换显示
if Chan = 0 then
begin
FmDip;
Backs := Backs xor 1;
end;
end;
procedure TRei40_14.ChrDi(Xsiz, Ysiz: Byte; Dpon: Word; X1, Y1: Integer;
Bmap: TBitmap);
var
// 定义局部变量
CDX, CDY: Byte;
begin
// 将指定的角色绘制至指定点阵图上(重叠显示适用)
for CDY := 0 to (Ysiz - 1) do
for CDX := 0 to (Xsiz - 1) do
begin
if (X1 + CDX * 16 >= 0) and (X1 + CDX * 16 <= DYoko + 16) and
(Y1 + CDY * 16 >= 0) and (Y1 + CDY * 16 <= DTate + 16) then
PatDi(SpDat[Dpon], X1 + CDX * 16, Y1 + CDY * 16, Bmap);
Dpon := Dpon + 1;
end;
end;
procedure TRei40_14.PatDi(Pnum: Byte; X1, Y1: Integer; Bmap: TBitmap);
begin
// 将指定的图案绘制至指定点阵图的指定位置上(重叠显示适用)
PX := (Pnum and $F) * 16;
PY := Pnum and $F0;
Rect_L := Rect(PX, PY, PX + 16, PY + 16);
Rect_D := Rect(X1, Y1, X1 + 16, Y1 + 16);
if Pnum <> 0 then
if Pnum >= PtFull then
begin
Bmap.Canvas.CopyMode := cmSrcPaint;
Bmap.Canvas.CopyRect(Rect_D, Xpat_Bmap.Canvas, Rect_L);
Bmap.Canvas.CopyMode := cmSrcAnd;
Bmap.Canvas.CopyRect(Rect_D, Load_Bmap.Canvas, Rect_L);
end
else begin
Bmap.Canvas.CopyMode := cmSrcCopy;
Bmap.Canvas.CopyRect(Rect_D, Load_Bmap.Canvas, Rect_L);
end;
end;
procedure TRei40_14.ReDraw(Sender: TObject);
begin
// Form画面的重绘
Rect_M := Rect(16, 16, DYoko + 16, DTate + 16);
Rect_D := Rect(0, 0, DYoko, DTate);
Rei40_14.Canvas.CopyRect(Rect_D, Make_Bmap.Canvas, Rect_M);
end;
procedure TRei40_14.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// 将载入用、去除用、粉刷用、显示画面用、绘制用的点阵图释放掉
Load_Bmap.Free;
Xpat_Bmap.Free;
Bpat_Bmap.Free;
Back0_Bmap.Free;
Back1_Bmap.Free;
Make_Bmap.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -