- 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!!!!!!!!!!!!!!!!!!!!!!
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.