tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
672
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    BlackPsycho BlackPsycho ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    18
    Hi ich versuche eine Highscore Klasse zu schreiben die meinen Highscore vom spiel hält da die scores von den levels an sich verwaltet werden und beim übergang zum nächsten level auf 0 gesetzt werden.

    Ich versuch verzweifelt seit 2 tagen eine klasse zu schreiben die meinen highscore hält, und ich ihn zurückgeben kann und punkte hinzufügen.

    das eigendliche problem ist das punkte in verschiedenen klassen berechnet und addiert werden. und ich in jeder dieser klassen ein neues Object bzw. Instanz davon erstellen muss.

    Highscore highscore = new Highscore();

    machen muss und somit jede klasse ihren eigenen highscore hat und nicht einen einzigen für alle.

    Alle Klassen sollten auf den highscore zugreifen können damit es nur ein einziges objekt davon gibt und nich 2-3.

    wie lässt sich das bewerkstelligen? ich hoffe ihr konntet verstehen was ich meine.

    meine momentane Highscore Klasse:
    Code :
    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
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Mlp_Fim_2D
    {
        public class Highscore
        {
            int highScore;
            
     
            public int HighScore
            {
                get { return highScore; }
                set { highScore = value; }
            }
     
            public void AddScoreToHighscore(int ScoreToAdd)
            {
                HighScore = ScoreToAdd + HighScore;
            }
     
            public int GetHighScore()
            {
                return HighScore;
            }
     
            public Highscore()
            {
                
            }
        }
    }
    Geändert von BlackPsycho (29.09.11 um 14:43 Uhr)
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Hi

    C# gehört nich hier zu C/C++ rein, sondern zu .NET.
    Ich habs mal verschoben.

    Zum Thema:
    Du brauchst genau eine Highscore-Variable, die von überall erreichbar ist:
    zB. ein static Highscore in Highscore selber.
    Schau dir mal das Singleton-Pattern an.

    Gruß
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  3. #3
    BlackPsycho BlackPsycho ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    18
    Zitat Zitat von sheel Beitrag anzeigen
    Hi

    C# gehört nich hier zu C/C++ rein, sondern zu .NET.
    Ich habs mal verschoben.

    Zum Thema:
    Du brauchst genau eine Highscore-Variable, die von überall erreichbar ist:
    zB. ein static Highscore in Highscore selber.
    Schau dir mal das Singleton-Pattern an.

    Gruß
    Ja die Variable soll von überall zugreifbar sein.

    hab mir das angeguggt und es klappt ned :/.
    irgendwelche anderen tipps?

    Wie greif ich dann eigentlich richtig darauf zu aus ner anderen klasse?
    vll mach ich da einen fehler.

    gruss
    Geändert von BlackPsycho (29.09.11 um 15:05 Uhr)
     

  4. #4
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Poste mal Code. Die Lösung als Singelton funktioniert sicher.
     

  5. #5
    BlackPsycho BlackPsycho ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    18
    Zitat Zitat von Steiner_B Beitrag anzeigen
    Poste mal Code. Die Lösung als Singelton funktioniert sicher.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Mlp_Fim_2D
    {
        public static class Highscore
        {
            static int _highScore;
     
            public static int HighScoreValue
            {
                get
                {
                    return _highScore;
                }
                set
                {
                    _highScore = value;
                }
            }
        }
    }

    Ich bekomm immer "Mlp_Fim_2D.Highscore.HighScoreValue ist eine Eigenschaft, wird aber wie ein Typ verwendet.

    wenn ich das mache: Highscore.HighScoreValue = 30;
     

  6. #6
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Hallo,

    Du musst _highScore initialisieren. Der Getter muss irgendwie so ausschauen:
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    
    get
    {
      if (_highScore == null)
        _highScore = new Highscore();
      
      return _highScore;
    }
     

  7. #7
    BlackPsycho BlackPsycho ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    18
    es kann keine instanz einer statischen klasse erstellt werden oO.

    ich flipp bald aus -.-

    trotzdem danke für den versuch

    sollte jetz funktionieren danke euch alle
    Geändert von BlackPsycho (29.09.11 um 15:49 Uhr)
     

  8. #8
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Dann mach die Klasse nicht statisch. Du hast schließlich auch nicht-statische Membervariablen. Wenn du bei google "C# Singleton" eingibst ist zumindest der erste Link eine funktionierende Version.
     

  9. #9
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Die Klasse ist nicht statisch. Du erzeugst lediglich eine statische Instanz dieser Klasse.
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    public class Highscore
    {
        public static readonly Highscore Instance = new Highscore(); 
        public int HighScoreValue { get; set; }
    }
       
    // Verwendung
     
    Highscore.Instance.HighScoreValue = 100;

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  10. #10
    Avatar von rd4eva
    rd4eva rd4eva ist offline Mitglied Brillant
    Registriert seit
    Feb 2003
    Beiträge
    756
    An der Stelle würde mich mal interessieren was für das Singleton Pattern spricht.
    Es ist keine Vererbung / Interfaces im Spiel oder ähnliches von daher wäre es doch wesentlich einfacher die Klasse static zu machen und gut ist.
     
    In order to understand recursion, one must first understand recursion.

  11. #11
    mki_germo mki_germo ist offline Mitglied Gold
    Registriert seit
    Jan 2006
    Ort
    Sindelfingen
    Beiträge
    114
    Zitat Zitat von rd4eva Beitrag anzeigen
    An der Stelle würde mich mal interessieren was für das Singleton Pattern spricht.
    Es ist keine Vererbung / Interfaces im Spiel oder ähnliches von daher wäre es doch wesentlich einfacher die Klasse static zu machen und gut ist.
    Gegenfrage: wieso sollte das Singletonpattern nicht greifen, nur weil keine Interfaces/Vererbungen mit im Spiel sind? Der Einsatz von Patterns ist prinzipiell nie verkehrt und in diesem Fall liefert das Singletonpattern genau die gewünschte Funktion.
     

  12. #12
    Avatar von rd4eva
    rd4eva rd4eva ist offline Mitglied Brillant
    Registriert seit
    Feb 2003
    Beiträge
    756
    Ganz einfach: Weil es unnötig ist und den Code unleserlicher macht.
    Ich gehe davon aus das ein dritter den Code wesentlich schneller verstehen würde wenn er eine static Klasse vor sich hat als wenn er sich durch eine Implementierung des Singleton Pattern kämpfen muss.
    Desweiteren ist der gemeine Programmierer eher schreibfaul. Nicht nur das die Implementation des Singleton Patterns schon wesentlich mehr Code verlangt, auch die Verwendung (getInstance etc.) erfordert mehr Schreibaufwand.
    Der Einsatz von Patterns ist prinzipiell nie verkehrt
    Das sehe ich anders. Ich würde Patterns nur Implementieren wenn es wirklich Notwendig ist.
    Beispielsweise könnte ich in einer "Mini-Anwendung" selbstverständlich das MVC Pattern verwenden aber solange dafür keine Notwendigkeit besteht spar ich mir doch den völlig unnötigen Overhead.

    Bzgl. des Singleton Pattern gibts hier noch einen mMn interessanten Blog Eintrag:
    http://sites.google.com/site/steveye...sidered-stupid
     
    In order to understand recursion, one must first understand recursion.

  13. #13
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Ich hab nicht behauptet, dass das Singleton die einzige Lösung ist;
    nur eine von mehreren.

    Persönlich bin ich auch eher für den Patterneinsatz, auch bei Minianwendungen.

    Zum verlinkten Artikel: Irgendwie kann ich den nicht ganz ernst nehmen.
    Das einzig Schlechte laut dem Autor ist, dass ein Pattern bekannter ist als andere.
    Deswegen macht er sich über alles und jeden lustig, zieht die gesamte OOP in den Dreck, dazu ein paar Seitenhiebe auf Bjarne Stroustroup und seine "komische" Sprache...
    Alles mit Argumenten, die beim Nachdenken darüber eigentlich keine Argumente sind.
    Und nächstes Mal: "Staying Up Too Late Considered Harmful.". Alles ist stupid und harmful.
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  14. #14
    Avatar von rd4eva
    rd4eva rd4eva ist offline Mitglied Brillant
    Registriert seit
    Feb 2003
    Beiträge
    756
    Ich hab nicht behauptet, dass das Singleton die einzige Lösung ist
    Und ich habe nicht behauptet das du das behauptet hättest.
    Die Ausgangsfrage war warum speziell in diesem Fall ein Singleton Pattern Sinnvoll sein soll.

    Irgendwie kann ich den nicht ganz ernst nehmen.Das einzig Schlechte laut dem Autor ist, dass ein Pattern bekannter ist als andere.
    Zugegeben der Artikel ist schon ziemlich sarkastisch geschrieben aber der Bekanntheitsgrad ist nicht das worum es geht.
    Es geht vielmehr darum das (speziell das Singleton Pattern) geradezu inflationär verwendet wird.
    Und das nicht selten in Fällen (wie diesem hier) wo es völlig unnötig ist.
    Desweiteren kritisiert er eben auch :
    Unnötigen Schreibaufwand, Memory Leaks, Äquivalenz zu globalen Variablen ( die nichts mit OOP zu tun haben ) etc.
     
    In order to understand recursion, one must first understand recursion.

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 03.06.10, 12:26
  2. Highscore erstellen in TXT-Datei (Java, Netbeans IDE)
    Von Zadek im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 15
    Letzter Beitrag: 24.06.09, 11:03
  3. Highscore-liste erstellen
    Von moe_joe im Forum Java
    Antworten: 57
    Letzter Beitrag: 18.10.07, 14:13
  4. textdatei mit highscore erstellen
    Von NiceOne im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 14.07.04, 14:58
  5. Highscore?
    Von ICEWeasel im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 25.10.03, 00:39