Entwickler-Ecke
C# - Die Sprache - Highscoreliste Sortieren HILFE!
Kenan - Sa 20.06.09 18:36
Titel: Highscoreliste Sortieren HILFE!
Hallo habe folgendes Problem wir haben ein Projekt in der Schule: Gameprograming!
in C#
mein Problem ich möchte eine Highscoreliste machen!
ich habe in einem Struct den Namen und den Score gespeichert!
dieses möchte ich in eine txt Datei Speichern damit sie bei jedem öffnen von Spiel neu Sortiert und ausgegeben wird!
aber ich habe absolut keine Idee wie ich dieses Problem lösen kann!
Kann mir jemand vl. Dabei helfen?!
Danke im Vorraus!
mfg
Kenan
gfoidl - Sa 20.06.09 19:06
Hallo,
wenn .net 3.5 verwendet wird kann mittels LINQ eine (meiner Meinung nach) elegantere Art verwendet werden. Die Daten würde ich weiters nicht in eine Textdatei speichern sondern mit Hilfe der XML-Serialisierung in eine xml-Datei schreiben. Somit ist weniger Code notwendig.
Nachfolgendes Beispiel zeigt wies es geht. Durchlaufe das Programm mit dem Debugger und schau wie sich die Werte verhalten.
Sollte keine LINQ verwendet werden gibt es die Überladungen von List<T>.Sort.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml.Serialization;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { List<User> scoreList = new List<User>(); scoreList.Add(new User { Name = "A", Score = 100 }); scoreList.Add(new User { Name = "B", Score = 102 }); scoreList.Add(new User { Name = "Freak", Score = 200 });
List<User> highScoreList = scoreList.OrderByDescending(i => i.Score).ToList();
XmlSerializer xmlSer = new XmlSerializer(typeof(List<User>)); using (FileStream fs = File.OpenWrite("Highscores.xml")) xmlSer.Serialize(fs, highScoreList);
highScoreList = null; using (FileStream fs = File.OpenRead("Highscores.xml")) highScoreList = xmlSer.Deserialize(fs) as List<User>; } }
[System.Diagnostics.DebuggerDisplay("{Name} | {Score}")] public struct User { public string Name; public int Score; } } |
mfG Gü
Kenan - Sa 20.06.09 19:07
OK soweit verstehe ich das:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| static void Highscorelist() { StreamWriter write = new StreamWriter("Highscore.txt",true); write.Write(name); write.Write(" "); write.Write(score1); write.WriteLine(); write.Close(); StreamReader read = new StreamReader("Highscore.txt");
} |
Muss in der Datei ein bestimmtes Format sein?
z.B.: Name Score o.ä
und wie verwende ich jtz das Sort und das IComparer wo und wie muss ich das hinschreiben das bei MSDN hat mir nicht sehr weitergeholfen!
Danke Schon mal im Vorraus!
JasonDelife - Sa 20.06.09 20:07
@gfoidl
Ja, XML-Serialisierung ist besser, hast du recht.
Aber da ich nicht wusste, ob er .NET 3.5 hat, hab ich ihm zum IComparer<T> geraten.
@Kenan
Das sind Grundlagen, du solltest mal ein C#-Einsteigerbuch lesen.
Außerdem hat gfoidl schon den kompletten Code geliefert, der alle deine Fragen löst, du musst ihn nur noch anpassen.
Normalerweise muss man mit ein Link zur MSDN und einem Codeschnipsel auskommen, das gfoidl schon alles für dich erledigt hat ist schon genug.
Wir werden dir bestimmt kein extra auf dich Zugeschnittenes und mit allerlei Schnick-Schnack ausgestattetes, fertiges Programm auf dem Silbertablett servieren.
Grüße, JasonDelife.
Kenan - Sa 20.06.09 20:33
Sorry aber ich glaube ich verwende nicht .net 3.5 da ich das Programm Debuggen wollte und er nach Verweisen von Linq gefragt hat die ich hinzufügen wollte die aber nicht vorhanden waren!
Also deshalb geht bei mir das mit XML nicht geht!
Ich wollte ja nicht das es angepasst ist aber bei mir geht es halt mit XML nicht!
Könnte mir trozdem jemand helfen?!
mfg
Kenan
gfoidl - Sa 20.06.09 20:39
Zitat: |
Also deshalb geht bei mir das mit XML nicht geht! |
Das hat mit LINQ nichts zu tun. XML-Serialisierung ist seit der Ur-Version von .net vorhanden - also 1.0 (außer ich irre mich und ich will gerade nicht in der MSDN nachschauen).
Du kannst somit eine Kombinations aus den genannten Antworten verwenden. D.h. Sortierung der Liste mit der Überladung die den IComparer verwendet und speichern der Liste per XML-Serialisierung.
Der Rest sind Grundlagen (dies eigentlich auch schon).
mfG Gü
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!