Laufzeitfehler bei Mückenfang Spiel

  • 2 Antworten
  • Letztes Antwortdatum
Status
Für weitere Antworten geschlossen.
N

nilsV

Neues Mitglied
0
Hallo liebe android-hilfe Community,

mit dem Buch "Android Apps Entwickeln" von Uwe Post wage ich gerade meine ersten Schritte in die spannende Welt der App-Entwicklung.

Leider hat sich beim nachvollziehen der Übungsapp "Mueckenfang" ein Fehler eingeschlichen, der erst zur Laufzeit auftritt und außer der Meldung "Mueckenfang angehalten" keinen Hinweis liefert, was ich falsch gemacht habe.

Die App besteht aus zwei Activity's, in der ersten (MueckenfangActivity) befindet sich ein Button mit dem die zweite Activity (GameActivity) gestartet wird, in der das Spiel abläuft.

Wenn ich die App starte, wird die MueckenfangActivity geladen. Wenn ich den Button drücke, stürzt die App ab.

Quelltext der GameActivity:
Code:
package*de.androidnewcomer.mueckenfang2;

import*java.util.Date;
import*java.util.Random;

import*android.app.Activity;
import*android.app.Dialog;
import*android.os.Bundle;
import*android.os.Handler;
import*android.view.Gravity;
import*android.view.View;
import*android.view.View.OnClickListener;
import*android.view.ViewGroup.LayoutParams;
import*android.widget.FrameLayout;
import*android.widget.ImageView;
//import*android.widget.LinearLayout;
import*android.widget.TextView;

