[6] Der temporäre Highscore

Hey there.
Wie geht es dir? Gut? Hehe. Bei dem Wetter auch keine Wunder!
Ich hab ja gesagt ich werde mich mal an eine Art Highscore wagen.
Erst mal war ich total überwältigt von der Aufgabe… Aber am Ende hab ich es dann doch irgendwie geschafft.
Jetzt erzähle ich dir wie ich einen temporären Highscore in die App eingebaut habe.

download

Ein temporärer Highscore:
„Marvin was meinst du damit?“
Ein temporärer Highscore ist quasi ein Highscore der nur, wie der Name schon sagt, temporär besteht.
Also nicht für immer. Was meine ich damit genau?
Wenn ein User meinen Channel verlässt wird sein Highscore nicht mehr gespeichert. Auch wenn die App abstürzt oder neu gestartet wird ist der Highscore nicht gespeichert.

Was nützt mir das dann?
Eine gute Frage. Ich habe erst auch nicht daran geglaubt. Bis einige von euch mich überzeugt hatten.
Mit einem temporären Highscore hat jeder User die Chance mal auf Platz 1 der Rangliste zu stehen. Aber eben nur bis er den Channel verlässt.
Ich hab mir das Ganze so vorgestellt: Der temporäre Highscore ist vergleichbar mit der Rangliste bei einem Formel1 Rennen. Jeder Fahrer, egal ob er auf die gesamte Saison betrachtet gut oder schlecht ist, kann bei einem einzelnen Rennen auf Platz 1 stehen.
Selbst wenn er bisher jedes Rennen verloren hat, ist es möglich, dass er beim nächsten Rennen auf Platz 1 fährt und gewinnt.
Dann wenn das Rennen mal vorbei ist zählt nur noch die Saisonrangliste.
Die baue ich jetzt aber nicht ein.

Wie speichert man Daten temporär?
Ich habe herausgefunden, dass das sehr gut mit JavaScript Objekten geht.
In die kann man nämlich über einen Key Daten ablegen.
Was ist ein Key?
Ich stelle mir dazu immer ein Telefonbuch vor. Im Telefonbuch sind unter verschiedenen Telefonnummern Namen und Adressen abgespeichert stimmt’s? In einem Telefonbuch gibt es jede Nummer nur ein Mal. Dafür kann es aber einen Namen mehrmals geben. Allein in Berlin gibt es zum Beispiel 10 Alexander Müller. Ihr könnt euch aber sicher sein, dass jeder Alexander Müller seine eigene Telefonnummer hat.
Hier wäre jetzt die Telefonnummer der Key.

// Das hier ist das Objekt in dem wir Daten temporär speichern, das Telefonbuch also.
var tempScore = {};

Was könnte in Knuddels ein Key sein?
Man hat mir gesagt, dass in Knuddels jeder User seine eigene Id besitzt.
Also gibt es jede Id nur ein Mal.
Cool! Genau danach habe ich gesucht.

// So speichert man Daten in einem Objekt
function setUpTempScore(user)
{
tempScore[user.getUserId()] = 0;
}

Wie löscht man die Daten wieder?
Dazu hat jedes Objekt zum Glück auch seine eigene Funktion namens, ihr ahnt es schon, delete.

// So löscht man Daten aus einem Objekt
function deleteTempScore(user)
{
tempScore.delete[user.getUserId()];
}

Das war es auch schon fast. In setUpTempScore(user) erzeuge ich quasi den Telefonbucheintrag und setze als Wert eine 0.
In deleteTempScore(user) lösche ich den gesamten Telefonbucheintrag.

Wie ändert man einen Eintrag?

// So ändert man Daten in einem Objekt
function addTempScore(user, amount)
{
tempScore[user.getUserId()] = tempScore[user.getUserId()] + amount;
}

Man addiert also auf den alten Eintrag einfach eine neue Zahl. Hier ist die neue Zahl amount.
Cool oder? Jetzt muss man die Funktionen nur noch zur richtigen Zeit aufrufen.

Wenn ein User den Channel betritt,
rufe ich setUpTempScore(user) auf.
Jetzt da der User im Channel ist kriegt er auch seinen eigenen Telefonbucheintrag.

App.onUserJoined = function(user)
{
setUpTempScore(user);
};

Wenn ein User den Channel verläst,
rufe ich deleteTempScore(user) auf.
Das Rennen ist quasi vorbei. Ich brauche den Score des Users nicht mehr speichern. Also lösche ich den Eintrag einfach komplett.

App.onUserLeft = function(user)
{
deleteTempScore(user);
};

Wenn ein User eine Frage richtig beantwortet,
rufe ich addTempScore(user, amount) auf.
Der User hat eine Frage richtig beantwortet. Deswegen erhöhe ich seinen aktuellen Score.

App.onPublicMessage = function(message)
{
var messageText = message.getText();
if(messageText.indexOf(solution)>-1)
{
addTempScore(message.getAuthor(), 1);
}
else
{
}
};

Super! Das klappt 🙂
Blöd nur, dass der User seinen eigenen Highscore noch nicht sehen kann.
Aber das sollte machbar sein. Denkt ihr auch?

Also geht es im nächsten Blog um die Ausgabe des Highscores.

Bis dann.
Liebe Grüße, MarvinDerPraktikant.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s