⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rei_29.pas

📁 Delphi经典游戏程序设计40例.pdf 中国铁道出版社出版 含源码
💻 PAS
字号:
unit Rei_29;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, Menus, StdCtrls;

type
  TRei40_29 = class(TForm)
    Timer1: TTimer;
    MainMenu1: TMainMenu;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    ScrollBar1: TScrollBar;
    ScrollBar2: TScrollBar;
    ScrollBar3: TScrollBar;
    ScrollBar4: TScrollBar;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure ScrollBar1Change(Sender: TObject);
    procedure ScrollBar2Change(Sender: TObject);
    procedure ScrollBar3Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ScrollBar4Change(Sender: TObject);
  private
    { Private 定义 }
  public
    { Public 定义 }
  end;

var
  Rei40_29: TRei40_29;

  Make_Bmap: TBitmap;

  //  定义各种变量类型(Byte、Word、Integer、Extended、Tcolor、TRect)
  St: Byte;
  Cheight, Cwidth, CT: Word;
  WX, WY: Word;
  X, Y, DX, DY, DD, CY: Integer;
  XTR, YTR, QTR, DR: Extended;
  Col: TColor;
  Rect_D: TRect;

implementation

{$R *.DFM}

procedure TRei40_29.FormCreate(Sender: TObject);
begin
  //  设定Form属性
  Rei40_29.Height := 480;
  Rei40_29.Width := 640;
  Cwidth := Rei40_29.ClientHeight;
  Cheight := Rei40_29.ClientHeight;
  Panel1.Width := 152;
  Label1.Height := 23;
  Label1.Left := 10;
  Label1.Top := 12;
  Label1.Width := 63;
  Label2.Height := 23;
  Label2.Left := 10;
  Label2.Top := 82;
  Label2.Width := 63;
  Label3.Height := 23;
  Label3.Left := 10;
  Label3.Top := 152;
  Label3.Width := 63;
  Label4.Height := 23;
  Label4.Left := 10;
  Label4.Top := 222;
  Label4.Width := 63;
  Edit1.Height := 23;
  Edit1.Left := 82;
  Edit1.Top := 10;
  Edit1.Width := 60;
  Edit2.Height := 23;
  Edit2.Left := 82;
  Edit2.Top := 80;
  Edit2.Width := 60;
  Edit3.Height := 23;
  Edit3.Left := 82;
  Edit3.Top := 150;
  Edit3.Width := 60;
  Edit4.Height := 23;
  Edit4.Left := 82;
  Edit4.Top := 220;
  Edit4.Width := 60;
  ScrollBar1.Height := 16;
  ScrollBar1.Left := 10;
  ScrollBar1.Top := 45;
  ScrollBar1.Width := 135;
  ScrollBar2.Height := 16;
  ScrollBar2.Left := 10;
  ScrollBar2.Top := 115;
  ScrollBar2.Width := 135;
  ScrollBar3.Height := 16;
  ScrollBar3.Left := 10;
  ScrollBar3.Top := 185;
  ScrollBar3.Width := 135;
  ScrollBar4.Height := 16;
  ScrollBar4.Left := 10;
  ScrollBar4.Top := 255;
  ScrollBar4.Width := 135;
  Button1.Height := 43;
  Button1.Left := 10;
  Button1.Top := 292;
  Button1.Width := 135;
  //  变量的初始设定
  St := 0;
  DD := 4;
  WX := 140;
  WY := 60;
  CY := 1;
  DR := Pi * DD / 180;
  ScrollBar1.Position := DD;
  ScrollBar2.Position := WX;
  ScrollBar3.Position := WY;
  ScrollBar4.Position := CY;

  Make_Bmap := TBitmap.Create;
  Make_Bmap.Width := Cwidth;
  Make_Bmap.Height := Cheight;
end;

procedure TRei40_29.Timer1Timer(Sender: TObject);
begin
  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);
      Edit1.Text := ' ' + IntToStr(DD);
      Edit2.Text := ' ' + IntToStr(WX * 2);
      Edit3.Text := ' ' + IntToStr(WY * 2);
      Edit4.Text := ' ' + IntToStr(CY);
      if Random(2) = 0 then
      begin
        X := Cwidth div 2 + WX;
        XTR := Pi / 2;
      end
      else begin
        X := Cwidth div 2 - WX;
        XTR := -Pi / 2;
      end;
      Y := 0;
      YTR := -Pi / 2;
      St := 1;
    end;
    //  若St=1则进行座标计算并将点显示出来
    1: begin
      QTR := XTR;
      XTR := XTR + DR;
      DX := Round(WX * (Sin(XTR) - Sin(QTR)));
      QTR := YTR;
      YTR := YTR + DR * 2;
      DY := Round(WY * (Sin(YTR) - Sin(QTR)));
      X := X + DX;
      Y := Y + DY + CY;
      if DX >= 0 then
        Col := clWhite
      else
        Col := clRed;
      Canvas.Pixels[X, Y] := Col;
      Canvas.Pixels[X + 1, Y] := Col;
      if (Y > Cwidth + WY) or (Y < -WY) then
        St := 2;
    end;
  end;
end;

procedure TRei40_29.ScrollBar1Change(Sender: TObject);
begin
  //  变化角(DD)的指定
  DD := ScrollBar1.Position;
  Edit1.Text := ' ' + IntToStr(DD);
  DR := Pi * DD / 180;
end;

procedure TRei40_29.ScrollBar2Change(Sender: TObject);
begin
  //  X振幅(WX×2)的指定
  WX := ScrollBar2.Position;
  Edit2.Text := ' ' + IntToStr(WX * 2);
end;

procedure TRei40_29.ScrollBar3Change(Sender: TObject);
begin
  //  Y振幅(WY×2)的指定
  WY := ScrollBar3.Position;
  Edit3.Text := ' ' + IntToStr(WY * 2);
end;

procedure TRei40_29.ScrollBar4Change(Sender: TObject);
begin
  //  Y加算值(CY)的指定
  CY := ScrollBar4.Position;
  Edit4.Text := ' ' + IntToStr(CY);
end;

procedure TRei40_29.Button1Click(Sender: TObject);
begin
  //  开始的指示
  St := 0;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -