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

📄 umain.pas

📁 很好的俄罗斯方块
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{--------------------------------------------------------------
                      搞笑俄罗斯方块

   历史:
   -- 2001.6.9  v1.9.0 beta
             加入 Splash 窗体
             加入默认档案功能
             调整菜单文字和结构
             加入存档功能
             改进键盘控制,可以任意定义键盘控制键

   -- 2001.5.18  v1.8.3 beta (内部版)
             加入时钟功能
             增加选关级别

   -- 2001.5.15  v1.8.2 正式版
             可以加入任意图片作为方块样式
             修正了分数显示的bug
             修正了读取姓名的bug
             修正了菜单使用的bug ...

   -- 2001.5.13  v1.8.2 beta
             修正 ScanEmptyLine 函数消除不能消行的错误
             加入Shift 键快速下降,不过您要对准哦,按下shift键就不能
             再挽回的哦!

   -- 2001.5.11  v1.8.0
             加入更换方块图象的功能!更加漂亮的方块,最好的游戏感觉
             同时保留原有方块风格,您可以自由选择
             加入保存个人设置的功能,一次设置即可保存您的最佳游戏方案
             修正了高分榜不能刷新的bug

   -- 2001.5.11  v1.7.2
             修正全屏恢复以后不能调整窗口大小的bug
             彻底修正核心部分的一个困绕已久的bug,即多消行
             修正长条组块的旋转式样
             修正方块停止时延迟的bug

   -- 2001.5.9  v1.7.0
             增加智能调整窗口的功能,可以自由更改窗口大小
             可以将窗口最大化
             可以改变窗体颜色,允许载入背景图片
             突发事件隐藏功能更加完善,将程序隐蔽为一个disk图标
             并且可以任意恢复,隐藏时可以悄悄退出而没有任何提示

   -- 2001.5.8  v1.5.7
             调整积分系统,可以跳关积分了
             每满了10000分,升一级

   -- 2001.5.7  v1.5.6
             加入快捷键 F12 迅速最小化
             暂停游戏和音乐,如果要继续游戏请手动恢复

   -- 2001.5.7  v1.5.5
             修正了覆盖背景中的bug使改变背景成为可能
             允许改变背景颜色
             修正方块颜色范围,使太暗的颜色不会出现
             增加重新开始游戏的功能

   -- 2001.5.5  v1.5.3
             修正了核心计算部分InitBlock初始化背景数组的bug
             修正了龙虎榜不能正常显示的bug
             加入清除龙虎榜记录的功能

   -- 2001.5.4  v1.5
             修正键盘不能响应的bug,修正
             播放其他音乐文件时失去声效的bug
             加入龙虎榜功能。

   -- 2001.4.25 v1.0
             修正游戏中的错误,加入全屏
             和音乐功能,提供声效。

   -- 2001.3.20
             原型,提供最简单的俄罗斯方
             块游戏功能,并带有大量的错误。

---------------------------------------------------------------}
{  俄罗斯方块总控单元
   全局变量及重要控件说明

   MainTimer 控制方块下降
   StopTimer 控制方块不能下降时的一段延时,用它来判断方块的下降是否结束
   Score     总分
   Level     当前等级
   CurX,CurY 当前方块坐标
   BlockId   当前的方块是那种形状
   NextId    下一个方块是那种形状
}

unit UMain;

interface

uses
  Windows, Messages, SysUtils, Classes,
  Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Menus, ShellApi,
  ComCtrls,  UBox, USpeed, MPlayer,
  URegMgr, SysTray, jpeg, ExtDlgs, IniFiles;

const
   Version = ' v1.9.0 ';
   BuildDate = '2001-6-9';
   IniFile = 'game.ini';

