簡體   English   中英

Android App無法啟動方法()

[英]Android App does not start methods ()

我知道,它的代碼很多。 但是它易於閱讀且易於理解。 我的問題是該應用程序無法啟動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;
    }

}

我認為,您的問題是對話框沒有以同步方式顯示。 嘗試在先前的onClick()方法中添加特定的方法。

所以spieleranzahl(); 應該進入variante();onClick() variante(); rundenanzahl(); spieleranzahl(); 等等

實際上,您的ingame()方法已被調用,但是由於前面所述的問題,當您進入while循環時,Runden變量(以大寫字母開頭的變量是非常不好的做法)仍然為0。 因此循環永遠不會被執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM