![]() |
Delphi-Version: 5
Spiel programmieren, (Highscoreliste, ich weiß alt und abgekaut)
Guten Abend,
ich bins wieder. Folgendes Problem: Ich habe mich nun an die Highscoreliste dran getraut und wenn wunderst, hänge ich wieder. 1. Prob unti2 übernimmt nicht das edit feld von unit1 2.Prob weiß ich nicht genau wie ich es hinkommen soll das der score einen platz in der liste ersetz, sodass alle einen platz runter rutschenund die letzten gelöscht werden (das löschen ist nicht so wichtig, da meine ausgabe nur 20 felder groß ist und insgesamt 10 spieler angezeigt werden) meine stringliste ist folgend aufgebaut Name 00 name 00
Delphi-Quellcode:
//Verloren
if leben<=0 then begin PlaySOUND(PChar('C:\Projekt Duell (end.)\Sound\verloren.wav'),hInstance,snd_ASync ); timer2.enabled:= false; timer1.enabled := false; lvl:=0; listbox1.enabled:=true; listbox1.visible:=true; //Problem anfang x:=1; repeat if count >= strtoint(score[x]) then begin //Soll name von Form1 hinkommen //addscore[x-1]=Form1.edit.text //hier soll der vorherige Platz ersetzt werden //score[x]:=count break; //heute rausgefunden das es vorzeitig abricht end; inc(x); inc(x); until x=score.count; //Problem ende x:=0; repeat Listbox1.items.add('1. ' +score[x] +'mit ' +score[x+1] +' Punkten'); inc(x); inc(x); until x=score.count; score.SaveToFile('C:\Projekt Duell (end.)\mittel.txt'); count:=0; MfG |
AW: Spiel programmieren, (Highscoreliste, ich weiß alt und abgekaut)
Ich will mich mal trauen und etwas ehrlich sein - wenn ich so deinen Beitrag lese, hab ich echt keine Lust, dir zu helfen! Mir wird sogar fast übel.
Erstens geht nicht wirklich hervor, was du genau bezwecken willst (vlt ja, aber dein Quellcode sagt etwas anderes [oder versucht es zumindest >.>]) Und zweitens - pack alles mal in die [ delphi] [ /delphi] Tags und rück ordentlich ein. Das ist ja voll der Horror! Edit:
Delphi-Quellcode:
Eigne dir mal die Grundlagen an. Wenn man kochen lernt, fängt man auch nicht direkt mit Pizzen an!
break;
//heute rausgefunden das es vorzeitig abricht |
AW: Spiel programmieren, (Highscoreliste, ich weiß alt und abgekaut)
hm
Zitat:
Zitat:
Zitat:
In der Schule hatte wir alle paar stunden einen neuen befehl kennen gelertn, dieser war nicht dabei. Auf im bin ich erst heute gestoßen, als ich in google nach möglichkeiten suchte um den Highscore zumachen. Ich weiß mir fehlt noch eine Menge an Wissen in dem Delphi-Feld, da ich nicht so lange damit zutun habe. Ich hoffe das hat alles ein bischen aufgeklärt. MfG |
AW: Spiel programmieren, (Highscoreliste, ich weiß alt und abgekaut)
Also der Quelltext ist absolut konfus. Und die fehlende Formatierung macht es nicht gerade einfacher ihn zu verstehen. Fass ihn mal zusammen und formatier in gescheit. Des weiteren solltest du auch aussagekräftige Bezeichner verwenden, um die Verständlichkeit zu erhöhen.
Du willst einen Wert in eine sortierte Liste einfüge. Am einfachsaten wäre es, wenn in jeder Zeile Name und Ergebnis strehen würden: Name1 nnn Name2 nnn Name3 nnn Dann kann man das in einer Stringliste ablegen. Mit der Methode Insert kann man dann an der gewünschten Stelle einen neuen Highscore einfügen. Überschreitet die Anzahl der Eintrag einen bestimmten Wert, kann man die höheren Eintrage einfach in einer Schleife von hinten löschen, bis die Liste wieder die gewünschte Anzahl Einträge enthält. Mehr kann man bei deiner Problemdarstellung kaum helfen. Und bitte nur eine Frage/Problem pro Beitrag. |
AW: Spiel programmieren, (Highscoreliste, ich weiß alt und abgekaut)
Ok habe versucht nun auf das Wesentlichste zubeschränken.
Der Quellcode hier soll nur einen niedrigeren Highscorewert ersetzten und dann aus gehen. count = ist der erspielte wert im Spiel zb 18900 form1.edit.text = Ist der Name des Spieler STringlistse 1.Name 20000 2.Name 17000 soll zu 1.Name 2000 2. form1.edit.text (18900)countwert
Delphi-Quellcode:
Ich hoffe so sollte der Delpi-Code formatiert werden.x:=1; //x=1 damit er bei der 2ten Stelle anfängt wo der zahlenwert drinnen steht repeat if count >= strtoint(score[x]) then begin //Was mir fehlt //1. [x-1] hier damit der name ersetzt wird =Form1.edit.text //2. [x] = count damit Wert ersetzt wird break; //soll die ganze repeat schleife beenden wenn der erst mögliche wert ersetzt wurde end; inc(x); inc(x);//Sprung bis zur nächsten zu überprüfenden Zahl until x=score.count; MfG |
AW: Spiel programmieren, (Highscoreliste, ich weiß alt und abgekaut)
Denk doch einfach mal scharf und logisch nach!!
Dann wirst du darauf kommen, dass du 3 Funktionen bauchst. 1.) eine Funktion, die prüft ob ein bestimmter Score es wert ist in die Highscoreliste eingetragen zu werden
Delphi-Quellcode:
2.) eine Procedure, die das Eintragen vornimmt und dazu noch den Spielernamen benötigt
// Result:
// 0 = kein Eintrag in Liste, weil Score zu schlecht // 1 = Eintrag in Liste; bestehender Eintrag würde verdrängt // 2 = Eintrag in Liste; Platz 1 function CheckScore(highscorelist:TStrings; score:integer):integer;
Delphi-Quellcode:
3.) eine Procedure, die die Einzahl der Einträge auf eine best. Stückzahl begrenzt
// score und Spielername in Liste eintragen
procedure InsertScore(highscorelist:TStrings; score:integer; const PlayerName:string);
Delphi-Quellcode:
So, damit hast du das Grundgerüst.
procedure LimitScorelist(highscorelist:TStrings; maxlen:integer);
begin while highscorelist.Length > maxlen do highscorelist.delete(highscorelist.Length-1); end; Was zählt sind nur diese Funktion/Prozeduren. Kein form1.edit.text; du hast eine Funktion/Procedure mit Parametern, nur diese Parameter sind wichtig! Programmiere diese ausserhalb von deinem Spiel in einem eigens dafür geschriebenen Testprogramm. Die Highscoreliste wäre normalerweise eine TStringList. Für dein Testprogramm nimmst du aber das Property Lines eines TMemo. |
AW: Spiel programmieren, (Highscoreliste, ich weiß alt und abgekaut)
Hallo,
danke für den versuch es mir zuerklären, leider versteh ich von den selbst gemachten funtionen und prozeduren nicht viel. Nach langem grübeln hab ich es nun selbst geschafft mit der repeat schleife.
Delphi-Quellcode:
Danke das ihr euch Zeit genommen habt mir zu helfen.
x:=1;
g:=19; repeat if count >= strtoint(score[x]) then begin repeat //umsetztung der niedrigeren Zahlen nach unten if g=1 then begin break; end; score[g]:=score[g-2]; score[g-1]:=score[g-3]; dec(g); dec(g); showmessage(inttostr(g)); showmessage(inttostr(x)); until g=x; score[x-1]:=edit1.text; //neuer wert an stelle eintragen score[x]:=inttostr(count); break; end; inc(x); inc(x); //Sprung bis zur nächsten zu überprüfenden Zahl showmessage(inttostr(x)); until x=21; MfG |
AW: Spiel programmieren, (Highscoreliste, ich weiß alt und abgekaut)
Zitat:
![]() Ohne Ahnung von Funktion, Prozeduren und Methoden ist sinnvolles Programmieren nicht möglich! |
AW: Spiel programmieren, (Highscoreliste, ich weiß alt und abgekaut)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03: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