C# Highscore Klasse erstellen die den Highscore hält

BlackPsycho

Mitglied
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:
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()
        {
            
        }
    }
}
 
Zuletzt bearbeitet:
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ß
 
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
 
Zuletzt bearbeitet:
Poste mal Code. Die Lösung als Singelton funktioniert sicher.

Code:
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;
 
Hallo,

Du musst _highScore initialisieren. Der Getter muss irgendwie so ausschauen:
C#:
get
{
  if (_highScore == null)
    _highScore = new Highscore();
  
  return _highScore;
}
 
Zuletzt bearbeitet von einem Moderator:
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 :D
 
Zuletzt bearbeitet:
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.
 
Die Klasse ist nicht statisch. Du erzeugst lediglich eine statische Instanz dieser Klasse.
C#:
public class Highscore
{
    public static readonly Highscore Instance = new Highscore(); 
    public int HighScoreValue { get; set; }
}
   
// Verwendung

Highscore.Instance.HighScoreValue = 100;

Gruß
MCoder
 
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.
 
Zurück