Mückenfang-Hilfe

  • Antworten:43
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 203

30.11.2013, 15:38:38 via Website

Ich habe von einem Buch aus ein Spiel entwickwelt (statt Mücken habe ich Fliegen genommen. Es rennt eine Zeit ab in der man eine bestimmte Anzahl an Fliegen schnappen muss. Drücke ich auf Start sehe ich das Gamelayout aber es passiert nichts. Hier der Code:
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!!!!!!!!!!!!!!!!!!!!!!

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.897

30.11.2013, 22:55:10 via App

Was ist der konkrete Fehler?
Benutz LocCat und deb debug mode um fehler zu finden..

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 203

01.12.2013, 09:17:25 via Website

Strange Fly [Android Application]
DalvikVM [localhost:8600]
Thread [<1> main] (Suspended (exception IllegalArgumentException))
<VM does not provide monitor information>
Random.nextInt(int) line: 185
GameActivity.eineFlyAnzeigen() line: 141
GameActivity.zeitHerunterzaehlen() line: 97
GameActivity.run() line: 185
Handler.handleCallback(Message) line: 725
Handler.dispatchMessage(Message) line: 92
Looper.loop() line: 175
ActivityThread.main(String[]) line: 5279
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 511
ZygoteInit$MethodAndArgsCaller.run() line: 1102
ZygoteInit.main(String[]) line: 869
NativeStart.main(String[]) line: not available [native method]
Thread [<10> Binder_2] (Running)
Thread [<9> Binder_1] (Running)
Thread [<11> Binder_3] (Running)
Was soll das heißen? (Das ist der Debug Mode) Wo ist der Fehler?

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!

Antworten
  • Forum-Beiträge: 2.545

01.12.2013, 12:49:14 via Website

Selber schauen ist schon wieder zu viel Aufwand?

IllegalArgumentException
Random.nextInt(int)

Doku:
Exception
IllegalArgumentException--This is thrown if n is not positive.


Wo ist der Fehler?
Steht da doch:
GameActivity.eineFlyAnzeigen() line: 141

Antworten
  • Forum-Beiträge: 203

01.12.2013, 15:07:06 via Website

Was bedeutet:
NativeStart.main(String[]) line: not available [native method]

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!

Antworten
  • Forum-Beiträge: 144

01.12.2013, 15:20:20 via Website

Hey TomCom,

erst einmal uninteressant, was die einzelnen Fehler bedeuten. Kümmere dich erstmal um den von "and dev" dir gezeigten Fehler.

Grüße Fabian!

Antworten
  • Forum-Beiträge: 203

01.12.2013, 15:25:32 via Website

Was ist eigentlich and dev?

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!

Antworten
  • Forum-Beiträge: 33.207

01.12.2013, 15:28:52 via Website

Tom Com
Was ist eigentlich and dev?
Ein User, der Dir einen guten Tipp gegeben hat.

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

impjor

Antworten
  • Forum-Beiträge: 2.545

01.12.2013, 16:40:40 via Website

Was bedeutet:
NativeStart.main(String[]) line: not available [native method]

Das die Nummer der Zeile in der Methode main(), aus der der Aufruf erfolgt ist, nicht bekannt ist, weil es sich um eine native Methode handelt.
Inwiefern hilft dir das jetzt bei der Fehlersuche?

Antworten
  • Forum-Beiträge: 203

02.12.2013, 08:55:41 via Website

Eigentlich hilft mir gar nichts wirklich

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!

Antworten
  • Forum-Beiträge: 1.525

02.12.2013, 09:12:14 via Website

Tom Com
Eigentlich hilft mir gar nichts wirklich

Warum?

Weil lesen und verstehe schwer ist?
Der gute @and dev hat dir alles gesagt.
Einfacher geht es nicht mehr.

1GameActivity.eineFlyAnzeigen() line: 141

Da ist dein Fehler.
Also guckst du in deinem Code nach der Line 141.


LG

Antworten
  • Forum-Beiträge: 203

02.12.2013, 09:52:40 via Website

Ich habe den Code der Methode haargenau von dem der Vorlage übernommenen. Liegt es wirklich an dieser Methode?

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!

Antworten
  • Forum-Beiträge: 2.545

02.12.2013, 13:20:19 via Website

Liegt es wirklich an dieser Methode?
Nein, natürlich nicht, wir haben alle nur Spaß gemacht (und dein Phone gehakt, um deine Logs zu fälschen), weil uns so langweilig ist...

Vielleicht solltest du dir besser ein anderes Hobby suchen.

Antworten
  • Forum-Beiträge: 203

03.12.2013, 17:19:51 via Website

Es tut mir leid. Aber wenn ich ein Logging einbaue zeigt er mir den Fehler in der onCreate() an
Ich habe den Code geändert. Hier ist er:
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.util.Log;
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 float massstab ;
private Random zufallsgenerator = new Random();
private int runde;
private int punkte;
private ViewGroup spielbereich;
private int gefangeneFly;
private int zeit;
private int fly;
private Handler handler = new Handler();
public static final String LOGTAG = "Game";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(LOGTAG, "Service startet");
setContentView(R.layout.activity_game);
massstab = getResources().getDisplayMetrics().density;
spielbereich = (FrameLayout) findViewById(R.id.spielbereich);
Log.e("Game", "onCreate");
spielStarten();


}


