1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Minesweeper-App stürzt beim Start ab

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von TDS95, 26.06.2012.

  1. TDS95, 26.06.2012 #1
    TDS95

    TDS95 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    48
    Erhaltene Danke:
    5
    Registriert seit:
    12.01.2012
    Phone:
    Samsung Galaxy Ace
    Hallo,

    ich versuche zurzeit ein kleines Minesweeper-Spiel zu programmieren.
    Doch wenn ich dann versuche die App zu starten stürzt sie direkt mit der Meldung "Leider wurde Minesweeper beendet." ab.

    Könnte sich vielleicht mal jemand meinen Source Code angucken und mir sagen was ich falsch gemacht habe?

    Mein Source Code:
    MinesweeperActivity.java
    Code:
    package com.tds.minesweeper;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    public class MinesweeperActivity extends Activity {
        /** Called when the activity is first created. */
        // @Override
        private boolean bomb[];
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            //single onClickListener
            final Button button1 = (Button) findViewById(R.id.button1);
            button1.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if (bomb[1]) {
                        lost();
                    } else {
                        button1.setBackgroundColor(Color.RED);
                        button1.setText("X");
                    }
                }
            });
            
            final Button button2 = (Button) findViewById(R.id.button2);
            button1.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if (bomb[2]) {
                        lost();
                    } else {
                        button2.setBackgroundColor(Color.RED);
                        button2.setText("X");
                    }
                }
            });
            
            final Button button3 = (Button) findViewById(R.id.button3);
            button1.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if (bomb[3]) {
                        lost();
                    } else {
                        button3.setBackgroundColor(Color.RED);
                        button3.setText("X");
                    }
                }
            });
            
            final Button button4 = (Button) findViewById(R.id.button4);
            button1.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if (bomb[4]) {
                        lost();
                    } else {
                        button4.setBackgroundColor(Color.RED);
                        button1.setText("X");
                    }
                }
            });
            
            final Button button5 = (Button) findViewById(R.id.button5);
            button1.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if (bomb[5]) {
                        lost();
                    } else {
                        button5.setBackgroundColor(Color.RED);
                        button1.setText("X");
                    }
                }
            });
            
            final Button button6 = (Button) findViewById(R.id.button6);
            button1.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if (bomb[6]) {
                        lost();
                    } else {
                        button6.setBackgroundColor(Color.RED);
                        button1.setText("X");
                    }
                }
            });
            
            final Button button7 = (Button) findViewById(R.id.button7);
            button1.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if (bomb[7]) {
                        lost();
                    } else {
                        button7.setBackgroundColor(Color.RED);
                        button1.setText("X");
                    }
                }
            });
            
            final Button button8 = (Button) findViewById(R.id.button8);
            button1.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if (bomb[8]) {
                        lost();
                    } else {
                        button8.setBackgroundColor(Color.RED);
                        button1.setText("X");
                    }
                }
            });
            
            final Button button9 = (Button) findViewById(R.id.button9);
            button1.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if (bomb[9]){
                        lost();
                    } else 
                    {
                        button9.setBackgroundColor(Color.RED);
                        button1.setText("X");
                    }
                }
            });
            
            bomb();
        };
        
        /*public void onStart(Bundle savedInstanceState) {
            super.onStart();
            bomb();
        }*/
        
        public void bomb() {
            int count=0;
            for (int i = 1; i <= 9; i++) {
                if (count<3 && Math.random()>0.5)
                {bomb[i]=true;} else {bomb[i]=false;}
            }
            // for-Schleife Ende
            
        }
        
        private void lost() {
    
             AlertDialog.Builder helpBuilder = new AlertDialog.Builder(this);
             helpBuilder.setTitle("Verloren!");
             helpBuilder.setMessage("Du hast verloren.");
             helpBuilder.setPositiveButton("Ok",
               new DialogInterface.OnClickListener() {
    
                public void onClick(DialogInterface dialog, int which) {
                 // Do nothing but close the dialog
                }
               });
    
             // Remember, create doesn't show the dialog
             AlertDialog helpDialog = helpBuilder.create();
             helpDialog.show();
            }
    }
    
    main.xml
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
    
    
    
    
    
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1.05" >
    
    
    
            <Button
                android:id="@+id/button5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:text="." />
    
            <Button
                android:id="@+id/button2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/button5"
                android:layout_alignLeft="@+id/button5"
                android:text="." />
    
    
    
            <Button
                android:id="@+id/button1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@+id/button2"
                android:layout_toLeftOf="@+id/button2"
                android:text="." />
    
    
    
            <Button
                android:id="@+id/button3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBaseline="@+id/button2"
                android:layout_alignBottom="@+id/button2"
                android:layout_toRightOf="@+id/button5"
                android:text="." />
    
    
            <Button
                android:id="@+id/button4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBaseline="@+id/button5"
                android:layout_alignBottom="@+id/button5"
                android:layout_toLeftOf="@+id/button5"
                android:text="." />
    
    
    
            <Button
                android:id="@+id/button6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/button2"
                android:layout_toRightOf="@+id/button5"
                android:text="." />
    
    
    
            <Button
                android:id="@+id/button7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/button4"
                android:layout_below="@+id/button5"
                android:text="." />
    
    
    
            <Button
                android:id="@+id/button8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/button5"
                android:layout_below="@+id/button5"
                android:text="." />
    
    
            <Button
                android:id="@+id/button9"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/button6"
                android:layout_below="@+id/button6"
                android:text="." />
    
        </RelativeLayout>
    
    </LinearLayout>
    
    Vielen Dank im Vorraus
     
  2. Shelly22, 26.06.2012 #2
    Shelly22

    Shelly22 Android-Hilfe.de Mitglied

    Beiträge:
    133
    Erhaltene Danke:
    0
    Registriert seit:
    02.06.2012
    Eclipse gibt dir auch fehlermeldungen :)

    Die wären gut.


    LG
     
  3. TDS95, 26.06.2012 #3
    TDS95

    TDS95 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    48
    Erhaltene Danke:
    5
    Registriert seit:
    12.01.2012
    Phone:
    Samsung Galaxy Ace
    In der MinesweeperActivity.java zeigt mir Eclipse überhaupt keine Fehler an.
    In der main.xml sagt Eclipse nur das ich @string/ statt einem festen String verwenden soll.

    Lg
     
  4. snowman2, 26.06.2012 #4
    snowman2

    snowman2 Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    Ist die Activity im Manifest eingetragen?

    Ansonsten sollte dir Logcat schon eine Fehlermeldung zeigen oder lass die App mal im Debugger step-by-step laufen.
     
  5. Shelly22, 26.06.2012 #5
    Shelly22

    Shelly22 Android-Hilfe.de Mitglied

    Beiträge:
    133
    Erhaltene Danke:
    0
    Registriert seit:
    02.06.2012
    Dann mach das auch mal und ich würde deine Buttons nicht in der onCreate drin behalten.

    Mach deine Buttons zu einer Methode.

    Z.B dein erster:

    Code:
    
    private void ButtonListener() {
            Button button1 = (Button) findViewById(R.id.button1);
            button1.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if (bomb[1]) {
                        lost();
                    } else {
                        button1.setBackgroundColor(Color.RED);
                        button1.setText("X");
                    }
                }
            });
    
    }
    
    
    und dann einfach in den onCreate bereich ButtonListener();
    usw....



    LG
     
    Zuletzt bearbeitet: 26.06.2012
  6. steerben, 26.06.2012 #6
    steerben

    steerben Erfahrener Benutzer

    Beiträge:
    247
    Erhaltene Danke:
    33
    Registriert seit:
    27.04.2011
    Mal ne Frage warum setzt du die ClickListener alle für den button1? Copy&Paste?

    Ändere das mal und schau obs an dem liegt. Evtl. hauts ihn da bei der Initialisierung durcheinander.
    Muss aber sagen, dass ich noch nie ne Android App gemacht hab, also keine Ahnung ;)

    Ps: Du startest zweimal bomb(). Relativ sinnlos, mh?
     
    Zuletzt bearbeitet: 26.06.2012
  7. Shelly22, 26.06.2012 #7
    Shelly22

    Shelly22 Android-Hilfe.de Mitglied

    Beiträge:
    133
    Erhaltene Danke:
    0
    Registriert seit:
    02.06.2012

    Stimmt ist mir eben auch nicht aufgefallen :D Das sollte er aufjedefall ändern.



    LG
     
  8. TDS95, 26.06.2012 #8
    TDS95

    TDS95 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    48
    Erhaltene Danke:
    5
    Registriert seit:
    12.01.2012
    Phone:
    Samsung Galaxy Ace
    Activity ist im Manifest eingetragen.
    Logcat:
    Werde ich machen.

    Jetzt wo du's sagt.
    Werde ich auch ändern.

    Lg
     
  9. neandertaler19, 26.06.2012 #9
    neandertaler19

    neandertaler19 Ehrenmitglied

    Beiträge:
    10,343
    Erhaltene Danke:
    1,927
    Registriert seit:
    28.01.2011
    Zu spät, die Logcat ist schon da ;)

    Der ursprüngliche Beitrag von 23:17 Uhr wurde um 23:19 Uhr ergänzt:

    Irgendwas hat er mit deiner Bombe. Warum fängst du mit i bei 1 an und nicht bei 0?
     
  10. Shelly22, 26.06.2012 #10
    Shelly22

    Shelly22 Android-Hilfe.de Mitglied

    Beiträge:
    133
    Erhaltene Danke:
    0
    Registriert seit:
    02.06.2012
    ;)

    @TDS95 Berichte dann bitte ob alles geht oder nicht, wenn du alles geändert hast :)


    LG
     
  11. steerben, 26.06.2012 #11
    steerben

    steerben Erfahrener Benutzer

    Beiträge:
    247
    Erhaltene Danke:
    33
    Registriert seit:
    27.04.2011
    Initialisierst du den bomb-Array eigentlich mal? Seh nur, dass du drauf zugreifst und reinschreibst und wie neandertaler schon sagt fängst du nicht bei 0 an, sondern bei 1. Das ist aber in dem Fall eh egal, weil du nirgendwo die Größe des Arrays festlegst, oder?
    Und da zeigt Eclipse keinen Fehler?

    edit:


    zusätzlich änderst du nie deinen count?
    den musst du schon inkrementieren, wenn du höchstens 3 bomben haben willst.
    also nochmal:



    außerdem würd ich nicht
    boolean bomb[] sondern
    boolean[] bomb schreiben

    edit2: im logcat siehst du ne NullPointerException. Was sagt uns das? Du greifst auf ein Objekt zu, welches nicht initialisiert wurde.

    edit3: @shelly22: ob die buttons jetzt in ne extra methode reingeschoben werden oder nicht spielt wohl keine bedeutung. klar, wenn man ein großes programm hat und mehrere teile in der oncreate methode hat. aber hier einfach den kompletten onCreate teil nehmen und in ne andere methode auslagern macht imho keinen sinn.
     
    Zuletzt bearbeitet: 26.06.2012
  12. TDS95, 27.06.2012 #12
    TDS95

    TDS95 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    48
    Erhaltene Danke:
    5
    Registriert seit:
    12.01.2012
    Phone:
    Samsung Galaxy Ace
    Den bomb-Array initialisiere ich vor der onCreate()-Methode:
    Code:
    public class MinesweeperActivity extends Activity {
        /** Called when the activity is first created. */
        // @Override
        [COLOR=Red]private boolean bomb[];[/COLOR]
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
    
    Und ich sehe gerade das es eigentlich so aussehen müsste, oder?
    Code:
    private bomb = new boolean[];
    
    Da hast du recht, ist mir gar nicht aufgefallen.

    Macht doch keinen Unterschied oder?

    Ich werde aus dem Logcat nicht ganz schlau,
    an den rot markierten Stellen sehe ich halt das es eine FATAL EXCEPTION und eine Null Pointer Exception gibt, ich kann da aber nicht raus lesen wo genau im Code, müsste da nicht eigentlich eine Zeilenangabe stehen?
    Code:
    06-26 23:08:18.539: D/AndroidRuntime(31594): Shutting down VM
    [COLOR=Red]06-26 23:08:18.539: W/dalvikvm(31594): threadid=1: thread exiting with uncaught exception (group=0x40a221f8)[/COLOR]
    [COLOR=Red]06-26 23:08:18.579: E/AndroidRuntime(31594): FATAL EXCEPTION: main[/COLOR]
    06-26 23:08:18.579: E/AndroidRuntime(31594): [COLOR=Red]java.lang.RuntimeException:  Unable to start activity  ComponentInfo{com.tds.minesweeper/com.tds.minesweeper.MinesweeperActivity}:  java.lang.NullPointerException[/COLOR]
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at android.app.ActivityThread.performLaunchActivity(A  ctivityThread.java:2079)
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at android.app.ActivityThread.handleLaunchActivity(Ac  tivityThread.java:2104)
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at android.app.ActivityThread.access$600(ActivityThre  ad.java:132)
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at android.app.ActivityThread$H.handleMessage(Activit  yThread.java:1157)
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at android.os.Handler.dispatchMessage(Handler.java:99  )
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at android.os.Looper.loop(Looper.java:137)
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at android.app.ActivityThread.main(ActivityThread.jav  a:4575)
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at java.lang.reflect.Method.invokeNative(Native Method)
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at java.lang.reflect.Method.invoke(Method.java:511)
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at  com.android.internal.os.ZygoteInit$MethodAndArgsCa   ller.run(ZygoteInit.java:789)
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at com.android.internal.os.ZygoteInit.main(ZygoteInit  .java:556)
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at dalvik.system.NativeStart.main(Native Method)
    [COLOR=Red]06-26 23:08:18.579: E/AndroidRuntime(31594): Caused by: java.lang.NullPointerException[/COLOR]
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at com.tds.minesweeper.MinesweeperActivity.bomb(Mines  weeperActivity.java:141)
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at  com.tds.minesweeper.MinesweeperActivity.onCreate(M   inesweeperActivity.java:129)
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at android.app.Activity.performCreate(Activity.java:4  465)
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at  android.app.Instrumentation.callActivityOnCreate(I   nstrumentation.java:1049)
    06-26 23:08:18.579: E/AndroidRuntime(31594):     at android.app.ActivityThread.performLaunchActivity(A  ctivityThread.java:2033)
    06-26 23:08:18.579: E/AndroidRuntime(31594):     ... 11 more
    06-26 23:08:26.739: I/Process(31594): Sending signal. PID: 31594 SIG: 9                      
    
     
  13. steerben, 27.06.2012 #13
    steerben

    steerben Erfahrener Benutzer

    Beiträge:
    247
    Erhaltene Danke:
    33
    Registriert seit:
    27.04.2011
    Du definierst nur deinen Array, initialisiert ihn aber nicht. Das heißt deine Referenz zeigt auf Null. Ein Array muss immer eine feste, fixe Größe haben. Deswegen musst du ihm bei der Initialisierung auch in den eckigen Klammern eine Größe mitgeben.

    Deswegen würde ich das ganze auch
    boolean[] bomb
    schreiben um gleich zu sehen, dass es sich hierbei um ein Array vom Typ boolean handelt. So ist das ganze meiner Meinung nach übersichtlicher und leichter nachvollziehbar auch wenn man es anders schreiben kann.

    Du kannst deinen Array natürlich auch gleich in der Zeile initialisieren wo du ihn definierst, aber wie gesagt, du musst die Größe mit angeben.

    boolean[] bomb = new boolean[9];

    Gesendet von meinem GT-I9100 mit Tapatalk 2
     
  14. neandertaler19, 27.06.2012 #14
    neandertaler19

    neandertaler19 Ehrenmitglied

    Beiträge:
    10,343
    Erhaltene Danke:
    1,927
    Registriert seit:
    28.01.2011
    Wobei das dann boolean[8] wäre und du von 0 anfängst und bei 8 aufhörst.
     
  15. steerben, 27.06.2012 #15
    steerben

    steerben Erfahrener Benutzer

    Beiträge:
    247
    Erhaltene Danke:
    33
    Registriert seit:
    27.04.2011
    Nein. Ein Array der Größe 9 hat die Indices 0 bis 8.

    Gesendet von meinem GT-I9100 mit Tapatalk 2
     
  16. neandertaler19, 27.06.2012 #16
    neandertaler19

    neandertaler19 Ehrenmitglied

    Beiträge:
    10,343
    Erhaltene Danke:
    1,927
    Registriert seit:
    28.01.2011
    Achso, ja upps, stimmt, verwechsel das immer. Aber du musst bei deinen Schleifen auf jeden Fall bei 0 anfangen und nicht bei 1.
     
  17. steerben, 27.06.2012 #17
    steerben

    steerben Erfahrener Benutzer

    Beiträge:
    247
    Erhaltene Danke:
    33
    Registriert seit:
    27.04.2011
    Mit meinem Code dürfte es normalerweise funktionieren.

    Gesendet von meinem GT-I9100 mit Tapatalk 2
     
  18. TDS95, 27.06.2012 #18
    TDS95

    TDS95 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    48
    Erhaltene Danke:
    5
    Registriert seit:
    12.01.2012
    Phone:
    Samsung Galaxy Ace
    Nachdem ich jetzt die Änderungen vorgenommen habe startet das Spiel und scheint auch zu funktionieren. Mein Code sieht jetzt so aus (Änderungen rot markiert):
    Code:
    package com.tds.minesweeper;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    public class MinesweeperActivity extends Activity {
        /** Called when the activity is first created. */
        // @Override
        [COLOR=Red]private boolean bomb[] = new boolean[9];[/COLOR]
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            //single onClickListener
            final Button button1 = (Button) findViewById(R.id.button1);
            button1.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if ([COLOR=Red]bomb[0][/COLOR]) {
                        lost();
                    } else {
                        button1.setBackgroundColor(Color.RED);
                        button1.setText("X");
                    }
                }
            });
            
            final Button button2 = (Button) findViewById(R.id.button2);
            button2.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if ([COLOR=Red]bomb[1][/COLOR]) {
                        lost();
                    } else {
                        button2.setBackgroundColor(Color.RED);
                        button2.setText("X");
                    }
                }
            });
            
            final Button button3 = (Button) findViewById(R.id.button3);
            button3.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if ([COLOR=Red]bomb[2][/COLOR]) {
                        lost();
                    } else {
                        button3.setBackgroundColor(Color.RED);
                        button3.setText("X");
                    }
                }
            });
            
            final Button button4 = (Button) findViewById(R.id.button4);
            button4.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if ([COLOR=Red]bomb[3][/COLOR]) {
                        lost();
                    } else {
                        button4.setBackgroundColor(Color.RED);
                        button4.setText("X");
                    }
                }
            });
            
            final Button button5 = (Button) findViewById(R.id.button5);
            button5.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if ([COLOR=Red]bomb[4][/COLOR]) {
                        lost();
                    } else {
                        button5.setBackgroundColor(Color.RED);
                        button5.setText("X");
                    }
                }
            });
            
            final Button button6 = (Button) findViewById(R.id.button6);
            button6.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if ([COLOR=Red]bomb[5][/COLOR]) {
                        lost();
                    } else {
                        button6.setBackgroundColor(Color.RED);
                        button6.setText("X");
                    }
                }
            });
            
            final Button button7 = (Button) findViewById(R.id.button7);
            button7.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if ([COLOR=Red]bomb[6][/COLOR]) {
                        lost();
                    } else {
                        button7.setBackgroundColor(Color.RED);
                        button7.setText("X");
                    }
                }
            });
            
            final Button button8 = (Button) findViewById(R.id.button8);
            button8.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if ([COLOR=Red]bomb[7][/COLOR]) {
                        lost();
                    } else {
                        button8.setBackgroundColor(Color.RED);
                        button8.setText("X");
                    }
                }
            });
            
            final Button button9 = (Button) findViewById(R.id.button9);
            button9.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    if ([COLOR=Red]bomb[8][/COLOR]){
                        lost();
                    } else 
                    {
                        button9.setBackgroundColor(Color.RED);
                        button9.setText("X");
                    }
                }
            });
            
            bomb();
        };
        
        public void bomb() {
            int count=0;
            for (int i = 0; i <= 9; i++) {
                if (count<3 && Math.random()>0.5)
                {bomb[i]=true;[COLOR=Red] i++;[/COLOR]} else {bomb[i]=false;}
            }
            // for-Schleife Ende
            
        }
        
        private void lost() {
    
             AlertDialog.Builder helpBuilder = new AlertDialog.Builder(this);
             helpBuilder.setTitle("Verloren!");
             helpBuilder.setMessage("Du hast verloren.");
             helpBuilder.setPositiveButton("Ok",
               new DialogInterface.OnClickListener() {
    
                public void onClick(DialogInterface dialog, int which) {
                 // Do nothing but close the dialog
                }
               });
    
             // Remember, create doesn't show the dialog
             AlertDialog helpDialog = helpBuilder.create();
             helpDialog.show();
            }
    }
    
    Meine Änderungen:
    - Indices korrigiert
    - Array korrekt instanziiert
    - Coppy & Paste Fehler korrigiert

    Damit wäre das Problem gelöst, jetzt möchte ich allerdings anzeigen wie viele Bomben sich um den Button herum befinden, es soll also angezeigt werden wie viele Button drum herum "true" also Bomben sind.

    Ich könnte jetzt für jeden Button eine einzelne Abfragemethode erstellen wie z.B.:
    Code:
    Button1:
    
    if(button[1]) {
          b++;
    } else if(button[3]) {
          b++;
    } else if(button[4]) {
          b++
    }
    
    Heißt, wenn Button1 gedrückt wird, wird überprüft ob Button2, Button4 und Button5 "true" sind.
    Allerdings wäre das zimelich aufwendig und wenn ich das Feld vergrößere auf sagen wir mal 10x10 Buttons wären das 100 Methoden die ich alle einzeln schreiben müsste. Hat vielleicht jemand eine Idee wie ich das einfacher hinkriegen könnte?

    Lg und vielen Dank im Vorraus
     
  19. strider, 27.06.2012 #19
    strider

    strider Erfahrener Benutzer

    Beiträge:
    208
    Erhaltene Danke:
    45
    Registriert seit:
    30.09.2011
    Phone:
    Nexus S
    Ich denke du solltest deinen Ansatz mit den Buttons überdenken selbst bei einem relativ kleinen Spielfeld mit 10x10 Feldern kommst du auf 100 Buttons. Du kannst die Buttons auf einem Canvas zeichnen statt die GUI Buttons zu nehmen, der 'Button' der gedrückt werden soll ermittelst du über einen touch event. Zum speichern der Bombenposition nimmst du ein boolean Array. Das durchläufst du jedesmal wenn ein Feld angeklickt wird und zählst die benachbarten Bomben.
     
  20. steerben, 28.06.2012 #20
    steerben

    steerben Erfahrener Benutzer

    Beiträge:
    247
    Erhaltene Danke:
    33
    Registriert seit:
    27.04.2011
    Code:
        public void bomb() {
            int count=0;
            for (int i = 0; i <= 9; i++) {
                if (count<3 && Math.random()>0.5)
                {bomb[i]=true; i++;} else {bomb[i]=false;}
            }
            // for-Schleife Ende
            
        }
    warum i++; in den eckigen klammern und nicht count++; wie ich es geschrieben hab? Überleg mal was du da machst.

    funktionieren tut das ganze insofern (also überall steht dann entweder true oder false drin), da die einzelnen boolean werte im array nach der initalisierung ohnehin alle standardmäßig auf true oder false (weiß ich jetzt grad nicht) gesetzt werden.


    generell ist dein ansatz das spiel zu erstellen für den anfang schon ok, aber du siehst halt, dass du schnell probleme hast, wenn du nicht gewisse sachen so machst wie sie strider vorschlägt.
    alle sachen von hand selbst setzen ist halt sehr umständlich.
     

Diese Seite empfehlen