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

📄 introscn.pas

📁 一个delphi写的游戏引擎
💻 PAS
字号:
unit IntroScn;
// no problems
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, StdCtrls, Controls, Forms, Dialogs,
  extctrls, DXDraws, DXClass, FState;

type
   TLoginState = (lsLogin, lsNewid, lsNewidRetry, lsChgpw, lsCloseAll);
   TSceneType = (stIntro, stLogin, stSelectCountry, stSelectChr, stNewChr, stLoading,
                   stLoginNotice, stPlayGame);
   TScene = class
   private
   public
      constructor Create (scenetype: TSceneType);
      procedure Initialize; dynamic;
      procedure Finalize; dynamic;
      procedure OpenScene; dynamic;
      procedure CloseScene; dynamic;
      procedure OpeningScene; dynamic; //这个过程作用何在?
      procedure KeyPress (var Key: Char); dynamic;
      procedure KeyDown (var Key: Word; Shift: TShiftState); dynamic;
      procedure MouseMove (Shift: TShiftState; X, Y: Integer); dynamic;
      procedure MouseDown (Button: TMouseButton; Shift: TShiftState; X, Y: Integer); dynamic;
      procedure PlayScene (MSurface: TDirectDrawSurface); dynamic;
   end;

   TIntroScene = class (TScene)
   private
   public
      constructor Create;
      destructor Destroy; override;
      procedure OpenScene; override;
      procedure CloseScene; override;
      procedure PlayScene (MSurface: TDirectDrawSurface); override;
   end;

   TLoginScene = class (TScene)
   private
      EdId: TEdit;
      EdPasswd: TEdit;
      procedure EdLoginIdKeyPress (Sender: TObject; var Key: Char);
      procedure EdLoginPasswdKeyPress (Sender: TObject; var Key: Char);
 
   public
      LoginId, LoginPasswd: string;
      constructor Create;
      destructor Destroy; override;
      procedure OpenScene; override;
      procedure CloseScene; override;
      procedure PlayScene (MSurface: TDirectDrawSurface); override;
       procedure ChangeLoginState (state: TLoginState);
       
      procedure NewClick;       //新用户按钮被点击
      procedure OkClick;        //提交按钮被点击
//     procedure ChgPwClick;      //修改密码按钮被点击,,那么关闭场景x按钮呢

   end;





implementation

uses
   ClMain;


constructor TScene.Create (scenetype: TSceneType);
begin
  //dfg
end;

procedure TScene.Initialize;
begin
end;

procedure TScene.Finalize;
begin
end;

procedure TScene.OpenScene;
begin
//fg
end;

procedure TScene.CloseScene;
begin
//fdg
end;

procedure TScene.OpeningScene;
begin
//kh
end;

procedure TScene.KeyPress (var Key: Char);
begin
end;

procedure TScene.KeyDown (var Key: Word; Shift: TShiftState);
begin
end;

procedure TScene.MouseMove (Shift: TShiftState; X, Y: Integer);
begin
end;

