Entwickler-Ecke

WPF / Silverlight - WPF Rangliste Eingabe


Yannick23 - Fr 06.04.12 14:44
Titel: WPF Rangliste Eingabe
Hallo,

ich versuche schon seit Tagen eine Eingabe für eine Rangliste zu erstellen (WPF-Anwendung), die per Button die Eingabe (Name, Punkte) in einer .txt-Datei speichert.

Nur leider schaffe ich es nicht nach Punkten zu sortieren und den Spielern dann auch noch den Rang zuzuweisen.
Dazu kommt noch, dass ich Punkte öfters vergeben muss und ich dadurch die Punkte in der txt.-Datei ändern muss, die Spieler neu sortieren muss und wieder neue Ränge zuweisen.
Außerdem es soll bei gleicher Punkteanzahl zweier Spieler zwei 1. Plätze/Ränge geben.

So soll es in der txt.-Datei stehen:

Rang Name Punkte
1. Spieler1 12
2. Spieler2 9
3. Spieler3 1
.
.
.
usw.


Anwendungsoberflache:

Name: [textbox] Punkte: [textbox]

[Button] (Speichern)


Ich erwarte keine Tipps oder blöde Kommentare wie "Goolge hilft dir...". Ich brauche Code. Ich habe alles versucht und komm einfach nicht weiter.
BITTE HILFT MIR DANKE! :oops:


daeve - Fr 06.04.12 16:20

ja was stellst du dir vor ? das wir das für dich coden ? da bist du aber auf dem Holzweg...

was hast du bis jetzt an Code ? wo kommst du nicht weiter ?


Yannick23 - Sa 07.04.12 09:58

Ich bitte auch deßhalb um Hilfe, weil nicht wirklich gut programmieren kann...

Aber das große Problem ist:

Es gibt eine vorhandene Rangliste (Text-Datei) -

Rang Name Punkte
1 Spieler1 3
2 Spieler2 1
3 ....
.
.
.

- Wie kann z.B. Spieler2 Punkte dazuzählen, die Rangliste wieder neu sortieren und den Spielern neue Ränge zuweisen falls nötig.?


Cäptin Pommes - Sa 07.04.12 10:22

du hast doch bestimmt irgentwelche Spieler objekte oder? die sollten dann ne property für die Punkte haben ... dann kannste sie einfach ändern wie du willst und dann musst du nur noch die Punkte aller Spieler sortieren und speichern ...

wenn du nach nem sortier algorhytmus suchst, kannst du z.B mal nach Bubblesort gucken, der is nich sonderlich schnell aber sehr einfach für den anfang und für deine zwecke vollkommen ausreichend wie ich das sehe :)


Christian S. - Sa 07.04.12 11:49

Hallo, Yannick23!

Ich wiederhole nochmal die Frage von oben: Was hast Du schon versucht und wo kommst Du nicht weiter?

Wir helfen Dir gerne, Dein Problem zu lösen. Aber wir werden es nicht für Dich lösen! Ich bitte Dich, etwas mehr Eigeninitiative zu zeigen, sonst kommen wir hier nicht weiter.

Grüße,
Christian


Webo - Sa 07.04.12 13:05

Ich stell mal gerade eine Reihenfolge auf:



So, damit hätten wir schon mal einen groben Fahrplan für die nötigen Schritte. Kannst du allen Schritten folgen (wobei ich auch keine Garantie auf Vollständigkeit gebe)? Und dann: an welchem Schritt hängst du?


Grüße

Webo


Yannick23 - Sa 07.04.12 15:34

user profile iconWebo hat folgendes geschrieben Zum zitierten Posting springen:
Ich stell mal gerade eine Reihenfolge auf:

  • Einlesen der Textdatei
  • Auswertung der Textdatei (Sprich Zuweisung der Daten in der Textdatei zu Objekten im Programm)
  • Den passenden Spieler aus den Objekten raussuchen (also ein Vergleich mit dem Namen in der GUI)
  • Diesem dann die Punkte hinzuaddieren
  • Berechnung der Platzierung(en) = Vergleich der Punkte jedes Spielers und dadurch Aufbau einer neuen Rangliste
  • Die Spieler-Objekte wieder als Textdatei abspeichern


So, damit hätten wir schon mal einen groben Fahrplan für die nötigen Schritte. Kannst du allen Schritten folgen (wobei ich auch keine Garantie auf Vollständigkeit gebe)? Und dann: an welchem Schritt hängst du?


Grüße

Webo


Hallo,

ja genau so passt die Reihenfolge. Ich hänge schon am Anfang. Soll ich 2 Arrays machen für Name und Punkte? Und in diese dann Namen und Punkte aus der Textdatei packen?
Dann das Array Name durchgehen und den Spieler raussuchen. Falls Spieler vorhanden - im Array Punkte die Punkte des Spielers raussuchen und Punkte dazuzählen.
(Falls nicht - Wie speichere ich den neuen Spieler + Punkte ab?)
Dann wieder Punkte vergleichen.
Abspeichern.
Wie gesagt ich bin erst eingetaucht in die Welt des Programmierns und tu mir noch etwas schwer. Aber so stell ich mir mal den Vorgang vor, wie ich zum Ziel kommen könnte...


Cäptin Pommes - Sa 07.04.12 15:57

kannst du mal deine Klasse für die Spieler posten?


Yannick23 - Mi 11.04.12 11:31

Hallo,

was ich hier versuche ist in der Datei den Namen finden, im nächsten string stehen die Punkte. Diese ändern und das ganze wieder ausgeben.
In der Datei wird nichts verändert...


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:
string name = textBox1.Text;
string punkte = textBox2.Text;

StreamReader datei = new StreamReader(@"C:/Users/Yannick/Desktop/rangliste.txt");
string rangliste = datei.ReadToEnd();
datei.Close();

if (rangliste.IndexOf(name) > 0)
{
    StreamWriter YStream = new StreamWriter(@"C:/Users/Yannick/Desktop/rangliste.txt");

    String s = rangliste;
    char[] seps = { '*' };
    String[] strings = s.Split(seps);

    for (int i = 0; i < strings.Length; i++)
    {
        if (strings[i] == name)
        {
            String st = strings[i + 1];
            int x = Convert.ToInt32(st);
            x = x + Convert.ToInt32(punkte);
            strings[i + 1] = Convert.ToString(x);
        }
        YStream.Write(rangliste + strings[i] + "*");
    }
    YStream.Close();
}



Moderiert von user profile iconTh69: Beitragsformatierung überarbeitet.


Kha - Mi 11.04.12 14:47

Hm, irgendetwas sollte sich da eigentlich schon verändern. Hast du mit dem Debugger schon einmal nachgeschaut, ob Write auch tatsächlich ausgeführt wird? Bei so nichtsaussagenden Namen wie textBox1 könnte ich mir auch nicht merken, in welcher der Name steht ;) .


Yannick23 - Mi 11.04.12 15:19

Die Text-Datei schaut genau so aus wie davor...hm


Kha - Mi 11.04.12 16:05

Das war keine Antwort auf meine Frage ;) .


Yannick23 - Mi 11.04.12 19:17

Wie verwende ich den Debugger?
Was tun, wenn das Write nicht ausgeführt wird?