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.