procedure TScene.MouseDown (Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
end;

procedure TScene.PlayScene (MSurface: TDirectDrawSurface);
begin
//uo
end;


{------------------- TIntroScene ----------------------}


constructor TIntroScene.Create;
begin
   inherited Create (stIntro);
end;

destructor TIntroScene.Destroy;
begin
   inherited Destroy;
end;

procedure TIntroScene.OpenScene;
begin
end;

procedure TIntroScene.CloseScene;
begin
end;

procedure TIntroScene.PlayScene (MSurface: TDirectDrawSurface);
begin
end;


{--------------------- Login ----------------------}


constructor TLoginScene.Create;
var
   nx, ny: integer;
begin
    inherited Create (stLogin);
   //登陆ID输入框
   EdId := TEdit.Create (FrmMain.Owner);
   with EdId do begin
      Parent := FrmMain;  Color  := clBlack; Font.Color := clWhite; Font.Size := 10; MaxLength := 10;
      BorderStyle := bsNone;  OnKeyPress := EdLoginIdKeyPress;  Visible := FALSE;
      Tag := 10;
   end;
   //密码输入框
   EdPasswd := TEdit.Create (FrmMain.Owner);
   with EdPasswd do begin
      Parent := FrmMain; Color  := clBlack; Font.Size := 10; MaxLength := 10; Font.Color := clWhite;
      BorderStyle := bsNone; PasswordChar := '*';
      OnKeyPress := EdLoginPasswdKeyPress; Visible := FALSE;
      Tag := 10;
   end;
end;

destructor TLoginScene.Destroy;
begin
   inherited Destroy;
end;

procedure TLoginScene.OpenScene;
var
   i: integer;
   d: TDirectDrawSurface;
begin

   LoginId := '';
   LoginPasswd := '';
   with EdId do begin
      Left   := 350;
      Top    := 259;
      Height := 16;
      Width  := 137;
      Visible := FALSE;
   end;
   with EdPasswd do begin
      Left   := 350;
      Top    := 291;
      Height := 16;
      Width  := 137;
      Visible := FALSE;
   end;

   FrmDlg.DLogin.Visible := TRUE;


end;

procedure TLoginScene.CloseScene;
begin
   EdId.Visible := FALSE;
   EdPasswd.Visible := FALSE;
   FrmDlg.DLogin.Visible := FALSE;
  end;

procedure TLoginScene.EdLoginIdKeyPress (Sender: TObject; var Key: Char);
begin
   if Key = #13 then begin
      Key := #0;
      LoginId := LowerCase(EdId.Text);
      if LoginId <> '' then begin
         EdPasswd.SetFocus;
      end;
   end;
end;

procedure TLoginScene.ChangeLoginState (state: TLoginState);
var
   i, focus: integer;
   c: TControl;
begin
   focus := -1;
   case state of
      lsLogin: focus := 10;
      lsNewIdRetry, lsNewId: focus := 11;
      lsChgpw: focus := 12;
      lsCloseAll: focus := -1;
   end;
   with FrmMain do begin  //login
      for i:=0 to ControlCount-1 do begin
         c := Controls[i];
         if c is TEdit then begin
            if c.Tag in [10..12] then begin
               if c.Tag = focus then begin
                  c.Visible := TRUE;
                  TEdit(c).Text := '';
               end else begin
                  c.Visible := FALSE;
                  TEdit(c).Text := '';
               end;
            end;
         end;
      end;


      case state of
         lsLogin:
            begin
             //  FrmDlg.DNewAccount.Visible := FALSE;
             //  FrmDlg.DChgPw.Visible := FALSE;
               FrmDlg.DLogin.Visible := TRUE;
               if EdId.Visible then EdId.SetFocus;
            end;
         lsNewIdRetry,lsNewId:
            begin
            //   if BoUpdateAccountMode then
            //      EdNewId.Enabled := FALSE
           //    else
            //      EdNewId.Enabled := TRUE;
           //    FrmDlg.DNewAccount.Visible := TRUE;
          //     FrmDlg.DChgPw.Visible := FALSE;
               FrmDlg.DLogin.Visible := false;
           //    if EdNewId.Visible and EdNewId.Enabled then begin
             //     EdNewId.SetFocus;
            //   end else begin
           //       if EdConfirm.Visible and EdConfirm.Enabled then
               //      EdConfirm.SetFocus;
               end;

         lsChgpw:
           begin
        //       FrmDlg.DNewAccount.Visible := FALSE;
         //      FrmDlg.DChgPw.Visible := TRUE;
              FrmDlg.DLogin.Visible := false;
          //     if EdChgId.Visible then EdChgId.SetFocus;
            end;
         lsCloseAll:
            begin
             //  FrmDlg.DNewAccount.Visible := FALSE;
             //  FrmDlg.DChgPw.Visible := FALSE;
               FrmDlg.DLogin.Visible := false;   
            end;
      end;
   end;
end;

procedure TLoginScene.EdLoginPasswdKeyPress (Sender: TObject; var Key: Char);
begin
   if (Key = '~') or (Key = '''') then Key := '_';
   if Key = #13 then begin
      Key := #0;
      LoginId := LowerCase(EdId.Text);
      LoginPasswd := EdPasswd.Text;
      if (LoginId <> '') and (LoginPasswd <> '') then begin
         //拌沥栏肺 肺弊牢 茄促.
      //   FrmMain.SendLogin (LoginId, LoginPasswd);
         EdId.Text := '';
         EdPasswd.Text := '';
         EdId.Visible := FALSE;
         EdPasswd.Visible := FALSE;
      end else
         if (EdId.Visible) and (EdId.Text = '') then EdId.SetFocus;
   end;
end;

procedure TLoginScene.NewClick;
begin
//这里原程序的作用仅仅在于:转换场景
end;




procedure TLoginScene.OkClick;
var
   key: char;
begin
   key := #13;
   EdLoginPasswdKeyPress (self, key);
end;



procedure TLoginScene.PlayScene (MSurface: TDirectDrawSurface);
var
   d: TDirectDrawSurface;
begin

      EdId.Visible := TRUE;
      EdPasswd.Visible := TRUE;
   //   EdId.SetFocus;


   if d <> nil then begin
      MSurface.Draw (0, 0, d.ClientRect, d, FALSE);
   end;

end;



end.

⌨️ 快捷键说明

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