用DELPHI制作掃雷游戲的排行榜部分怎么做呀?求代碼求解釋,急急。。。求高手加我QQ:765190961,急需。。。。
uj5u.com熱心網友回復:
求高手,加我QQ:765190961,急需。。。uj5u.com熱心網友回復:
網路版的還是單機的?單機直接保存到INI檔案或者自己寫注冊表保存啊,讀成stringlist,sort一下不就行了?uj5u.com熱心網友回復:
單機版的,上面的高手我現在才處于菜鳥級別,能不能給個具體的代碼呀?謝謝了。。。uj5u.com熱心網友回復:
TStringList 常用操作http://www.cnblogs.com/del/archive/2007/12/10/990040.html
直接用tstringlist 讀存檔案就可以了
uj5u.com熱心網友回復:
你有QQ嗎?我能加你Q不,我的765190961,有不懂得想問你,謝謝uj5u.com熱心網友回復:
樓主 期待你的作品哦uj5u.com熱心網友回復:
新建工程、雙擊表單后,用下列代碼覆寫你的unit1:unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
ExtCtrls, Menus, StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure FormShow(Sender: TObject);
procedure WriteBatFile;
procedure reClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses jpeg,IdHTTP;
{$R *.dfm}
type
TRating=array[0..7] of ansichar;
type
TxRecord=Record
bt:array[0..7] of ansichar;//僅為識別記錄是否存在和開始位置而設
Rating:array[0..2]of TRating;//用來存放3個等級的成績
end;
var MainMenu:TMainMenu;//主選單
xRecord:TxRecord;
sm:TMemoryStream;//用來存放成績
Image:TImage;
procedure TForm1.FormCreate(Sender: TObject);
const datasize=32; //記錄的長度
var smtmp:TMemoryStream;
pms:TMemoryStream;
pic:TJPEGImage;
IdHTTP:TIdHTTP;
menuitem,re:TMenuItem;
x:integer;
begin
OnCloseQuery:=FormCloseQuery;
Form1.Caption:='排行榜';
OnShow:=FormShow;
IdHTTP:=TIdHTTP.Create(self);
try
pms:=TMemoryStream.Create;
try
IdHTTP.Get('http://img.my.csdn.net/uploads/201206/27/1340806448_1038.jpg',pms);//加載界面的效果圖
pms.Position:=0;
pic:=TJPEGImage.Create;
try
pic.LoadFromStream(pms);
Image:=TImage.Create(self);
Image.Parent:=Form1;
Image.AutoSize:=true;
Image.Picture.Assign(pic);
finally
pic.Free;
end;
finally
FreeAndNil(pms);
end;
finally
FreeAndNil(IdHTTP);
end;
AutoSize:=true;
MainMenu:=TMainMenu.Create(self);
menuitem:=Tmenuitem.Create(MainMenu);
menuitem.Caption:='游戲';
MainMenu.Items.Add(menuitem);
re:=Tmenuitem.Create(MainMenu);
re.Caption:='掃雷英雄榜';
menuitem.Add(re);
re.OnClick:=reClick;
//以上僅為動態生成界面上的東西,不是必須的,亦非必須用陳述句實作。
smtmp:=TMemoryStream.Create;
try
smtmp.LoadFromFile(ParamStr(0));//將當前的exe檔案加載到流
smtmp.Seek(-datasize,soFromEnd);//移動流的指標到記錄的開始位置
smtmp.Read(xRecord,datasize); //將該位置開始的資料加載到xRecord記錄
if ansistring(xRecord.bt)='Ini_Data' then//程式末尾有記錄附加
x:=datasize
else begin //第一次運行時,程式末尾無記錄附加,需初始化
x:=0;
xRecord.bt:='Ini_Data';
xRecord.Rating[0]:='0';
xRecord.Rating[1]:='0';
xRecord.Rating[2]:='0';
end;
sm:=TMemoryStream.Create; //裝載exe不含記錄部分
try
sm.SetSize(smtmp.Size-x);
smtmp.Seek(0,soFromBeginning);
CopyMemory(sm.Memory,smtmp.Memory,smtmp.Size-x);
except
FreeAndNil(sm);
end;
finally
FreeAndNil(smtmp);
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
if sm=nil then close;
end;
procedure TForm1.WriteBatFile;
var f: TextFile;
win_path,dos_path,tmp_path,exefilename,tmpfilename:string;
fstm: TMemoryStream;
begin
if sm<>nil then begin
exefilename:=ExtractFileName(Application.ExeName);
win_path:=ExtractFilePath(Application.ExeName);//獲取當前程式的WINDOWS路徑
SetLength(tmp_path,MAX_PATH);
GetShortPathName(PChar(win_path),PChar(tmp_path),MAX_PATH);
dos_path:=StrPas(PChar(tmp_path));//獲取當前程式的 DOS 路徑
tmpfilename:=dos_path+'Protmp.exe';
AssignFile(F,dos_path+'Delself.bat'); //在當前位置建立 Delself.bat 檔案
Rewrite(F);
sm.SaveToFile(tmpfilename);//將exe部分存為臨時檔案Protmp.exe
fstm:=TMemoryStream.Create;
try
fstm.Write(xRecord,sizeof(xRecord));//將英雄榜存到流
fstm.SaveToFile(win_path+'Protmp.dat');//存為臨時檔案Protmp.dat
Writeln(F, '@ECHO OFF');
//將Protmp.dat附加到Protmp.exe尾部:
Writeln(F, 'copy '+tmpfilename+' /b + '+dos_path+'Protmp.dat /b '+tmpfilename);
Writeln(F, ':go'); //無條件轉移標記
Writeln(F, 'del '+dos_path+'Protmp.dat > nul');//洗掉Protmp.dat
Writeln(F, 'del '+dos_path+exefilename+'>nul');//洗掉正在運行的exe
Writeln(F, 'if exist "'+dos_path+exefilename+'" goto go');//exe程式未結束將無法洗掉,則回圈,直到能洗掉exe檔案
Writeln(F, 'ren '+tmpfilename+' '+exefilename);//把臨時檔案名字Protmp.exe改為原來運行的名字
Writeln(F, 'del %0');//洗掉bat檔案本身
CloseFile(f);//對Delself.bat檔案作覆寫性保存
winexec(PAnsiChar(Ansistring(win_path+'Delself.bat')), SW_SHOWNORMAL);//執行Delself.bat(winexec是不等回傳就往下執行的)
finally
FreeAndNil(fstm);
end;
end;
end;
procedure TForm1.reClick(Sender: TObject);
const cp:array[0..2]of string=('初級=','中級=','高級=');
var Form:TForm;
edt:array[0..2]of TEdit;
lb:array[0..2]of TLabel;
i:integer;
Okbtn,Clbtn:TButton;
begin
Form:=TForm.Create(self);
Form.Caption:='英雄榜';
Okbtn:=TButton.Create(Form);
with Okbtn do begin
Parent:=Form;
Left:=70;
Top:=150;
Caption:='確定';
ModalResult:=mrOk;
end;
Clbtn:=TButton.Create(Form);
with Clbtn do begin
Parent:=Form;
Left:=160;
Top:=150;
Caption:='取消';
ModalResult:=mrCancel;
end;
for i:=0 to 2 do begin
edt[i]:=TEdit.Create(Form);
with edt[i] do begin
Parent:=Form;
Top:=40+i*32;
Left:=120;
Text:=string(xRecord.Rating[i]);
end;
lb[i]:=TLabel.Create(Form);
with lb[i] do begin
Parent:=Form;
Top:=40+i*32;
Left:=80;
Caption:=cp[i];
end;
end;
if form.ShowModal=mrOk then begin
StrCopy(@xRecord.Rating[0],PAnsiChar(ansistring(edt[0].Text)));
StrCopy(@xRecord.Rating[1],PAnsiChar(ansistring(edt[1].Text)));
StrCopy(@xRecord.Rating[2],PAnsiChar(ansistring(edt[2].Text)));
end;
Form.Free;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
WriteBatFile;//結束前,生成一個改變exe自己的bat檔案并運行
if sm<>nil then FreeAndNil(sm);
end;
end.
uj5u.com熱心網友回復:
以上代碼在 windows_xp + delphi7 及 delphi2010 編譯、運行通過。uj5u.com熱心網友回復:
我來也
uj5u.com熱心網友回復:
讀ini檔案 自己網上搜搜肯定行的uj5u.com熱心網友回復:
7樓佬哥什么神級方法!轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/140887.html
上一篇:Python-使用tkinter實作的Django服務行程管理工具
下一篇:Python基礎-18目錄與檔案
