En top 10 liste som gemmes i programmet?????

Tags:    delphi

Hej jeg har et lille problem jeg er nemmelig igang med et spil hvorman kan komme på en top 10 liste, men jeg ved ikke hvordan man kan lave en top 10 sådan at når man kommer på den liste så gemmes ens score i selve programmet sådan at hvis man flytter programmet til en ande computer så følger scoren med hvordan får jeg det til det?
Håber der er nogen der kan hjælpe mig



6 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Et godt bud ville være at bruge INI filer. Du kunne f.eks. bruge dette design til filen:
Fold kodeboks ind/udKode 


Hvis du skal enumerere sektionerne i filen (Hvilket du jo skal for at hente scores ind) gør du ca. således:

//add INIFiles to uses.
Fold kodeboks ind/udKode 


For at skrive til INI filen, skal objektet skabes på samme måde, men brug WriteString(section, ident, value) til at gemme tekst.

Jeg håber dette giver dig en ide om hvordan man kan lave en top liste. Hvis du skal have en mere uddybende forklaring kan du kontakte mig på #udvikleren.dk som "Darkstar"


Mvh,

Thomas Nielsen



Hej jeg har et lille problem jeg er nemmelig igang med et spil hvorman kan komme på en top 10 liste, men jeg ved ikke hvordan man kan lave en top 10 sådan at når man kommer på den liste så gemmes ens score i selve programmet sådan at hvis man flytter programmet til en ande computer så følger scoren med hvordan får jeg det til det?
Håber der er nogen der kan hjælpe mig


