Autor Beitrag
Lukas138
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 25.11.06 14:07 
hallo,
ich muss cshon wieder eure Zeit und Hirne beanspruchen.
Ich versuche nun shcon seid mehreren Stunden eine Highscore funktion für mein kleines Spiel zu erstellen. Diese soll ssich auch dauerhaft Speichern und bei jedem Neustart des Programmes mit laden. Die Highscore soll dann nach Punkten sortiert (1. natürlich der mit der Höchsten Zahl, 9. der mit der niedrigsten) angezeigt werden. Dazu sollten dann neben der jeweiligen Punktezahl der Name des Spielers angezeigt werden.
ICh bin bisher so vorgegeangen:
In Unit 1 kann man in einem Memofeld den namen eintragen, der wird dann in eine txt datei gespeichert. In Unit 2 ist das eigentliche spiel, hier wird die erreichte Punktezahl in ein Memo2 geschrieben und in eine ander txt datei gespeichert. In Unit 3 schliesslich wird dann aus beiden Dateien in 2 unterschiedliche memo felder ausgelesen und dann wie folgt in ein drittes memofeld eingetragen:

spieler x
100
123
89

Dies wird dann in eine weiter txt datei gespeichert.

Das Problem (genauer die Probleme) ist das diese txt dateien sich bei neustart des spiels immer Überschreiben, die Highscore somit immer resettet wird.
Des weiteren werden die Punkte nicht sortiert :(

Hat jemand einen idee wie man das evtl lösen kann (von mir aus auch komplett anders!!)
Wäre sehr nett :)

mfg Lukas

P.S.: Hoffe das dies nur eine Frage ist, falls nicht Tut es mir leid ;)
Leuchtturm
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: Sa 25.11.06 14:12 
Du könntest es über ini Dateien machen:www.dsdt.info/tipps/?kat=33 :wink:

_________________
Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
Hexenkönig
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 41

Win XP
Delphi 2005 Personal, Delphi 5 Standart
BeitragVerfasst: Sa 25.11.06 14:24 
du könntest auch ein Array machen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
type

 Teintrag=record
     name:string[20];
     punkte:integer;
    end;

 Tliste=Array[1..9of TEintrag;

...

var
 Form1:Tform1;
 liste:Tliste;
 datei:file of Tliste;
implementation
...


Dan kannst du ganz einfach das komplette Array speichern und öffnen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure speichern(dateiname:string);
begin
  assignfile(datei, dateiname);
  rewrite(datei);
  write(datei,liste);
  closefile(datei);
end;

procedure oeffnen(dateiname:string);
begin
  assignfile(datei, dateiname);
  reset(datei);
  read(datei,liste);
  closefile(datei);
end;


Habe es nicht getestet, aber es müsste klappen

_________________
Irren ist menschlich, aber wenn man richtigen Mist bauen will, braucht man einen Computer.
Lukas138
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 25.11.06 14:26 
user profile iconLeuchtturm hat folgendes geschrieben:
Du könntest es über ini Dateien machen:www.dsdt.info/tipps/?kat=33 :wink:


Das hab ich auch versucht, aber irgendwie funzt das ned.
Habe dazu einfach mal diesen code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function GenerateUniqueFileName(FileName: String): String;
var count: integer;
begin
  if not FileExists(FileName) then
  begin
    result := FileName;
    exit;
  end;
  count:=1;
  while FileExists(ChangeFileExt(FileName, '')+'-'+IntToStr(count)+
  ExtractFileExt(FileName)) do
    Inc(Count);
  result := ChangeFileExt(FileName,'')+'-'+IntToStr(count)+ExtractFileExt(FileName);
end;


übernommen... funzt aber iwie ned.

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
Lukas138
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 25.11.06 14:35 
ICh vermute das liegt daran, das der die Datei immer noch Überschreibt, da keine neuen txt dateien vorhanden sind.
Ausserdem rallt der nicht die Datei mi dem neuen kürzel zu laden, da der ja eien bestimmte datei laden muss.

@[/quote]hexe: ich werde das mal ausprobieren! [/quote]
pennyWISE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49

Win XP
Delphi 2005 PE (getunt), QBasic 4.5
BeitragVerfasst: So 26.11.06 16:35 
Ich habe mich auch mal dran gemacht für ein MasterMind-Abklatsch eine Highscore zu erstellen...bekomme aber ne komische Fehlermeldung. Ich deklariere wie folgt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
type THighscore = record
       Name:String[5];
       Anzahl:byte;
       Tzime:string[6];
     end;

  TMindMasterForm = class(TForm)



dann folgt nach der Komponentendeklaration:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  MindMasterForm: TMindMasterForm;
  Highscore: array[1..11of THighscore;

implementation

uses Unit1;

{$R *.dfm}


Wenn ich nun mit dem Feld areiten möchte, wie z.B. hier:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TMindMasterForm.FormCreate(Sender: TObject);
var i,zufall: integer;
begin
 highscore[1].Name:='Bernd das Brot';
end;


..kommt so eine Fehlermeldung: 'Klassse besitzt keine Standardeigenschaft'
Delphi-Hilfe zu dem thema hab ich mir schon durchgelesen, kann meinen Fehler aber nicht finden...ich hab auch schon versucht noch ne klasse des Typs
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
THighscoreArray = array[1..11of THighscore;

{und dann:}

Highscore: THighscoreArray;


..hat aber nichts gebracht.
schonmal danke für die Hilfe
-Qbenni-
pennyWISE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49

Win XP
Delphi 2005 PE (getunt), QBasic 4.5
BeitragVerfasst: So 26.11.06 18:09 
ok, der fehler muss beim feldnamen gewesenen sein..hab erst die klasse auf THeiscore umbenannt, was nichts brachte. dann hab ich noch das feld highscore in hyscore umbenannt und dann gings..keine ahnung wieso aber jezz gehts :mrgreen:
Der_Wahnsinn
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mi 29.11.06 10:18 
user profile iconpennyWISE hat folgendes geschrieben:
ok, der fehler muss beim feldnamen gewesenen sein..hab erst die klasse auf THeiscore umbenannt, was nichts brachte. dann hab ich noch das feld highscore in hyscore umbenannt und dann gings..keine ahnung wieso aber jezz gehts :mrgreen:


Vll lag das daran das der 'high' falsch verstanden hat, also high für irgendetwas anderes steht??
Speichert der die Highscore nun auch dauerhaft und wird diese nach wert des ergebnisses sortiert??
Würde mich sehr interressieren...
mfg Der Wahnsinn