Autor Beitrag
Kenan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Sa 20.06.09 18:36 
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
JasonDelife
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81

Windows 7 Professional
C# (Visual Studio 2008 Professional), Java (NetBeans IDE 6.7)
BeitragVerfasst: Sa 20.06.09 18:57 
Datei einlesen und eine List<T> füllen.
Dann mit Sort() und einem IComparer<T> die Liste sortieren
und mit foreach ausgeben.

Siehe: msdn.microsoft.com/d...ibrary/b0zbh7b6.aspx
Und: msdn.microsoft.com/d...ibrary/8ehhxeaf.aspx

Grüße, JasonDelife.
gfoidl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 157
Erhaltene Danke: 19

Win XP
C#, Fortran 95 - Visual Studio
BeitragVerfasst: 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.

ausblenden volle Höhe 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 });

      // Liste sortieren mit LINQ:
      List<User> highScoreList = 
        scoreList.OrderByDescending(i => i.Score).ToList();

      // Ausgabe in Datei (nicht in Text-Datei) per Xml-Serialisierung:
      XmlSerializer xmlSer = new XmlSerializer(typeof(List<User>));
      using (FileStream fs = File.OpenWrite("Highscores.xml"))
        xmlSer.Serialize(fs, highScoreList);

      // Einlesen der Werte aus der Datei:
      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ü

_________________
Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!
Kenan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Sa 20.06.09 19:07 
OK soweit verstehe ich das:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81

Windows 7 Professional
C# (Visual Studio 2008 Professional), Java (NetBeans IDE 6.7)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 157
Erhaltene Danke: 19

Win XP
C#, Fortran 95 - Visual Studio
BeitragVerfasst: 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ü

_________________
Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!