Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Highscore (https://www.delphipraxis.net/7653-highscore.html)

Gregor00 18. Aug 2003 19:24

Re: Highscore
 
@ alexander

klar lernt man daraus, aber nur wenn man es auch versteht und man nach einer weile erfolge verbuchen kann. Wenn man jedoch stundenlang vor dem monitor sitzt, sich seitenweise die online- hilfe durchliest und am ende immernoch nichts dabei rauskommt ist das schon ein bisschen demmotivierend, oder etwa nicht??

ok dank eurer hilfe funktioniert das sortieren jetzt ganz gut (vor allem dank kiar)

jetzt stellt sich jedoch noch die frage wie ich das realisiere nicht auf die einzelnen Columns zu klicken, sondern per Button die Column sortiert werden... einfache anweisungen á la " Button1.Click " funktionieren (natürlich) nicht (wär ja auch zu schön gewesen) :twisted:

Tpercon 18. Aug 2003 19:29

Re: Highscore
 
In der OnClick Prozedure des Buttons schreibst du einfach
Delphi-Quellcode:
ColumnToSort := 1;
ListView1.AlphaSort;

Gregor00 19. Aug 2003 09:58

Re: Highscore
 
oki thx Tpercon

jetzt vertehe ich bloß nicht so ganz wie ich die einzelnen "Subitems" direkt ansprechen kann. schließlich muss ich die niedrigste punktzahl der Highscore mit der vom spieler erreichten Punktzahl vergleichen..
Ich würde das gern mit ner " If ... then... else..." - Anweisung machen, hab schon ales mögliche ohne erfolg versucht

bye
greg

Tpercon 19. Aug 2003 10:05

Re: Highscore
 
Es geht ja jetzt nur um die Anzeige im ListView, oder?
Du fügst deine Werte einfach mittels Add... in die ListView ein.
Anschließend sagst du ihm halt mittels ColumnToSort welche Spalte er sortieren soll und dann sortierst du das ganze mittels AlphaSort. Da du ja Integer und keine Strings vergleichen möchtest, mußt du die entsprechende Sort Methode für die Spalte noch anpassen:
Delphi-Quellcode:
  case ColumnToSortLV1 of
    0: Compare := CompareText(Item1.Caption,Item2.Caption);
    1: begin //bzw. die Spalte die die Integer enthält
         ix := ColumnToSortLV1 - 1;
         if CompareText(Item1.SubItems[ix],Item2.SubItems[ix]) = 0 then
           Compare := 0
         else
           if StrtoInt(Item1.SubItems[ix]) > StrtoInt(Item2.SubItems[ix]) then
             Compare := 1
           else Compare := -1;
       end;
    else
      begin
        ix := ColumnToSortLV1 - 1;
        Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
      end;
Das müßte dir jetzt gut weiterhelfen, ansonsten frag einfach.

Gregor00 19. Aug 2003 10:23

Re: Highscore
 
thx for answer aber ich mein was anderes, Das Sortieren der einträge funktioniert jetzt ganz gut.
ok, ich beschreib mein prob mal ausfürlicher: Also die SupItems (das sind die Punkte die der entsprechende spieler erreicht hat) werden von der größten zahl (ganz oben auf der ListView) bis zur kleinsten (ganz unten auf der ListView) sortiert, das funktioniert auch. Da ich aber nur eine bestimmte anzahl an namen und Punkten in der HighScore stehen haben will muss halt verglichen werden ob die Punktzahl, die der spieler erreicht hat (werden in einem Label ausgegeben) höher ist als die niedrigste Punktzahl auf der Highscore. wenn ja, dann soll diese höhere punktzahl auf die Highscore gesetzt werden und dementsprechned die niedrigste gelöscht werden (das löschen ist kein problem)
so ich hoffe jetzt ist meine frage deutlicher

cu greg

Alexander 19. Aug 2003 10:29

Re: Highscore
 
Probier das mal so:
Delphi-Quellcode:
if (Label1.Caption > ListView1.Items[ListView1.Items.Count -1].SubItems.Text)
then ShowMEssage('Du bist auf der HighScore!!');
Erklärung:
Es wird das überprüft, ob die Zahl in dem Label größer ist als die letzte Zahl im ersten SubItem.
Nachtrag: Habe es nicht getestet.

Tpercon 19. Aug 2003 10:32

Re: Highscore
 
Füge den Wert einfach in die ListView hinzu, sortiere das und lösche einfach den/ die unteren Einträge!
Delphi-Quellcode:
while ListView1.Items.Count > 10 do begin
  ListView1.Items.Delete(ListView1.items.Count - 1);
end;
Eine andere Möglichkeit wäre (Voraussetzung: ddie Liste ist wirklich sortiert!) das du einfach schaust, wie groß der letzte Wert ist und wenn die neue Punnktezahl größer ist, dann fügst du den in die ListView und löscht den letzten.

Gregor00 19. Aug 2003 11:10

Re: Highscore
 
super danke alex genauso funktioniert es. so ähnlich hab ich es auch versucht...

@ tpercon
hab's bisjetzt auf eine ähnliche weise gemacht aber vielleicht änder ich's auch noch auf deinen Vorschlag um

also vielen dank für die hilfe dank euch funhtioniert mein 'Highscoretestprogramm' jetzt (fast) einwandfrei, jetzt muss ich's nur noch in das richtige spiel einbauen...(mal sehen was na wieder für probleme auftauchen..)

die nächste frage wäre, wie ich die Highscore in eine Datei speicher, aber das versuch ich erstmal selber :lol:

Alexander 19. Aug 2003 11:13

Re: Highscore
 
Als Tip: Inis wären dafür Ideal. So ähnlich aufgebaut (links der Name, rechts die Punkte...):
Code:
[highscore]
name1=500
name2=400

Tpercon 19. Aug 2003 11:16

Re: Highscore
 
Und beim Einlesen schön überprüfen, ob der Schlüssel z.B. name3 bzw. die Section auch wirklich existiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 Uhr.
Seite 2 von 3     12 3      

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