2017-04-12 54 views
0

我知道,它的代碼很多。但它易於閱讀且易於理解。我的問題是,該應用程序不啓動spielernamen();在遊戲中();方法,我不知道爲什麼。它是一個簡單的遊戲。 我也不明白爲什麼起初的方法rundenanzahl();叫做。不應該是variante(); ? 非常感謝你們的幫助。Android應用程序無法啓動方法()

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; 
    } 

} 
+2

請習慣用英文寫你的代碼。對於您和您的未來合作伙伴來說,瞭解編寫的代碼將會好很多 – Malik

+0

您是否試圖調試代碼? – Juanca

+1

點擊neuesSpiel按鈕時,會提示下面的方法:variante(); spieleranzahl(); rundenanzahl(); spielernamen();在遊戲中();。只需在每個方法的開始處寫入日誌(Log.i(「Tag」,「methedName called」),您就會看到它。在該方法中創建的每個對話框覆蓋了上一個方法創建的其他對話框。 – Sergey

回答

1

我認爲,你的問題是對話不以同步方式顯示。嘗試添加之前onClick()方法中的特定方法。

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

ingame()方法實際上是調用,但是在之前所描述的問題的原因,該Runden變量(非常不好的做法,開始vaiable用大寫字母)在您輸入while循環時仍然爲0。因此,循環永遠不會得到excecutet。

+0

這是一個好主意,但是你知道爲什麼ingame()不能啓動嗎? – Georq

+0

@Georq編輯了我的答案。 – Malik