![]() |
Highscore erstellen?
Hallo,
ich habe ein kleines Spiel gemacht, bei dem die Zeit mitläuft. Das hab ich so gelöst:
Delphi-Quellcode:
Der Highsore soll:
procedure TForm2.Timer1Timer(Sender: TObject);
begin Label42.caption:=inttostr(strtoint(Label42.caption)+1); end; - auf dem nächsten Formular sein - den Sekundenwert übernehmen - Nameneditieren zulassen - automatisch gespeichert werden. Mir fällt dazu gar nichts ein. Hat einer eine Idee? Danke schon mal im Voraus nixalsverdruss |
Re: Highscore erstellen?
Record erstellen mit Zeit (als Integer) und Name (als String)
Record auf Zeit hin sortieren, somit hast du die Highscore Die ersten 10 Einträge des Record in eine .dat file speichern und bei Bedarf auslesen. Das Übernehmen von form1 auf Form2 sollte kein Problem sein |
Re: Highscore erstellen?
Wie sortiere ich denn die records?
|
Re: Highscore erstellen?
Zitat:
Qicksort, Bubblesort ... Wie das dann umgesetzt wird, hängt davon ab wie Deine Liste ausschaut (verkettete Liste, Array, dyn.Array, TList). Grüße Klaus |
Re: Highscore erstellen?
Ich hatte etwas Langeweile heute abend:
Deshalb habe ich mal eine Klasse gebastelt:
Delphi-Quellcode:
Der Typ THighScoreElement kann den eigenen Bedürfnissen
type
THighScoreElement = record score : Integer; end; THighScore = class(TList) private maxCount: Integer; procedure free; public procedure add(element:THighScoreElement); function getIndex(index:Integer):THighScoreElement; procedure loadFromFile(fileName:TFileName); procedure saveToFile(fileName:TFileName); constructor create(maxList:Integer); end; noch angepasst werden. Nur das Feld score sollte enthalten bleiben, da in der add Methode darauf zugegriffen wird.
Delphi-Quellcode:
.. noch einen schönen Abend.
constructor THighScore.create(maxList:Integer);
begin inherited create; maxCount := maxList; end; procedure THighScore.add(element:THighScoreElement); var i : Integer; inserted : Boolean; PHighScoreElement : ^THighScoreElement; begin i:=0; inserted := false; while (i <= self.Count -1) and not inserted do begin PHighScoreElement := self.Items[i]; if PHighScoreElement^.score < element.score then begin new(PHighScoreElement); PHighScoreElement^:=element; self.Insert(i,PHighScoreElement); inserted := true; end; inc(i); end; if not inserted then begin new(PHighScoreElement); PHighScoreElement^:=element; inherited add(PHighScoreElement); end; if self.count > maxCount then begin PHighScoreElement := self.Items[self.count-1]; dispose(PHighScoreElement); self.Delete(self.count -1); end end; function THighScore.getIndex(index:Integer):THighScoreElement; var PHighScoreElement: ^THighScoreElement; begin PHighScoreElement:=self.Items[index]; result := PHighScoreElement^; end; procedure THighScore.loadFromFile(fileName:TFileName); var mStream : TMemoryStream; PHighScoreElement : ^THighScoreElement; begin mStream := TMemoryStream.Create; mStream.LoadFromFile(fileName); while mStream.Position < mStream.Size do begin new(PHighScoreElement); mStream.Read(PHighScoreElement^,sizeOf(THighScoreElement)); inherited add(PHighScoreElement); end; mStream.Free; end; procedure THighScore.saveToFile(fileName:TFileName); var mStream : TMemoryStream; PHighScoreElement : ^THighScoreElement; i : Integer; begin mStream := TMemoryStream.Create; for i:=0 to self.Count -1 do begin PHighScoreElement := self.Items[i]; mStream.Write(PHighScoreElement^,sizeOf(THighScoreElement)) end; mStream.SaveToFile(fileName); mStream.Free; end; procedure THighScore.free; var i : Integer; PHighScoreElement : ^THighScoreElement; begin for i:=self.Count -1 downto 0 do begin PHighScoreElement := self.Items[i]; dispose(PHighScoreElement); self.Delete(i); end; inherited free; end; Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz