Highscore
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@Hardfalcon
dann könnte ich sie auch in konstanten packen!
eine Highscoreliste muss zur laufzeit mehrfach sortierbar sein, weil ich bei jedem spiel einen beliebigen platz in der liste erreichen kann.
ansonsten ist es eine beliebige textausgabe.
wobei ich mich frage,
a) wie er sie denn vorher sortiert bekommt, wenn es kein array ist. (außer es sind willkürliche fixwerte)
b) warum er sie erst in ne datei schreibt und dann ausgeben will (wohl weil er arrays nich kennt)
also, irgendwie ist das ganze höchst spanisch, ey...
dann könnte ich sie auch in konstanten packen!
eine Highscoreliste muss zur laufzeit mehrfach sortierbar sein, weil ich bei jedem spiel einen beliebigen platz in der liste erreichen kann.
ansonsten ist es eine beliebige textausgabe.
wobei ich mich frage,
a) wie er sie denn vorher sortiert bekommt, wenn es kein array ist. (außer es sind willkürliche fixwerte)
b) warum er sie erst in ne datei schreibt und dann ausgeben will (wohl weil er arrays nich kennt)
also, irgendwie ist das ganze höchst spanisch, ey...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
ui ui sieht ziemlich kompliziert aus ^^
aber ich denke ich habe den großteil verstanden.
nur wie bekomme ich jetzt hier:
statt Hallo, Welt etc.
meine Zeilen aus der Datei rein?
@hardfalcon
Ja die werden schon in der Liste sortiert
aber ich denke ich habe den großteil verstanden.
nur wie bekomme ich jetzt hier:
Code: Alles auswählen
DeinArray (1)="Hallo"
DeinArray (2)="Welt"
DeinArray (3)="Hallo"
DeinArray (4)="da draußen"
meine Zeilen aus der Datei rein?
@hardfalcon
Ja die werden schon in der Liste sortiert
Das Ende meines Lebens:
If leben = 0
End
Endif
If leben = 0
End
Endif
- Programie
- Beiträge: 1280
- Registriert: 06.08.2005 22:56
- Computerausstattung: https://www.sysprofile.de/id160800
- Wohnort: Gernsbach
- Kontaktdaten:
Du kannst es aber auch mit einer LinkedList machen.
Code: Alles auswählen
; Beispiel für PureBasic 4.00
NewList Score.s(); LinkedList erstellen
; *** Datei auslesen ***
If ReadFile(#True,"HighScore.txt"); Datei öffnen
Repeat; Starten einer Repeat-Until Schleife
AddElement(Score()); Neues Element hinzufügen
Score()=ReadString(#True); Zeile aus der Datei auslesen und in die Linkedlist einfügen
Until Eof(#True); Schleife wiederholen bis das Dateiende erreicht wurde
CloseFile(#True); Datei schließen
EndIf
; *** LinkedList auslesen ***
List=CountList(Score()); Elemente der Liste zählen
If List; Wenn Elemente in der Liste vorhanden sind...
If StartDrawing(ScreenOutput()); ...Anfangen zu zeichnen
For Count=0 To List; Liste in einer For-Next Schleife aufzählen
SelectElement(Score(),Count); Element auswählen
DrawText(x,y,Score()); Text anzeigen
Next; Ende der Schleife
StopDrawing(); Zeichnen beenden
EndIf
EndIf
@Programie
ein paar Anmerkungen zu Deinem Code:
hat das einen besonderen Grund, warum Du #True als Kanalnummer
verwendest? Ist zwar nicht grundsätzlich falsch, aber eher ungewöhnlich.
Ich persönlich arbeite gerne mit #PB_Any
Bei diesem Code gibt's Probleme, wenn die Datei initial leer ist:
Arbeite lieber mit einer kopfgesteuerten Schleife:
und folgendes Konstrukt:
...kann man wie folgt vereinfachen:
Dann brauchst Du weder eine Zählvariable noch ein SelectElement().
Grüße ... Kiffi
ein paar Anmerkungen zu Deinem Code:
Code: Alles auswählen
If ReadFile(#True,"HighScore.txt"); Datei öffnen
verwendest? Ist zwar nicht grundsätzlich falsch, aber eher ungewöhnlich.
Ich persönlich arbeite gerne mit #PB_Any
Code: Alles auswählen
FF = ReadFile(#PB_Any,"HighScore.txt")
If FF
[...]
CloseFile(FF)
EndIf
Code: Alles auswählen
Repeat; Starten einer Repeat-Until Schleife
[...]
Until Eof(#True); Schleife wiederholen bis das Dateiende erreicht wurde
Code: Alles auswählen
While Eof(#True) = 0
[...]
Wend
Code: Alles auswählen
For Count=0 To List; Liste in einer For-Next Schleife aufzählen
SelectElement(Score(),Count); Element auswählen
DrawText(x,y,Score()); Text anzeigen
[...]
Code: Alles auswählen
ForEach Score()
DrawText(x,y,Score()); Text anzeigen
[...]
Grüße ... Kiffi
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
HighScorlisten haben normallerweise eine feste Anzahl Einträge, so das eine LinkList das ganze nur verlangsamt.
Ein Array für die HighScores braucht man also sowieso, man kann dieses also zur Speicherung nehmen, wobei dann nur noch in String umgewandelt werden muß Str(HighScore(x))
Ein Array für die HighScores braucht man also sowieso, man kann dieses also zur Speicherung nehmen, wobei dann nur noch in String umgewandelt werden muß Str(HighScore(x))
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

> Ein Array für die HighScores braucht man also sowieso
nicht zwangsläufig. Es mag zwar sein, dass LinkedLists langsamer sind als
Arrays, aber die paar Millisekunden fallen bei der Verwaltung von Highscores
nicht auf.
Zudem halte ich die Verwendung von LinkedLists in diesem Zusammenhang
für einfacher handhabbar. Alle Scores werden per AddElement der LinkedList
hinzugefügt, dann sortiert und beim Anzeigen oder Speichern werden nur die
ersten X Ergebnisse berücksichtigt
Aber das ist sicherlich Geschmackssache. Der eine kommt besser mit Arrays
zurecht, der andere (z.B. ich) arbeitet lieber mit LinkedLists.
Grüße ... Kiffi
nicht zwangsläufig. Es mag zwar sein, dass LinkedLists langsamer sind als
Arrays, aber die paar Millisekunden fallen bei der Verwaltung von Highscores
nicht auf.
Zudem halte ich die Verwendung von LinkedLists in diesem Zusammenhang
für einfacher handhabbar. Alle Scores werden per AddElement der LinkedList
hinzugefügt, dann sortiert und beim Anzeigen oder Speichern werden nur die
ersten X Ergebnisse berücksichtigt
Aber das ist sicherlich Geschmackssache. Der eine kommt besser mit Arrays
zurecht, der andere (z.B. ich) arbeitet lieber mit LinkedLists.
Grüße ... Kiffi
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
hm... also, ich seh hier einen kleinen nachteil bei LL:
wenn die HSliste 10 einträge hat, und ich 20x spiele, dann hat sie 30 einträge nach deinem konzept?
und wenn das game dann mal nen monat läuft und immer wieder gespielt wird?
für eine liste mit 10 einträgen verwende ich ein array mit 11 feldern.
bei jeder neuen score wird die auf den 11ten platz gesetzt, dann das array sortiert.
auch ich betrachte nur die ersten 10 bei anzeigen und speichern, aber meine gesamtzahl übersteigt niemals 11.
außerdem finde ich die array lösung einfacher und besser nachzuvollziehen.
klar, im endeffekt ist es geschmackssache...
wenn die HSliste 10 einträge hat, und ich 20x spiele, dann hat sie 30 einträge nach deinem konzept?
und wenn das game dann mal nen monat läuft und immer wieder gespielt wird?
für eine liste mit 10 einträgen verwende ich ein array mit 11 feldern.
bei jeder neuen score wird die auf den 11ten platz gesetzt, dann das array sortiert.
auch ich betrachte nur die ersten 10 bei anzeigen und speichern, aber meine gesamtzahl übersteigt niemals 11.
außerdem finde ich die array lösung einfacher und besser nachzuvollziehen.
klar, im endeffekt ist es geschmackssache...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
> wenn die HSliste 10 einträge hat, und ich 20x spiele, dann hat sie 30
> einträge nach deinem konzept?
jepp.
> und wenn das game dann mal nen monat läuft und immer wieder gespielt
> wird?
es ist eigentlich eher unwahrscheinlich, dass ein Spiel so lange
ununterbrochen immer wieder gespielt wird, ohne dass es (oder der
Rechner) zwischendurch mal ausgeschaltet wird. Aber selbst da sehe ich
den (natürlich überflüssigen) Speicherverbrauch nicht so kritisch.
> für eine liste mit 10 einträgen verwende ich ein array mit 11 feldern.
ist naturlich auch eine gute Methode für die Speicherung von
Highscore-Einträgen.
> einträge nach deinem konzept?
jepp.
> und wenn das game dann mal nen monat läuft und immer wieder gespielt
> wird?
es ist eigentlich eher unwahrscheinlich, dass ein Spiel so lange
ununterbrochen immer wieder gespielt wird, ohne dass es (oder der
Rechner) zwischendurch mal ausgeschaltet wird. Aber selbst da sehe ich
den (natürlich überflüssigen) Speicherverbrauch nicht so kritisch.
> für eine liste mit 10 einträgen verwende ich ein array mit 11 feldern.
ist naturlich auch eine gute Methode für die Speicherung von
Highscore-Einträgen.