- Forum-Beiträge: 84
06.03.2014, 18:32:42 via Website
06.03.2014 18:32:42 via Website
Bin neu hier
Um dieses spiel geht es.
Mückenfang:
Kurzbeschreibung
Wie viele Mücken zerquetscht worden sind
Je mehr punkte = höhere Runde = besseren Highscore
**Je zerquetschte Mücke 100-300 punkte (je nach Schwierigkeitsgrad) gutgschrieben**
**Um dies geht es:
HILFE BITTE, oder gebt mir einen Tipp**
1. Ich möchte gerne ein Tier z.B. Fliege oder Elefant hinzufügen, aber
so dass da Punkte abgezogen werden, so um die 500Punkte!!!
2. Es werden derzeit die Mücken gezählt, die ich in dieser Runde
erwischt hab um eine Runde weiter zu kommen, also es hebt von 0 an
und es zählt bis 10 rauf, bis ich diese Runde geschafft habe. Ich
will das aber genau umgekehrt, also das es von 10 runterzählt auf 0.
Ich habe schon ca. 3-4 Tage lang studiert und probiert aber irgendwie geht das nicht
**Hier mal das ganze, wo ich eure Hilfe brauch:**
Für die Tiere die erscheinen sollen (eineMueckeAnzeigen) und auch den onClick, wo die Punkte abgezogen werden hab ich mal hervorgehoben.
Bei dem anderen mit dem rückwärts zählen, brauche ich eure hilfe, weil ich glaube mal, das ich den code dann anders schreiben muss
Hoffe der code-tag funktioniert
2
3import java.util.Date;
4import java.util.Random;
5
6import android.app.Activity;
7import android.app.Dialog;
8import android.media.MediaPlayer;
9import android.os.Bundle;
10import android.os.Handler;
11import android.view.Gravity;
12import android.view.View;
13import android.view.View.OnClickListener;
14import android.view.ViewGroup;
15import android.view.ViewGroup.LayoutParams;
16import android.view.animation.Animation;
17import android.view.animation.Animation.AnimationListener;
18import android.view.animation.AnimationUtils;
19import android.widget.FrameLayout;
20import android.widget.ImageView;
21import android.widget.TextView;
22
23public class GameActivity extends Activity implements OnClickListener, Runnable {
24
25 private static final String FLIEGE = "FLIEGE";
26 private static final int INTERVALL_MS = 50;
27 private static final long HOECHSTALTER_MS = 2000;
28 private static final int MUECKEN_BILDER[][] = {
29 {R.drawable.muecke_nw, R.drawable.muecke_n, R.drawable.muecke_no},
30 {R.drawable.muecke_w, R.drawable.muecke, R.drawable.muecke_o},
31 {R.drawable.muecke_sw, R.drawable.muecke_s, R.drawable.muecke_so}};
32 private static final String HIMMELSRICHTUNGEN[][] = {
33 {"nw", "n", "no"},
34 {"w", "", "o"},
35 {"sw", "s", "so"}};
36
37 private boolean spielLaeuft;
38 private int runde;
39 private int punkte;
40 private int muecken;
41 private int gefangeneMuecken;
42 private int zeit;
43 private float massstab;
44 private Random zufallsgenerator = new Random();
45 private ViewGroup spielbereich;
46 private Handler handler = new Handler();
47 private MediaPlayer mp;
48 private int frame;
49 private int schwierigkeitsgrad;
50 **private ImageView muecke;
51 private Random rnd;
52 private Object fliege;**
53
54 @Override
55 protected void onCreate(Bundle savedInstanceState) {
56 super.onCreate(savedInstanceState);
57 setContentView(R.layout.game);
58 massstab = getResources().getDisplayMetrics().density;
59 spielbereich = (ViewGroup) findViewById(R.id.spielbereich);
60 mp = MediaPlayer.create(this, R.raw.summen);
61 schwierigkeitsgrad = getIntent().getIntExtra("schwierigkeitsgrad", 0);
62 spielStarten();
63 }
64
65 private void spielStarten() {
66 spielLaeuft = true;
67 runde = 0;
68 punkte = 0;
69 starteRunde();
70 }
71
72 private void starteRunde() {
73 runde = runde +1;
74 muecken = runde * (10 + schwierigkeitsgrad*10);
75 gefangeneMuecken = 0;
76 frame = 0;
77 zeit = 60;
78 bildschirmAktualisieren();
79 handler.postDelayed(this, INTERVALL_MS);
80 }
81
82 private void bildschirmAktualisieren() {
83 TextView tvPunkte = (TextView) findViewById(R.id.points);
84 tvPunkte.setText(Integer.toString(punkte));
85 TextView tvRunde = (TextView) findViewById(R.id.round);
86 tvRunde.setText(Integer.toString(runde));
87 TextView tvTreffer = (TextView) findViewById(R.id.hits);
88 tvTreffer.setText(Integer.toString(gefangeneMuecken));
89 TextView tvZeit = (TextView) findViewById(R.id.time);
90 tvZeit.setText(Integer.toString(zeit));
91 FrameLayout flTreffer = (FrameLayout) findViewById(R.id.bar_hits);
92 FrameLayout flZeit = (FrameLayout) findViewById(R.id.bar_time);
93 LayoutParams lpTreffer = flTreffer.getLayoutParams();
94 lpTreffer.width = Math.round(massstab * 300 * Math.min(gefangeneMuecken, muecken) /muecken);
95 LayoutParams lpZeit = flZeit.getLayoutParams();
96 lpZeit.width = Math.round(massstab * zeit * 300 / 60 );
97 }
98
99 private void zeitHerunterzaehlen() {
100 zeit = zeit -1;
101 float zufallszahl = zufallsgenerator.nextFloat();
102 double wahrscheinlichkeit = muecken * 1.5 / 60;
103 if(wahrscheinlichkeit > 1) {
104 eineMueckeAnzeigen();
105 if(zufallszahl < wahrscheinlichkeit-1) {
106 eineMueckeAnzeigen();
107 }
108 } else {
109 if(zufallszahl < wahrscheinlichkeit) {
110 eineMueckeAnzeigen();
111 }
112 }
113 mueckenVerschwinden();
114 bildschirmAktualisieren();
115 }
116
117
118 private void mueckenBewegen() {
119 int nummer=0;
120 while(nummer < spielbereich.getChildCount()) {
121 ImageView muecke = (ImageView) spielbereich.getChildAt(nummer);
122 int vx = (Integer) muecke.getTag(R.id.vx);
123 int vy = (Integer) muecke.getTag(R.id.vy);
124 // und nun bewegen...
125 FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) muecke.getLayoutParams();
126 params.leftMargin += vx*runde;
127 params.topMargin += vy*runde;
128 muecke.setLayoutParams(params);
129 nummer++;
130 }
131 }
132
133 private void mueckenVerschwinden() {
134 int nummer=0;
135 while(nummer < spielbereich.getChildCount()) {
136 ImageView muecke = (ImageView) spielbereich.getChildAt(nummer);
137 Date geburtsdatum = (Date) muecke.getTag(R.id.geburtsdatum);
138 long alter = (new Date()).getTime() - geburtsdatum.getTime();
139 if(alter > HOECHSTALTER_MS) {
140 spielbereich.removeView(muecke);
141 } else {
142 nummer++;
143 }
144 }
145 }
146
147 private boolean pruefeSpielende() {
148 if(zeit == 0 && gefangeneMuecken < muecken) {
149 gameOver();
150 return true;
151 }
152 return false;
153 }
154
155 private void gameOver() {
156 setResult(punkte);
157 Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
158 dialog.setContentView(R.layout.gameover);
159 dialog.show();
160 spielLaeuft = false;
161 }
162
163 private boolean pruefeRundenende() {
164 if(gefangeneMuecken >= muecken) {
165 starteRunde();
166 return true;
167 }
168 return false;
169 }
170
171 private void eineMueckeAnzeigen() {
172
173 **if(rnd.nextFloat() <0.05) {
174 muecke.setImageResource(R.drawable.fliege);
175 muecke.setTag(R.id.tier,fliege);
176 } else {
177 muecke.setImageResource(R.drawable.muecke);
178 }**
179
180 int breite = spielbereich.getWidth();
181 int hoehe = spielbereich.getHeight();
182 int muecke_breite = (int) Math.round(massstab*50);
183 int muecke_hoehe = (int) Math.round(massstab*42);
184 int links = zufallsgenerator.nextInt(breite - muecke_breite );
185 int oben = zufallsgenerator.nextInt(hoehe - muecke_hoehe);
186
187 // Mücke erzeugen
188 ImageView muecke = new ImageView(this);
189 muecke.setOnClickListener(this);
190 muecke.setTag(R.id.geburtsdatum, new Date());
191
192 // Bewegungsvektor erzeugen
193 int vx;
194 int vy;
195 do {
196 vx = zufallsgenerator.nextInt(3)-1;
197 vy = zufallsgenerator.nextInt(3)-1;
198 } while(vx==0 && vy==0);
199
200 muecke.setTag(R.id.vx, new Integer(vx));
201 muecke.setTag(R.id.vy, new Integer(vy));
202
203 setzeBild(muecke, vx, vy);
204
205 // Geschwindigkeitskorrektur für schräge Mücken
206 double faktor = 1.0;
207 if(vx!=0 && vy!=0) {
208 faktor = 0.70710678;
209 }
210
211 vx = (int) Math.round(massstab*faktor*vx);
212 vy = (int) Math.round(massstab*faktor*vy);
213
214 // Mücke anzeigen
215 FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(muecke_breite, muecke_hoehe);
216 params.leftMargin = links;
217 params.topMargin = oben;
218 params.gravity = Gravity.TOP + Gravity.LEFT;
219 spielbereich.addView(muecke, params);
220
221 // Summen starten
222 mp.seekTo(0);
223 mp.start();
224 }
225
226
227 private void setzeBild(ImageView muecke, int vx, int vy) {
228 // setzen des richtigen Bildes mit dem zweidimensionalen Array
229 muecke.setImageResource(MUECKEN_BILDER[vy+1][vx+1]);
230
231 // alternativ: setzen über Himmelsrichtungen und Bildname
232 //muecke.setImageResource(getResources().getIdentifier("muecke_"+HIMMELSRICHTUNGEN[vy+1][vx+1], "drawable", getPackageName()));
233 }
234
235 @Override
236 public void onClick(View muecke) {
237 **if(muecke.getTag(R.id.tier)== FLIEGE) {
238 punkte -= 500;
239 } else {
240 gefangeneMuecken++;
241 punkte += 100 + schwierigkeitsgrad*100;**
242 }
243 bildschirmAktualisieren();
244 mp.pause();
245 Animation animationTreffer = AnimationUtils.loadAnimation(this, R.anim.treffer);
246 animationTreffer.setAnimationListener(new MueckeAnimationListener(muecke));
247 muecke.startAnimation(animationTreffer);
248 muecke.setOnClickListener(null);
249
250
251 }
252
253 private class MueckeAnimationListener implements AnimationListener {
254 private View muecke;
255 public MueckeAnimationListener(View m) {
256 muecke = m;
257 }
258 @Override
259 public void onAnimationEnd(Animation arg0) {
260 handler.post(new Runnable() {
261 @Override
262 public void run() {
263 spielbereich.removeView(muecke);
264 }
265 });
266 }
267
268 @Override
269 public void onAnimationRepeat(Animation arg0) {
270 }
271
272 @Override
273 public void onAnimationStart(Animation arg0) {
274 }
275
276 }
277
278 @Override
279 public void run() {
280 mueckenBewegen();
281 frame++;
282 if(frame >= 1000/INTERVALL_MS) {
283 zeitHerunterzaehlen();
284 frame = 0;
285 }
286 if(!pruefeSpielende()) {
287 if(!pruefeRundenende()) {
288 handler.postDelayed(this, INTERVALL_MS);
289 }
290 }
291 }
292
293 @Override
294 protected void onDestroy() {
295 mp.release();
296 super.onDestroy();
297 }
298
299 @Override
300 protected void onPause() {
301 super.onPause();
302 handler.removeCallbacks(this);
303 }
304}
Ich sag schon mal danke im Voraus
— geändert am 06.03.2014, 19:29:14 durch Moderator
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.