Hallo,
Ich programmiere noch nicht lange mit Java und ich versuche mir derzeit die Grundkenntnisse in Android anzueignen. Ich versuche im moment ein Spiel auf Grundlage
des Buches "Android-Apps entwickeln" von Galileo Computing nachzubauen.
Jetzt habe ich alles so gemacht wie beschrieben aber ich finde meinen Fehler einfach nicht.
ICh kann die App im Emulator starten und solange keine Mücke kommt funktioniert auch alles, aber wenn eigentlich eine Mücke auftauchen sollte, kommt eine Fehlermeldung, dass das Programm unerwartet beendet wurde.
Vielen Dank
Jay
package com.example.mueckenmassacker;
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.TextView;
public class GameActivity extends Activity implements OnClickListener,Runnable {
private static final int INTERVALL = 100;
private static final int ZEITSCHEIBEN = 600;
private static final long HOECHSTALTER_MS = 2000;
private float massstab;
private int zeit;
private int punkte;
private int runde;
private int muecken;
private int gefangeneMuecken;
private Random zufallsgenerator = new Random();
private FrameLayout spielbereich;
private Handler handler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game);
massstab = getResources().getDisplayMetrics().density;
spielbereich = (FrameLayout)findViewById(R.id.spielbereich);
spielStarten();
}
private void spielStarten() {
runde = 0;
punkte = 0;
starteRunde();
}
private void starteRunde() {
runde = runde +1;
muecken = runde * 20;
gefangeneMuecken = 0;
zeit = ZEITSCHEIBEN ;
bildschirmAktualisieren();
handler.postDelayed(this,INTERVALL);
}
private void bildschirmAktualisieren() {
TextView tvPunkte = (TextView)findViewById(R.id.points);
tvPunkte.setText(Integer.toString(punkte));
TextView tvRunde = (TextView)findViewById(R.id.rounds);
tvRunde.setText(Integer.toString(runde));
TextView tvMuecken = (TextView)findViewById(R.id.hits);
tvMuecken.setText(Integer.toString(gefangeneMuecken));
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(gefangeneMuecken,muecken) / muecken );
LayoutParams lpZeit = flZeit.getLayoutParams();
lpZeit.width = Math.round( massstab * zeit * 300/ZEITSCHEIBEN );
}
private void zeitHerunterzaehlen() {
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,INTERVALL);
}
}
}
private boolean pruefeSpielende() {
if ( zeit == 0 && gefangeneMuecken < 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();
ImageView muecke = new ImageView(this);
muecke.setImageResource(R.drawable.muecke);
muecke.setTag(R.id.geburtsdatum, new Date());
muecke.setOnClickListener(this);
int muecke_breite = (int) Math.round(massstab*45);
int muecke_hoehe = (int) Math.round(massstab*44);
int links = zufallsgenerator.nextInt( breite - muecke_breite );
int oben = zufallsgenerator.nextInt( hoehe - muecke_hoehe );
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);
}
private void mueckenVerschwinden() {
spielbereich = (FrameLayout) findViewById(R.id.spielbereich);
int nummer = 0;
while(nummer < spielbereich.getChildCount() ) {
ImageView mueckev = (ImageView) spielbereich.getChildAt(nummer);
Date geburtsdatum = (Date) mueckev.getTag(R.id.geburtsdatum);
Date aktuell = new Date();
long alterakt=aktuell.getTime();
long altergeb= ((Date)geburtsdatum).getTime();
long alter = (new Date()).getTime() - geburtsdatum.getTime();
if(alter > HOECHSTALTER_MS) {
spielbereich.removeView(mueckev);
} else {
nummer++;
}
}
}
private void gameOver() {
Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
dialog.setContentView(R.layout.gameover);
dialog.show();
}
@Override
public void onClick(View muecke) {
gefangeneMuecken++;
punkte += 100;
bildschirmAktualisieren();
spielbereich.removeView(muecke);
}
@Override
public void run() {
zeitHerunterzaehlen();
}
}
Alles anzeigen