- Forum-Beiträge: 18
12.10.2020, 14:10:46 via Website
12.10.2020 14:10:46 via Website
Hey Leute,
benötige einmal wieder Eure Hilfe.
ich bin gerade dabei eine Voting App zu machen. Soweit stimmt auch alles. Es gibt nur zwei Probleme.
Also die App läuft wie folgt ab:
- Es öffnet sich mit dem Startknopf die Frage, der Spieler der dran ist und ein Gridview, mit allen Spielern
- der Startknopf verschwindet mit setVisibility(View.GONE);
und ein neuer Button (Der den nächsten Spieler aufruft) wird eingeblendet.
- Jetzt stimmt der Spieler, der dran ist, ab, für wen er sich entscheidet und drückt auf weiter.
- Der nächste Spieler ist dran und sieht die Auswahl des Spielers zuvor nicht.
Bis hier läuft alles wie es soll, nur kommen jetzt die Probleme.
Sagen wir es spielen 5 Spieler. Spieler 1-4 wählen und die Auswahl der jeweiligen Spieler wird in einem Array gespeichert. Wenn der fünfte Spieler jetzt nach seiner Auswahl auf Weiter druckt, wird seine Auswahl nicht gespeichert. Es sind dann keine 5 Werte im Array, sondern nur 4. Ich habe leider keine Ahnung, an was das liegt. Also der fünfte Spieler wird angezeigt, aber nicht gewertet.
Hier einmal der Code zum Startbutton: Den braucht ihr wahrscheinlich nicht, aber das er Mal dabei ist.
//Button zum Starten und ersten mal anzeigen der Frage
btn_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
nextTat(tatNr);
//ist glaub unwichtig. Hier wird nur der GridView angezeigt
setGridView();
//Es wird die Methode aufgerufen, um den nächsten Spieler anzuzeigen
setPlayer(playerNumber);
playerNumber++;
//Wie beschrieben wird hier der Startbutton durch den Nächste Spieler Button "getauscht"
btn_start.setVisibility(View.GONE);
btn_next.setVisibility(View.VISIBLE);
}
});
Button nächster Spieler:
//Button um nächsten Spieler auswählen zu lassen
btn_next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Hier ist glaub ich der Fehler. Wenn ich <= mache, kommt ein OutofBounds. Ist wahrscheinlich sehr einfach, aber ich komme leider nicht auf die Lösung
if (playerNumber < listPlayerNames.size()) {
//Schaut, ob ein Gridview Eintrag ausgewählt wurde
if (isClicked) {
//Hier wird das Array mit dem neuen Wert befüllt. Das funktioniert soweit ganz gut, auch wenn es vielleicht nicht die beste Lösung ist
vote[getGridViewPosition()] = (vote[getGridViewPosition()]) + 1;
//Es wird die Methode aufgerufen, um den nächsten Spieler anzuzeigen
setPlayer(playerNumber);
playerNumber++;
//Wird wieder zurück gesetzt
isClicked = false;
setGridView();
} else {
Toast.makeText(Votinggame.this, "wähle jemand aus", Toast.LENGTH_SHORT).show();
}
} else {
playerNumber = 0;
//Wenn jeder gewählt hat, geht es wieder von vorne los und der Verlierer wird angezeigt
btn_next.setVisibility(View.GONE);
btn_start.setVisibility(View.VISIBLE);
gridView.setVisibility(View.GONE);
textViewLooser.setVisibility(View.VISIBLE);
showLoser(vote);
}
}
});
Methode, um die erste und nächsten Fragen anzuzeigen
private void nextTat(int tatNr) {
if (tatNr < tatListe.size()) {
currentTat = tatListe.get(this.tatNr);
votingFrage.setText(currentTat.getVotingfrage());
this.tatNr++;
} else {
Toast.makeText(this, "Ende. Alle Fragen wurden gestellt", Toast.LENGTH_SHORT).show();
}
}
Und zu guter Letzt das letzte Problem. Kann zwar den Verlierer anzeigen, aber keine Ahnung, was man tun soll, wenn zwei Spieler die selbe Anzahl an Stimmen haben. Hier mal der Code:
//Methode, um den Verlierer anzuzeigen
private void showLoser(int[] vote) {
//mit kleinstmöglichem Wert initialisieren
int largest = Integer.MIN_VALUE;
//um Loser herauszufinden
int looser = 0;
//größtes Element des Arrays finden
int index = 0;
while( index < vote.length ) {
//prüfen, ob größtes kleiner als Element ist
if( largest < vote[index] ) {
//update largest Wert
largest = vote[index];
looser = index;
}
index++;
}
textViewLooser.setText(listPlayerNames.get(looser) + "\n hat verloren");
}
Sorry, dass der Text jetzt doch so lang geworden ist.
Danke euch schon mal im Voraus!