public*class*GameActivity*extends*Activity*implements*Runnable,*OnClickListener*{

****private*static*final*long*HOECHSTALTER_MS*=*2000;
****//private*static*final*int*INTERVALL*=*100;
****private*static*final*int*ZEITSCHEIBEN*=*600;
****private*Random*zufallsgenerator*=*new*Random();
	***private*Handler*handler*=*new*Handler();
	***private*FrameLayout*spielbereich;
	***private*int*runde;
****private*int*punkte;
****//private*boolean*spielLaeuft;
	***private*int*muecken;
	***private*int*treffer;
	***private*int*zeit;
****private*float*massstab;

****/***Called*when*the*activity*is*first*created.**/
****@Override
****public*void*onCreate(Bundle*savedInstanceState)*{
********super.onCreate(savedInstanceState);
********setContentView(R.layout.game);
********spielbereich*=*(FrameLayout)*findViewById(R.id.spielbereich);
********massstab*=*getResources().getDisplayMetrics().density;
********spielStarten();
****}
****@Override
****public*void*onClick(View*muecke)*{
********treffer++;
********punkte*+=*100;
********bildschirmAktualisieren();
********spielbereich.removeView(muecke);
****}
****
****@Override
****public*void*run()*{
********zeitHerunterzaelen();
****}

****private*void*spielStarten()*{
********//spielLaeuft*=*true;
********runde*=*0;
********punkte*=*0;
********starteRunde();
****}

****private*void*starteRunde()*{
********runde*=*runde*+*1;
********muecken*=*runde***10;
********treffer*=*0;
********zeit*=*60;
********bildschirmAktualisieren();
********handler.postDelayed(this,*1000);
****}

****private*void*bildschirmAktualisieren()*{
********TextView*tvPunkte*=*(TextView)findViewById(R.id.points);
********tvPunkte.setText(*Integer.toString(punkte)*);
********TextView*tvRunde*=*(TextView)findViewById(R.id.round);
********tvRunde.setText(*Integer.toString(runde)*);
********TextView*tvTreffer*=*(TextView)findViewById(R.id.hits);
********tvTreffer.setText(*Integer.toString(treffer)*);
********TextView*tvZeit*=*(TextView)findViewById(R.id.time);
********tvZeit.setText(*Integer.toString(zeit)*);
********FrameLayout*flTreffer*=*(FrameLayout)findViewById(R.id.bar_hits);
********FrameLayout*flZeit*=*(FrameLayout)findViewById(R.id.bar_time);
********LayoutParams*lpTreffer*=*flTreffer.getLayoutParams();
********lpTreffer.width*=*Math.round(*massstab***300***Math.min(treffer,*muecken)*/*muecken*);
********LayoutParams*lpZeit*=*flZeit.getLayoutParams();
********lpZeit.width*=*Math.round(massstab***zeit***300*/*60);
****}
****
****private*void*zeitHerunterzaelen()*{
********zeit*=*zeit*-*1;
********float*zufallszahl*=*zufallsgenerator.nextFloat();
********double*wahrscheinlichkeit*=*muecken***1.5*/*ZEITSCHEIBEN;
********if(wahrscheinlichkeit*>*1)*{
************eineMueckeAnzeigen();
************if(zufallszahl*<*wahrscheinlichkeit*-*1)*{
****************eineMueckeAnzeigen();
************}
********}*else*{
************if(zufallszahl*<*wahrscheinlichkeit)*{
****************eineMueckeAnzeigen();
************}
********}
********mueckenVerschwinden();
********bildschirmAktualisieren();
********if(*!pruefeSpielende()*)*{
************if(*!pruefeRundenende()*)*{
****************handler.postDelayed(this,*1000);
************}
********}
****}
****
****private*boolean*pruefeSpielende()*{
********if(zeit*==*0*&&*treffer*<*muecken)*{
************gameOver();
************return*true;
********}
********return*false;
****}
****private*boolean*pruefeRundenende()*{
********if(zeit*==*0)*{
************starteRunde();
************return*true;
********}
********return*false;
****}
****private*void*eineMueckeAnzeigen()*{
********int*breite*=*spielbereich.getWidth();
********int*hoehe*=*spielbereich.getHeight();
********int*muecke_breite*=*(int)*Math.round(massstab***50);
********int*muecke_hoehe*=*(int)*Math.round(massstab***42);
********int*links*=*zufallsgenerator.nextInt(breite*-*muecke_breite);
********int*oben*=*zufallsgenerator.nextInt(hoehe*-*muecke_hoehe);
********ImageView*muecke*=*new*ImageView(this);
********muecke.setImageResource(R.drawable.muecke);
********muecke.setOnClickListener(this);
********FrameLayout.LayoutParams*params*=*new*FrameLayout.LayoutParams(muecke_breite,*muecke_hoehe);
********params.leftMargin*=*links;
********params.topMargin*=*oben;
********params.gravity*=*Gravity.TOP*+*Gravity.LEFT;
********spielbereich.addView(muecke,*params);
********muecke.setTag(*R.id.geburtsdatum,*new*Date()*);
****}
****
****private*void*mueckenVerschwinden()*{
********int*nummer*=*0;
********while(*nummer*<*spielbereich.getChildCount()*)*{
************ImageView*muecke*=*(ImageView)spielbereich.getChildAt(nummer);
************Date*geburtsdatum*=*(Date)muecke.getTag(R.id.geburtsdatum);
************long*alter*=*(*new*Date()*).getTime()*-*geburtsdatum.getTime();
************if(alter*>*HOECHSTALTER_MS)*{
****************spielbereich.removeView(muecke);
************}*else*{
****************nummer++;
************}
********}
****}

****private*void*gameOver()*{
********Dialog*dialog*=*new*Dialog(this,*android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);********
********dialog.setContentView(R.layout.gameover);
********dialog.show();
****}

}

Für den Fall das der Fehler nicht in der GameActivity steckt, hier der Projektordner als ZIP-Archiv:
https://www.dropbox.com/s/4pzcghm83k5yd37/mueckenfang.zip

Ich würde mich sehr freuen, wenn mir Jemand sagen kann was ich falsch gemacht habe.

EDIT:
Habe den Quelltext aus einem Texteditor kopiert, hat jemand eine Ahnung warum hier für jedes Leerzeichen ein Stern angezeigt wird und wie ich die wieder weg kriege?

Gruß

nilsV
 
Zuletzt bearbeitet:
Den Fehler wirst du höchstwahrscheinlich nur über den Stacktrace finden. Wenn du Eclipse benutzt, öffne die DDMS Perpektive und schau dir das Logcat Fenster an.
 
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

koje71
Antworten
0
Aufrufe
370
koje71
koje71
E
Antworten
0
Aufrufe
1.101
ey6799
E
numanoid
Antworten
6
Aufrufe
1.818
numanoid
numanoid
Zurück
Oben Unten