uf :D den var da lidt svær... du vil tilføje/ændre en resource i dit program ?... jeg ved godt hvordan man læser fra sådan en men jeg ved ikke hvordan man skriver... :(... gad godt serlv vide det igrunden... så jeg giver da 100 til den der kan give et svar...
-
neuroman? det' da mig :D
Aloha - Er du fresh???



Hej Mark,

Du kan gemme det i en ini fil.
Dog kan dette manipuleres med (folk kan ændre deres score...)
med mindre du kryptere det.

For at skrive/læse i en ini fil skal du bruge komponentet Tinifiles
Dette komponent følger med i Delphi..

Med venlig hilsen
Ken Christensen
Christensenken@hotmail.com
www.kenchristensen.tk



Hej Mark,

Du kan gemme det i en ini fil.
Dog kan dette manipuleres med (folk kan ændre deres score...)
med mindre du kryptere det.

For at skrive/læse i en ini fil skal du bruge komponentet Tinifiles
Dette komponent følger med i Delphi..

Med venlig hilsen
Ken Christensen
Christensenken@hotmail.com
www.kenchristensen.tk

læs hans spørgsmål evt? han vil smide scoren ind som en resurce i hans fil... det er ikke umuligt... men jeg ved ikke hvorda :|
-
neuroman? det' da mig :D
Aloha - Er du fresh???




Hej Mark !

Jeg ved ikke helt hvad du mener med at gemme i programmet. Hvis det er ok at gemme listen i en datafil, så har jeg her et forslag :

Jeg har oprettet en form med et memo felt.
Når programmet opstartes hentes listen fra datafilen og når programmet afsluttes gemmes, de 10 første tal i listen.

Håber du kan bruge det !

Per Jonasson

-------kodestart :
unit spillisteunit;

interface

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

type
TForm1 = class(TForm)
Memo1: TMemo;
Label1: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
templiste : Tstrings;
teller : integer;
begin
// opretter en midlertidig liste til de 10 tal
templiste := Tstringlist.Create;
for teller := 0 to 9 do
begin // sætter 10 tal i midlertidig liste
if memo1.lines.Count > teller then
templiste.Add(memo1.Lines[teller]);
end;
templiste.SaveToFile('test.dat'); // gemmer på disk
templiste.free; // frigør templiste
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
try
memo1.Lines.LoadFromFile('test.dat');
except
showmessage('listen er ikke oprettet endnu');
end;
end;

end.
--------- kodeslut



Hej jeg har et lille problem jeg er nemmelig igang med et spil hvorman kan komme på en top 10 liste, men jeg ved ikke hvordan man kan lave en top 10 sådan at når man kommer på den liste så gemmes ens score i selve programmet sådan at hvis man flytter programmet til en ande computer så følger scoren med hvordan får jeg det til det?
Håber der er nogen der kan hjælpe mig


Hej Mark,

Hvis jeg forstår dig rigtigt, så ønsker du at gemme dynamiske oplysninger i selve *.exe/*.dll filen, ved program-termination? Dvs. at du helst vil undgå at anvende eksterne filer, som fx ini eller dat, således at opdaterede oplysninger ligger i selve *.exe filen.

Jeg ved ikke, om der er en standard teknik for, hvorledes man gør, men her er ihvertilfald et forslag:

Nogle er måske klar over, at tekst strenge i Pascal programmer (*.exe filen) er compileret som tekst. Dvs. at hvis man åbner sit program/myProg.exe i en tekst-editor, som fx editPlus(brug ikke notepad), vil man imellem alle de ulæselige oplysninger kunne finde læselige tekststrenge, som man har erklæret i kildekoden.

FX -> lblMenu.caption := "Gaylord Phocker". Her vil man i sin exe i teksteditoren kunne finde teksten "Gaylord Phocker" iblandt ulæselige oplysninger.

Man kan også ændre i strengen, sålænge antallet af characters er det samme. Dvs. at man fx kan ændre ovenstående eksempel til "Guyford Plucker", og stadig få programmet til at køre. Ændrer man derimod i antallet af chars i strengen, vil programmet blive ugyldigt, pga. den hukommelse der er reserveret til programmet, ikke længere passer med det reelle indhold.

Med følgende fremgangsmåde kan du så implementere dit program:

1.) Hvis spilleren har opnået en high-score, så tast navn.
2.) Listen af high-scores opdateres.
3.) Ved program-nedlukning, lav kopi .exe fil i samme dir.
4.) Læs kopien som en TextFile.
5.) Parse teksten efter dit "index-indikator".

Index-indikator: Lav en streng kombination som du selv mener er unik(dog ikke 100% sikkert).
Det kan fx være "!c#&e(f=)opqk¤1" eller "!c#&e(f=)opqk¤2" eller "!c#&e(f=)opqk¤3", hvor tallet til sidst indikerer hvilken position man er i high-score listen. Du bestemmer helt selv, hvordan din indikator ser ud. Bare sørg for, at det er en kombination, du regner med ikke vil blive anvendt, når spillerne indtaster deres navn.

Det der tidligere blev nævt vedr. antallet af chars, kan du omgå ved fx at erklære alle pladser som

"!c#&e(f=)opqk¤1$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" <- Der er 30 chars deri ($ plads til char).

Efter en person har indtastet deres navn, kan den komme til at se således ud "!c#&e(f=)opqk¤1Anders Andersen$$$$$$$$$$$1564", hvor man i starten har indikatoren, herefter spillerens navn og til sidst scoren.

På denne måde kan du være sikker på, at der altid er 30 chars.

6.) Når indikator fundet, så erstat streng med ny osv.
7.) Gem filen.

Wulla!! Nu har du et program indeholdende en opdateret high-score list.

Problemet er nu, hvordan kan man rename det kopierede program til dets oprindelige navn? Et kørende program kan jo ikke slette/rename et kørende exe!!

Her er måske en løsning:
Lav dit program, så det kan køre med parametre, dvs. fx "c:\\mitspil.exe -replace".

Med anvendelsen af parametre, kan du foretage følgende:

1.) Ved termination af det oprindelige program; kør kopi-programmet med fx "c:\\kopiMitspil.exe -delete"
2.) Vent på Mitspil.exe er termineret.
3.) kopiMitSpil.exe sletter MitSpil.exe.
4.) kopiMitSpil.exe laver en ny kopi af sig selv til det original navn MitSpil.exe
5.) kopiMitSpil.exe terminerer og kalder før terminering "c:\\Mitspil.exe -deleteKopi"
6.) Vent på kopiMitspil.exe er termineret.
7.) MitSpil.exe sletter kopiMitSpil.exe og terminerer.


...det er da også bøvlet, hva?? (",)

Dette er muligvis en noget n00b løsning, men det er hvad jeg kan finde på, hvis du absolut vil gemme nye oplysninger i din .exe.



t