private void spielStarten() {
runde = 0;
punkte = 0;
starteRunde();
}
private void starteRunde(){
runde = runde +1;
fly = runde * 10;
gefangeneFly = 0;
zeit = 60;
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 gameOver(){
Dialog dialog = new Dialog(this, android.R.style.
Theme_Translucent_NoTitleBar_Fullscreen);
dialog.setContentView(R.layout.gameover);
dialog.show();
}


private void zeitHerunterzaehlen(){
zeit = zeit -1;
float zufallszahl = zufallsgenerator.nextFloat();
double wahrscheinlichkeit = fly * 1.5f / 60;
if ( wahrscheinlichkeit > 1 ) {
eineFlyAnzeigen();
if ( zufallszahl < wahrscheinlichkeit - 1){
eineFlyAnzeigen();
}
} else {
if ( zufallszahl < wahrscheinlichkeit) {
eineFlyAnzeigen();
}

}
flyVerschwinden();
bildschirmAktualisieren();
if(!pruefeSpielende()) {
if(!pruefeRundenende()){
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(gefangeneFly));
TextView tvZeit = (TextView)findViewById(R.id.time);
tvZeit.setText(Integer.toString(zeit));
FrameLayout flTreffer = (FrameLayout)findViewById(R.id.bar_hits);
LayoutParams lpTreffer = flTreffer.getLayoutParams();
lpTreffer.width = Math.round( massstab * 300 *
Math.min( gefangeneFly,fly) / fly);
FrameLayout flZeit = (FrameLayout)findViewById(R.id.bar_time);
LayoutParams lpZeit = flZeit.getLayoutParams();
lpZeit.width = Math.round( massstab * zeit * 300 / 60);



}

private void eineFlyAnzeigen(){
int breite = spielbereich.getWidth();
int hoehe = spielbereich.getHeight();
ImageView flyi = new ImageView(this);
flyi.setImageResource(R.drawable.ic_launcher);
flyi.setTag(R.id.geburtsdatum, new Date());
flyi.setOnClickListener(this);
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);
FrameLayout.LayoutParams params =
new FrameLayout.LayoutParams(fly_breite,fly_hoehe);
params.leftMargin = links;
params.topMargin = oben;
params.gravity = Gravity.TOP + Gravity.LEFT;
spielbereich.addView(flyi,params);
Log.e("Game", "Fly");

}
private void flyVerschwinden() {
int nummer = 0;
while(nummer < spielbereich.getChildCount() ) {
ImageView flyi = (ImageView) spielbereich.getChildAt(nummer);
Date geburtsdatum = (Date) flyi.getTag(R.id.geburtsdatum);
geburtsdatum.getTime();
long alter = (new Date()).getTime() - geburtsdatum.getTime();
if(alter > HOECHSTALTER_MS ) {
spielbereich.removeView(flyi);
}else{
nummer++;

}
}



}


@Override
public void onClick(View flyi){
gefangeneFly++;
punkte +=10;
bildschirmAktualisieren();
spielbereich.removeView(flyi);

}
public interface Runnable {
public void run();
}

@Override
public void run(){
zeitHerunterzaehlen();
}
@Override
public void onDestroy() {
Log.d(LOGTAG, "Service beendet");
super.onDestroy();
}

}



