📄 umain.pas
字号:
{--------------------------------------------------------------
搞笑俄罗斯方块
历史:
-- 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 + -