- Forum-Beiträge: 203
30.11.2013, 15:38:38 via Website
30.11.2013 15:38:38 via Website
package at.tomcom.strangefly;
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;
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 long HOECHSTALTER_MS = 2000;
private static final int ZEITSCHEIBEN = 600;
private float massstab ;
private Random zufallsgenerator = new Random();
private int runde;
private int punkte;
private ViewGroup spielbereich;
private int gefangeneFly;
private boolean spielLaeuft;
private int zeit;
private int fly;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
massstab = getResources().getDisplayMetrics().density;
FrameLayout spielbereich = (FrameLayout)findViewById(R.id.spielbereich);
spielStarten();
}
private void spielStarten() {
runde = 0;
punkte = 0;
starteRunde();
}
private void starteRunde(){
runde = runde +1;
fly = runde * 10;
gefangeneFly = 0;
zeit = ZEITSCHEIBEN;
bildschirmAktualisieren();
handler.postDelayed(this,1000);
}
private boolean pruefeRundenende(){
if (zeit == 0) {
starteRunde();
return true;
}
return false;
}
private boolean pruefeSpielende(){
if( zeit == 0 && gefangeneFly < fly){
gameOver();
return true;
}
return false;
}
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(gefangeneFly));
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( gefangeneFly,fly) / fly);
LayoutParams lpZeit = flZeit.getLayoutParams();
lpZeit.width = Math.round( massstab * zeit * 300 / ZEITSCHEIBEN);
}
private void zeitHerunterzaehlen(){
zeit = zeit -1;
float zufallszahl = zufallsgenerator.nextFloat();
double wahrscheinlichkeit = fly * 1.5 / ZEITSCHEIBEN;
if ( wahrscheinlichkeit > 1 ) {
eineFlyAnzeigen();
if ( zufallszahl < wahrscheinlichkeit -1){
eineFlyAnzeigen();
}
} else {
if ( zufallszahl < fly * 1.5 / ZEITSCHEIBEN) {
eineFlyAnzeigen();
}
}
flyVerschwinden();
bildschirmAktualisieren();
if(!pruefeSpielende()) {
if(!pruefeRundenende()){
handler.postDelayed(this, 1000);
}
}
}
private void eineFlyAnzeigen(){
int breite = spielbereich.getWidth();
int hoehe = spielbereich.getHeight();
int fly_breite = (int) Math.round(massstab*50);
int fly_hoehe = (int) Math.round(massstab*50);
int links = zufallsgenerator.nextInt( breite - fly_breite);
int oben = zufallsgenerator.nextInt( hoehe - fly_hoehe);
ImageView fly = new ImageView (this);
fly.setImageResource(R.drawable.ic_launcher);
FrameLayout.LayoutParams params =
new FrameLayout.LayoutParams(fly_breite,fly_hoehe);
params.leftMargin = links;
params.topMargin = oben;
params.gravity = Gravity.TOP + Gravity.LEFT;
spielbereich.addView(fly,params);
fly.setTag(R.id.geburtsdatum, new Date());
}
private void flyVerschwinden() {
int nummer = 0;
while(nummer < spielbereich.getChildCount() ) {
ImageView fly = (ImageView) spielbereich.getChildAt(nummer);
Date geburtsdatum = (Date) fly.getTag(R.id.geburtsdatum);
geburtsdatum.getTime();
long alter = (new Date()).getTime() - geburtsdatum.getTime();
if(alter > HOECHSTALTER_MS ) {
spielbereich.removeView(fly);
}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 run(){
zeitHerunterzaehlen();
}
@Override
public void onClick(View fly){
gefangeneFly++;
punkte +=10;
bildschirmAktualisieren();
spielbereich.removeView(fly);
}
}
Was habe ich falsch gemacht?
Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!