Kannst du noch mal einen Blick drüber werfen?
Ich wäre dir sehr dankbar

— geändert am 03.12.2013, 17:21:11

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.897

03.12.2013, 18:52:09 via Website

Setz den Code bitte mal in die vorgesehenen Code Tags

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 1.445

03.12.2013, 19:41:22 via App

Ich übernehme das einfach mal für dich! :)
1package at.tomcom.strangefly;
2
3import java.util.Date;
4import java.util.Random;
5
6
7import android.app.Activity;
8import android.app.Dialog;
9import android.os.Bundle;
10import android.os.Handler;
11import android.util.Log;
12import android.view.Gravity;
13import android.view.View;
14import android.view.View.OnClickListener;
15import android.view.ViewGroup;
16import android.view.ViewGroup.LayoutParams;
17import android.widget.FrameLayout;
18import android.widget.ImageView;
19import android.widget.TextView;
20
21public class GameActivity extends Activity
22 implements OnClickListener,Runnable{
23 private static final long HOECHSTALTER_MS = 2000;
24 private float massstab ;
25 private Random zufallsgenerator = new Random();
26 private int runde;
27 private int punkte;
28 private ViewGroup spielbereich;
29 private int gefangeneFly;
30 private int zeit;
31 private int fly;
32 private Handler handler = new Handler();
33 public static final String LOGTAG = "Game";
34
35 @Override
36 public void onCreate(Bundle savedInstanceState) {
37 super.onCreate(savedInstanceState);
38 Log.d(LOGTAG, "Service startet");
39 setContentView(R.layout.activity_game);
40 massstab = getResources().getDisplayMetrics().density;
41 spielbereich = (FrameLayout) findViewById(R.id.spielbereich);
42 Log.e("Game", "onCreate");
43 spielStarten();
44
45
46 }
47
48
49 private void spielStarten() {
50 runde = 0;
51 punkte = 0;
52 starteRunde();
53 }
54 private void starteRunde(){
55 runde = runde +1;
56 fly = runde * 10;
57 gefangeneFly = 0;
58 zeit = 60;
59 bildschirmAktualisieren();
60 handler.postDelayed(this,1000);
61 }
62
63 private boolean pruefeRundenende(){
64 if (zeit == 0){
65 starteRunde();
66 return true;
67 }
68 return false;
69 }
70
71 private boolean pruefeSpielende(){
72 if( zeit == 0 && gefangeneFly < fly){
73 gameOver();
74 return true;
75 }
76 return false;
77 }
78 private void gameOver(){
79 Dialog dialog = new Dialog(this, android.R.style.
80 Theme_Translucent_NoTitleBar_Fullscreen);
81 dialog.setContentView(R.layout.gameover);
82 dialog.show();
83 }
84
85
86 private void zeitHerunterzaehlen(){
87 zeit = zeit -1;
88 float zufallszahl = zufallsgenerator.nextFloat();
89 double wahrscheinlichkeit = fly * 1.5f / 60;
90 if ( wahrscheinlichkeit > 1 ) {
91 eineFlyAnzeigen();
92 if ( zufallszahl < wahrscheinlichkeit - 1){
93 eineFlyAnzeigen();
94 }
95 } else {
96 if ( zufallszahl < wahrscheinlichkeit) {
97 eineFlyAnzeigen();
98 }
99
100 }
101 flyVerschwinden();
102 bildschirmAktualisieren();
103 if(!pruefeSpielende()) {
104 if(!pruefeRundenende()){
105 handler.postDelayed(this, 1000);
106 }
107
108 }
109
110 }
111 private void bildschirmAktualisieren(){
112 TextView tvPunkte = (TextView)findViewById(R.id.points);
113 tvPunkte.setText(Integer.toString(punkte));
114 TextView tvRunde = (TextView)findViewById(R.id.round);
115 tvRunde.setText(Integer.toString(runde));
116 TextView tvTreffer = (TextView)findViewById(R.id.hits);
117 tvTreffer.setText(Integer.toString(gefangeneFly));
118 TextView tvZeit = (TextView)findViewById(R.id.time);
119 tvZeit.setText(Integer.toString(zeit));
120 FrameLayout flTreffer = (FrameLayout)findViewById(R.id.bar_hits);
121 LayoutParams lpTreffer = flTreffer.getLayoutParams();
122 lpTreffer.width = Math.round( massstab * 300 *
123 Math.min( gefangeneFly,fly) / fly);
124 FrameLayout flZeit = (FrameLayout)findViewById(R.id.bar_time);
125 LayoutParams lpZeit = flZeit.getLayoutParams();
126 lpZeit.width = Math.round( massstab * zeit * 300 / 60);
127
128
129
130 }
131
132 private void eineFlyAnzeigen(){
133 int breite = spielbereich.getWidth();
134 int hoehe = spielbereich.getHeight();
135 ImageView flyi = new ImageView(this);
136 flyi.setImageResource(R.drawable.ic_launcher);
137 flyi.setTag(R.id.geburtsdatum, new Date());
138 flyi.setOnClickListener(this);
139 int fly_breite = (int) Math.round(massstab*50);
140 int fly_hoehe = (int) Math.round(massstab*50);
141 int links = zufallsgenerator.nextInt( breite - fly_breite);
142 int oben = zufallsgenerator.nextInt( hoehe - fly_hoehe);
143 FrameLayout.LayoutParams params =
144 new FrameLayout.LayoutParams(fly_breite,fly_hoehe);
145 params.leftMargin = links;
146 params.topMargin = oben;
147 params.gravity = Gravity.TOP + Gravity.LEFT;
148 spielbereich.addView(flyi,params);
149 Log.e("Game", "Fly");
150
151 }
152 private void flyVerschwinden() {
153 int nummer = 0;
154 while(nummer < spielbereich.getChildCount() ) {
155 ImageView flyi = (ImageView) spielbereich.getChildAt(nummer);
156 Date geburtsdatum = (Date) flyi.getTag(R.id.geburtsdatum);
157 geburtsdatum.getTime();
158 long alter = (new Date()).getTime() - geburtsdatum.getTime();
159 if(alter > HOECHSTALTER_MS ) {
160 spielbereich.removeView(flyi);
161 }else{
162 nummer++;
163
164 }
165 }
166
167
168
169 }
170
171
172 @Override
173 public void onClick(View flyi){
174 gefangeneFly++;
175 punkte +=10;
176 bildschirmAktualisieren();
177 spielbereich.removeView(flyi);
178
179 }
180 public interface Runnable {
181 public void run();
182 }
183
184 @Override
185 public void run(){
186 zeitHerunterzaehlen();
187 }
188 @Override
189 public void onDestroy() {
190 Log.d(LOGTAG, "Service beendet");
191 super.onDestroy();
192 }
193
194 }

