我知道,它的代码很多。但它易于阅读和易于理解。我的问题是应用程序没有启动spielernamen();在游戏中();方法,我不明白为什么。这是一个简单的游戏。 我也不明白为什么起初方法rundenanzahl();叫做。不应该是variante(); ? 非常感谢你的帮助。
package silverbeach.wuerfelspiel;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button spielregeln;
Button neuesSpiel;
Button beenden;
Button wuerfel;
TextView regeln;
int Runden;
int Variante;
int aktSpieler;
int Spieleranzahl;
Spieler[] Spielerdaten;
EditText input;
EditText input2;
TextView textviewUP;
TextView textviewDOWN;
TextView textviewMID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spielregeln = (Button) findViewById(R.id.button_regeln);
neuesSpiel = (Button) findViewById(R.id.button_neuesSpiel);
beenden = (Button) findViewById(R.id.button_beenden);
wuerfel = (Button) findViewById(R.id.button4);
regeln = (TextView) findViewById(R.id.textView2);
textviewUP = (TextView) findViewById(R.id.textView3);
textviewDOWN = (TextView) findViewById(R.id.textView4);
textviewMID = (TextView) findViewById(R.id.textView5);
neuesSpiel.setVisibility(View.VISIBLE);
spielregeln.setVisibility(View.VISIBLE);
beenden.setVisibility(View.VISIBLE);
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
// input.setInputType(InputType.TYPE_CLASS_NUMBER);
spielregeln.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
builder.setTitle("Spielregeln");
builder.setMessage("Variante 1: Alle Augen werden gewertet\n" +
"Variante 2: Nur gerade Augen werden gewertet\n" +
"Variante 3: Wie Variante 1, aber bei der Augenzahl '1' wird die Gesamtsumme zurückgesetzt\n\n" +
"Nach Eingabe der Spieleranzahl (max. 8) und Spielernamen beginnt die Partie.\n" +
"Es wird so oft gewürfelt, wie Spielrunden(max. 16) angegeben wurden.\n" +
"Sind die Würfelrunden vorbei, wird die Augensumme für jeden Spieler festgestellt und ein Sieger ausgewertet."
);
builder.setPositiveButton("Verstanden, los geht's!", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
final AlertDialog ad = builder.create();
ad.show();
}
});
neuesSpiel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
neuesSpiel.setVisibility(View.INVISIBLE);
spielregeln.setVisibility(View.INVISIBLE);
beenden.setVisibility(View.INVISIBLE);
variante();
spieleranzahl();
rundenanzahl();
spielernamen();
ingame();
}
});}
public int wuerfeln() {
int zahl = (int) ((Math.random()) * 6 + 1);
return zahl;
}
public void variante() {
// Spieler sieger = new Spieler();
//Variante eingeben
AlertDialog.Builder builder_variante = new AlertDialog.Builder(this);
builder_variante.setTitle("Variante auswählen");
builder_variante.setMessage("Bitte geben Sie die gewünschte Variantennummer an.");
input = new EditText(this);
builder_variante.setView(input);
//POSITIVE
builder_variante.setPositiveButton("Bestätigen", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int var = Integer.parseInt(input.getText().toString());
setVariante(var);
}
});
AlertDialog ad_variante = builder_variante.create();
ad_variante.show();}
public void spieleranzahl() {
//Spieleranzahl eingeben
AlertDialog.Builder builder_spieleranzahl = new AlertDialog.Builder(this);
builder_spieleranzahl.setTitle("Turniergröße");
builder_spieleranzahl.setMessage("Wie biele Spieler wollen gegeneinander antreten?");
input = new EditText(this);
builder_spieleranzahl.setView(input);
//POSITIVE
builder_spieleranzahl.setPositiveButton("Bestätigen", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int sp = Integer.parseInt(input.getText().toString());
setSpieleranzahl(sp);
}
});
AlertDialog ad_spieleranzahl = builder_spieleranzahl.create();
ad_spieleranzahl.show();
}
public void rundenanzahl() {
//Rundenanzahl - max.8
AlertDialog.Builder builder_rundenanzahl = new AlertDialog.Builder(this);
builder_rundenanzahl.setTitle("Rundenanzahl");
builder_rundenanzahl.setMessage("Wie viele Durchläufe wollen sie spielen?");
input = new EditText(this);
builder_rundenanzahl.setView(input);
//POSITIVE
builder_rundenanzahl.setPositiveButton("Bestätigen", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int rnd = Integer.parseInt(input.getText().toString());
setRunden(rnd);
}
});
AlertDialog ad_rundenanzahl = builder_rundenanzahl.create();
ad_rundenanzahl.show();
}
public void spielernamen(){
//Spielernamen eingeben
Spielerdaten = new Spieler[Spieleranzahl];
for (int i = 0; i < Spieleranzahl; i++) {
final Spieler spieler = new Spieler();
AlertDialog.Builder builder_spielernamen = new AlertDialog.Builder(this);
builder_spielernamen.setTitle(("Spieler: " + (i + 1)));
builder_spielernamen.setMessage("Bitte geben Sie ihren Namen ein um fortzufahren.");
input2 = new EditText(this);
builder_spielernamen.setView(input2);
//POSITIVE
builder_spielernamen.setPositiveButton("Bestätigen", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String name;
name = input2.getText().toString();
Toast.makeText(getApplicationContext(), name, Toast.LENGTH_SHORT).show();
spieler.setName(name);
}
});
builder_spielernamen.show();
Spielerdaten[i] = spieler;
}}
public void ingame(){
int aktRunde = 0;
//buffer, damit nicht direkt nächste eingabe ausgeführt wird
// in.nextLine();
while (aktRunde < Runden) {
for (aktSpieler = 0; aktSpieler < Spieleranzahl; aktSpieler++) {
textviewUP.setText((aktRunde + 1) + " - " + Spielerdaten[aktSpieler].getName() + " ist am Zug");
textviewDOWN.setText("Drücke EINGABETASTE um zu würfeln!");
wuerfel.setVisibility(View.VISIBLE);
wuerfel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int augen;
augen = wuerfeln();
textviewDOWN.setText("gewürfelte Augen: " + augen + "\n");
switch (Variante) {
//einfache additiond er augen
case 1: {
Spielerdaten[aktSpieler].addAugen(augen);
}
break;
case 2: {
if (augen % 2 == 0) Spielerdaten[aktSpieler].addAugen(augen);
else System.out.println("\t->Leider keine gerade Zahl :(\n");
}
break;
case 3: {
if (augen == 1) {
textviewDOWN.setText("Oh nein, die böse 1 - alle Punkte werden gelöscht");
Spielerdaten[aktSpieler].resetSumme();
} else Spielerdaten[aktSpieler].addAugen(augen);
}
break;
}
}});
aktRunde++;
}
textviewUP.setText("AUSWERTUNG:");
Spieler sieger = new Spieler();
for (aktSpieler = 0; aktSpieler < Spieleranzahl; aktSpieler++) {
textviewMID.setText(Spielerdaten[aktSpieler].getName() + " - " + Spielerdaten[aktSpieler].getSumme());
//wenn nachfolgender Spieler höheren Score hat, dann ist er temporärer Sieger
if (aktSpieler == 0) sieger = Spielerdaten[0];
else if (Spielerdaten[aktSpieler - 1].getSumme() < Spielerdaten[aktSpieler].getSumme())
sieger = Spielerdaten[aktSpieler];
}
textviewDOWN.setText("Damit ist " + sieger.getName() + " Sieger mit " + sieger.getSumme() + " Punkten");
}}
public int getRunden() {
return Runden;
}
public void setRunden(int runden) {
Runden = runden;
}
public int getVariante() {
return Variante;
}
public void setVariante(int variante) {
Variante = variante;
}
public int getAktSpieler() {
return aktSpieler;
}
public void setAktSpieler(int aktSpieler) {
this.aktSpieler = aktSpieler;
}
public int getSpieleranzahl() {
return Spieleranzahl;
}
public void setSpieleranzahl(int spieleranzahl) {
Spieleranzahl = spieleranzahl;
}
public Spieler[] getSpielderdaten() {
return this.Spielerdaten;
}
public void setSpielderdaten(Spieler[] spielderdaten) {
this.Spielerdaten = spielderdaten;
}
}
答案 0 :(得分:0)
我认为,您的问题是对话框没有以同步方式显示。尝试在之前的onClick()
方法中添加特定方法。
所以spieleranzahl();
应该进入onClick()
的{{1}},variante();
中的rundenanzahl();
等。
实际上调用了spieleranzahl();
方法,但是由于前面描述的问题,当你进入while循环时,Runden变量(用大写字母启动变量的非常糟糕的做法)仍为0。因此,循环永远不会超越。