type
  TfrmGame = class(TForm)
    PanelBack: TPanel;
    LabelMess: TLabel;
    LabelScore: TLabel;
    LabelUsage: TLabel;
    DateLabel1: TLabel;
    DateLabel2: TLabel;
    LabelLevel: TLabel;
    LabelWrkRom1: TLabel;
    LabelWrkRom2: TLabel;
    LabelHomepage: TLabel;
    DuckImage: TImage;
    MemoShow: TMemo;
    MainMenu1: TMainMenu;
    MenuGame: TMenuItem;
    MenuStart: TMenuItem;
    MenuPause: TMenuItem;
    MenuContinue: TMenuItem;
    MenuExit: TMenuItem;
    MenuOption: TMenuItem;
    MenuFull: TMenuItem;
    MenuSpeed: TMenuItem;
    MenuKeyboard: TMenuItem;
    MenuMusic: TMenuItem;
    ItemOpenMusic: TMenuItem;
    MenuAbout: TMenuItem;
    MainTimer: TTimer;
    StopTimer: TTimer;
    OpenDialog: TOpenDialog;
    PaintBox: TPaintBox;
    MenuSound: TMenuItem;
    menuStopMusic: TMenuItem;
    menuPauseMusic: TMenuItem;
    menuPlayMusic: TMenuItem;
    MenuHighScore: TMenuItem;
    MenuHomepage: TMenuItem;
    MenuAboutme: TMenuItem;
    MenuEMail: TMenuItem;
    MenuChgBK: TMenuItem;
    MenuReplay: TMenuItem;
    MenuHide: TMenuItem;
    MenuOpenWinow: TMenuItem;
    MenuOpenDisk: TMenuItem;
    MenuSilentClick: TMenuItem;
    MenuFormColor: TMenuItem;
    MenuBackImage: TMenuItem;
    MenuShowBack: TMenuItem;
    MenuBlockStyle: TMenuItem;
    MenuShowClock: TMenuItem;
    MenuSaveLoad: TMenuItem;
    SaveDataItem: TMenuItem;
    SaveData1: TMenuItem;
    SaveData2: TMenuItem;
    SaveData3: TMenuItem;
    SaveData4: TMenuItem;
    SaveData5: TMenuItem;
    LoadDataItem: TMenuItem;
    LoadData1: TMenuItem;
    LoadData2: TMenuItem;
    LoadData3: TMenuItem;
    LoadData4: TMenuItem;
    LoadData5: TMenuItem;
    N7: TMenuItem;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    ChgBKDlg: TColorDialog;
    SysTray: TSysTray;
    SysPopMenu: TPopupMenu;
    Sound: TMediaPlayer;
    Audio: TMediaPlayer;
    BackImage: TImage;
    OpenPicDlg: TOpenPictureDialog;
    ImgBlock: TImage;
    SaveDefaultItem: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    LoadDefaultItem: TMenuItem;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure MenuExitClick(Sender: TObject);
    procedure MainTimerTimer(Sender: TObject);
    procedure StopTimerTimer(Sender: TObject);
    procedure MenuStartClick(Sender: TObject);
    procedure MenuPauseClick(Sender: TObject);
    procedure MenuContinueClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure MenuSpeedClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure MenuKeyboardClick(Sender: TObject);
    procedure LabelHomepageClick(Sender: TObject);
    procedure ItemOpenMusicClick(Sender: TObject);
    procedure AudioNotify(Sender: TObject);
    procedure MenuFullClick(Sender: TObject);
    procedure PaintBoxPaint(Sender: TObject);
    procedure MenuSoundClick(Sender: TObject);
    procedure MenuPlayMusicClick(Sender: TObject);
    procedure MenuStopMusicClick(Sender: TObject);
    procedure MenuPauseMusicClick(Sender: TObject);
    procedure MenuHighScoreClick(Sender: TObject);
    procedure MenuAboutmeClick(Sender: TObject);
    procedure MenuHomepageClick(Sender: TObject);
    procedure MenuEMailClick(Sender: TObject);
    procedure MenuChgBKClick(Sender: TObject);
    procedure MenuReplayClick(Sender: TObject);
    procedure MenuHideClick(Sender: TObject);
    procedure MenuOpenWinowClick(Sender: TObject);
    procedure MenuSilentClickClick(Sender: TObject);
    procedure MenuOpenDiskClick(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure MenuFormColorClick(Sender: TObject);
    procedure MenuBackImageClick(Sender: TObject);
    procedure MenuShowBackClick(Sender: TObject);
    procedure MenuBlockStyleClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure MenuShowClockClick(Sender: TObject);
    procedure SaveData1Click(Sender: TObject);
    procedure LoadData1Click(Sender: TObject);
    procedure SaveData2Click(Sender: TObject);
    procedure SaveData3Click(Sender: TObject);
    procedure SaveData4Click(Sender: TObject);
    procedure SaveData5Click(Sender: TObject);
    procedure LoadData2Click(Sender: TObject);
    procedure LoadData3Click(Sender: TObject);
    procedure LoadData4Click(Sender: TObject);
    procedure LoadData5Click(Sender: TObject);
    procedure MenuSaveLoadClick(Sender: TObject);
    procedure SaveDefaultItemClick(Sender: TObject);
    procedure LoadDefaultItemClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure PlaySound(Filename: String);
    function RandomColor:TColor;
    procedure LoadSetting;
    procedure SaveSetting;
    procedure SetWindowColor(Col: TColor);
    procedure SetFullScreen(Value: Boolean);
    function  GetName(var Name:string):Boolean;
    procedure SaveDataTo(FileName: String);
    procedure LoadDataFrom(FileName: String);
  end;


var
  frmGame: TfrmGame;
  ChangingFilename : Boolean;//表示正在更换音乐文件
  StopClick : Boolean;
  SilentClose : Boolean;     //是否出现退出提示
  UseImgBlock : Boolean;     //是否使用图片方块
  GamePath : String;
  BackImagePath: String;     //背景图片的路径
  WindowColor: TColor;       //窗口背景颜色
  DefaultMusic: String;      //默认的背景音乐

implementation

uses
   UKeyboard, UAbout, URecord, UBlockStyle,
   UGetName, UClockFrm, USelKeyForm, USaveData,USplash;


{$R *.DFM}

function TfrmGame.GetName(var Name:string):Boolean;
var
   GetNameFrm : TGetNameForm;
begin
   GetNameFrm := TGetNameForm.Create(Owner);
   Result := (GetNameFrm.ShowModal = mrOK);
   if(Result)then
      Name := GetNamefrm.NameEdit.Text;
   GetNameFrm.Free;
end;

procedure TfrmGame.SetFullScreen(Value: Boolean);
begin
   if(Value)then
   begin
      frmGame.BorderStyle := bsNone;
      frmGame.WindowState := wsMaximized;
      PanelBack.Top := Round((Screen.Height - PanelBack.Height)/2);
      PanelBack.Left:= Round((Screen.Width - PanelBack.Width)/2);
   end else
   begin
      frmGame.Width := 357;
      frmGame.Height := 471;
      PanelBack.Top := 0;
      PanelBack.Left := 0;
      frmGame.BorderStyle := bsSizeable;
      frmGame.WindowState := wsNormal;
      frmGame.Position := poScreenCenter;
   end;
end;

procedure TfrmGame.SetWindowColor(Col: TColor);
begin
   frmGame.Color := Col;
   LabelMess.Color := Col;
   LabelMess.Font.Color := clYellow xor Col;
   LabelUsage.Color := Col;
   LabelUsage.Font.Color := clYellow xor Col;
   LabelScore.Color := Col;
   LabelScore.Font.Color := clYellow xor Col;
   PanelBack.Color := Col;
end;

procedure TfrmGame.LoadSetting;
var
   Ini: TIniFile;
   Path: String;
begin
   Path := ExtractFilePath(Application.ExeName);
   Ini := TIniFile.Create(Path+IniFile);

   DefaultMusic := Ini.ReadString('Setting','DefaultMusic','game.mid');
   if(FileExists(DefaultMusic))then
   begin
      Audio.FileName := DefaultMusic;
      Audio.Open;
      Audio.Play;
   end
   else
   begin
      MessageBox(Handle,'没有缺省音乐文件,想消除此提示请在运行程序后指定一个背景音乐文件!','提示',64);
      MenuStopMusic.Enabled := false;
      MenuPlayMusic.Enabled := false;
      MenuPauseMusic.Enabled := false;
   end;

   BackImagePath := Ini.ReadString('Setting','BackImage','');
   if(FileExists(BackImagePath))then
      BackImage.Picture.LoadFromFile(BackImagePath);

   MenuFull.Checked := Ini.ReadBool('Setting','FullScreen',false);
   MenuSound.Checked := Ini.ReadBool('Setting','SoundOpen',true);
   MenuShowBack.Checked := Ini.ReadBool('Setting','ShowBkImage',true);
   SetFullScreen(MenuFull.Checked);
   BackImage.Visible := MenuShowBack.Checked;

   BkColor := Ini.ReadInteger('Setting','GameBkColor',4210688);

⌨️ 快捷键说明

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