AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Highscore erstellen?

Ein Thema von nixalsverdruss · begonnen am 24. Jan 2009 · letzter Beitrag vom 24. Jan 2009
Antwort Antwort
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.784 Beiträge
 
Delphi 10.4 Sydney
 
#1

Re: Highscore erstellen?

  Alt 24. Jan 2009, 19:46
Ich hatte etwas Langeweile heute abend:

Deshalb habe ich mal eine Klasse gebastelt:
Delphi-Quellcode:
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;
Der Typ THighScoreElement kann den eigenen Bedürfnissen
noch angepasst werden.
Nur das Feld score sollte enthalten bleiben,
da in der add Methode darauf zugegriffen wird.


Delphi-Quellcode:
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;
.. noch einen schönen Abend.
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 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