— geändert am 03.12.2013, 19:42:52

Grüße NoAh!

Antworten
  • Forum-Beiträge: 1.793

03.12.2013, 20:29:21 via App

Du erwartest doch Hilfe von uns, oder? Dann mache es uns doch nicht unnötig schwer!
-Code-Tags benutzen
-Zeile/Funktion hier posten, in der der Fehler liegt.

Scheinbar, rufts du zufallsgenerator.nextInt() mit einer negativen Zahl auf, wie anddev meinte. Einfach mal den Debugger da halten lassen und breite usw. mal auslesen. Wird wohl irgendein Logikfehler sein.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
  • Forum-Beiträge: 203

04.12.2013, 08:55:51 via Website

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.util.Log;
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 float massstab ;
private Random zufallsgenerator = new Random();
private int runde;
private int punkte;
private ViewGroup spielbereich;
private int gefangeneFly;
private int zeit;
private int fly;
private Handler handler = new Handler();
public static final String LOGTAG = "Game";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(LOGTAG, "Service startet");
setContentView(R.layout.activity_game);
massstab = getResources().getDisplayMetrics().density;
spielbereich = (FrameLayout) findViewById(R.id.spielbereich);
Log.e("Game", "onCreate");
spielStarten();


}


private void spielStarten() {
runde = 0;
punkte = 0;
starteRunde();
}
private void starteRunde(){
runde = runde +1;
fly = runde * 10;
gefangeneFly = 0;
zeit = 60;
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 gameOver(){
Dialog dialog = new Dialog(this, android.R.style.
Theme_Translucent_NoTitleBar_Fullscreen);
dialog.setContentView(R.layout.gameover);
dialog.show();
}


private void zeitHerunterzaehlen(){
zeit = zeit -1;
float zufallszahl = zufallsgenerator.nextFloat();
double wahrscheinlichkeit = fly * 1.5f / 60;
if ( wahrscheinlichkeit > 1 ) {
eineFlyAnzeigen();
if ( zufallszahl < wahrscheinlichkeit - 1){
eineFlyAnzeigen();
}
} else {
if ( zufallszahl < wahrscheinlichkeit) {
eineFlyAnzeigen();
}

}
flyVerschwinden();
bildschirmAktualisieren();
if(!pruefeSpielende()) {
if(!pruefeRundenende()){
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(gefangeneFly));
TextView tvZeit = (TextView)findViewById(R.id.time);
tvZeit.setText(Integer.toString(zeit));
FrameLayout flTreffer = (FrameLayout)findViewById(R.id.bar_hits);
LayoutParams lpTreffer = flTreffer.getLayoutParams();
lpTreffer.width = Math.round( massstab * 300 *
Math.min( gefangeneFly,fly) / fly);
FrameLayout flZeit = (FrameLayout)findViewById(R.id.bar_time);
LayoutParams lpZeit = flZeit.getLayoutParams();
lpZeit.width = Math.round( massstab * zeit * 300 / 60);



}

private void eineFlyAnzeigen(){
int breite = spielbereich.getWidth();
int hoehe = spielbereich.getHeight();
ImageView flyi = new ImageView(this);
flyi.setImageResource(R.drawable.ic_launcher);
flyi.setTag(R.id.geburtsdatum, new Date());
flyi.setOnClickListener(this);
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);

FrameLayout.LayoutParams params =
new FrameLayout.LayoutParams(fly_breite,fly_hoehe);
params.leftMargin = links;
params.topMargin = oben;
params.gravity = Gravity.TOP + Gravity.LEFT;
spielbereich.addView(flyi,params);
Log.e("Game", "Fly");

}
private void flyVerschwinden() {
int nummer = 0;
while(nummer < spielbereich.getChildCount() ) {
ImageView flyi = (ImageView) spielbereich.getChildAt(nummer);
Date geburtsdatum = (Date) flyi.getTag(R.id.geburtsdatum);
geburtsdatum.getTime();
long alter = (new Date()).getTime() - geburtsdatum.getTime();
if(alter > HOECHSTALTER_MS ) {
spielbereich.removeView(flyi);
}else{
nummer++;

}
}



}


@Override
public void onClick(View flyi){
gefangeneFly++;
punkte +=10;
bildschirmAktualisieren();
spielbereich.removeView(flyi);

}
public interface Runnable {
public void run();
}

@Override
public void run(){
zeitHerunterzaehlen();
}
@Override
public void onDestroy() {
Log.d(LOGTAG, "Service beendet");
super.onDestroy();
}

}
Was Zufallszahl ist hab ich unterstrichen

Liebe Grüße!!!!!!!!!!!!!!!!!!!!!!

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.897

04.12.2013, 14:36:53 via Website

Schön formatieren und in Code Tags setzen..

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Empfohlene Artikel