Highscore Objekt

  • 6 Antworten
  • Letztes Antwortdatum
C

coolz3ro

Neues Mitglied
0
Hallo!

Ich bin gerade dabei einen Highscore für mein Spiel zu entwickeln. Orientiert habe ich mich dabei an einem Tutorial aus dem Internet, in dem eine Klasse "Highscores" programmiert wurde (siehe unten).

Code:
import android.content.Context;
import android.content.SharedPreferences;

public class Highscores {
private SharedPreferences preferences;
private String names[];
private long score[];

public Highscores(Context context)
{
preferences = context.getSharedPreferences("Highscore", 0);
names = new String[10];
score = new long[10];

for (int x=0; x<10; x++)
{
names[x] = preferences.getString("name"+x, "-");
score[x] = preferences.getLong("score"+x, 0);
}

}

public String getName(int x)
{
//get the name of the x-th position in the Highscore-List
return names[x];
}

public long getScore(int x)
{
//get the score of the x-th position in the Highscore-List
return score[x];
}

public boolean inHighscore(long score)
{
//test, if the score is in the Highscore-List
int position;
for (position=0; position<10&&this.score[position]>score;
position++);

if (position==10) return false;
return true;
}

public boolean addScore(String name, long score)
{
//add the score with the name to the Highscore-List
int position;
for (position=0; position<10&&this.score[position]>score;
position++);

if (position==10) return false;

for (int x=9; x>position; x--)
{
names[x]=names[x-1];
this.score[x]=this.score[x-1];
}

this.names[position] = new String(name);
this.score[position] = score;

SharedPreferences.Editor editor = preferences.edit();
for (int x=0; x<10; x++)
{
editor.putString("name"+x, this.names[x]);
editor.putLong("score"+x, this.score[x]);
}
editor.commit();
return true;

}

}
Soweit ich den Quellcode richtig interpretiert habe, wird mit
Code:
Highscores highscore = new Highscores(this);
ein neues Objekt der Klasse erzeugt. Dieses ist praktisch schon eine komplette Highscore-Liste, die zehn Einträge aufnehmen kann (10 Namen und 10 Punktestände) und nach den Punkteständen sortiert.

Meine Fragen nun:

Ich möchte in einer Activity aus einem Dialog heraus bei Betätigung eines Buttons den Punktestand (int anzahlrichtigerantworten) und den Namen der Person (aus einem EditText heraus gelesen) in einer Highscore-Liste speichern.
Dafür habe ich in der Activity erstmal ein neues Objekt der Klasse Highscores erzeugt mit
Code:
Highscores highscore = new Highscores(this);
In dieses Objekt kann ich Name und Punktestand nun mithilfe von Folgendem speichern:
Code:
EditText editText1 = (EditText) dialog.findViewById (R.id.editText1);
String name = editText1.getText().toString();
highscore.addScore(name, anzahlrichtigerantworten);
FRAGE 1: Wenn ich das tatsächlich so mache: Wird dann nicht jedes Mal, wenn ich ein Spiel beendet habe und den Punktestand speichern will ein neues Objekt highscore erzeugt, das das alte Objekt einfach "überschreibt"? (Weil ich ja "Highscores highscore = new Highscores(this);"immer wieder aufrufe, wenn das Spiel zu ende ist.) Oder wird das alte Objekt dann einfach nur erweitert um den neuen Eintrag und die alten Einträge bleiben auch erhalten?

FRAGE 2: Ich möchte nun natürlich auch die Highscoreliste anzeigen lassen. Dies soll aber in einer anderen Activity passieren. Also nicht in jener Activity, in der ich das Objekt highscore erzeugt habe und die Werte übergeben habe. Wie kann ich das praktisch umsetzen? Ich muss dieses Objekt ja praktisch in der anderen Activity verfügbar machen.

Ich hoffe auf viele Antworten. Vielen Dank!
 
Hallo,
wenn dein Highscore permanent sein soll wirst du nicht umher kommen,
deinen Highscore auch auf die SD(oder sonst wo) zu speichern, und das Highscoreobjekt (beim Starten der Activity) aus diesen Daten zu erzeugen.


Frage2: xyZ.putExtra("key",highscore);

startActivity(xyZ);
 
Er versteht sein kopierten Quelltext doch garnicht.
Schau du ihn dir doch mal an. Da steht was mit SharedPreference ...

Gruß
 
Viele Dnak schonmal für die Antwort. Die Möglichkeit war mir bisher noch nicht bekannt.
Dachte mit SharedPreferences wird das gespeicherte dauerhaft gesichert. Ist doch eigentlich auch dafür gedacht Usereinstellungen zu speichern. Das möchte man ja auch dauerhaft machen.
 
Ja richtig. Wo ist jetzt das dein problem?
 
wie du schon eben fest gestellt hast versteht er seinen eigenen code nicht ... davon mal abgesehen das wenn man in der Forum-suche mal schaut das man das "Problem" hier schon ein paar mal durch gekaut hat ...
 
@IceClaw: Maddi hatte geschrieben:
wenn dein Highscore permanent sein soll wirst du nicht umher kommen,
deinen Highscore auch auf die SD(oder sonst wo) zu speichern...

Dazu habe ich einfach nur gesagt, dass der Highscore schon permanent gespeichert wird ;)

@Madlip: Kannst gerne nen link posten.
 
Zurück
Oben Unten