Hilfe bei fehler im Programm

  • Antworten:5
country joe
  • Forum-Beiträge: 6

10.02.2012, 09:19:44 via Website

Hallo,

ich wollte mich in das Thema Android Apps Programmieren einarbeiten. Dazu habe ich mir ein Buch von Galileo Computing besorgt.
In dem Buch wird alles anhand einer Spiele App erklärt.
Diese habe ich nachprogrammiert und leider habe ich irgendeinen Fehler den ich selbst aber nicht finden kann.
Die App zeigt in Unterschiedlichen Zeitabständen ein kleines Bild an und wenn man darauf klickt soll das Bild verschwinden und ein Punktezähler soll hochzählen. Bei mir beginnt die App quasi von vorn wenn man auf ein Bild klickt und zählt nicht die Punkte hoch.
Kann mir bitte jemand Helfen ich komm allein einfach nicht mehr weiter.

1package de.android.kill;
2
3import android.app.Activity;
4import android.content.Intent;
5import android.os.Bundle;
6import android.view.View;
7import android.view.View.OnClickListener;
8import android.widget.Button;
9
10public class KillActivity extends Activity implements OnClickListener
11{
12 /** Called when the activity is first created. */
13 @Override
14 public void onCreate(Bundle savedInstanceState)
15 {
16 super.onCreate(savedInstanceState);
17 setContentView(R.layout.main);
18 Button start = (Button) findViewById(R.id.button1);
19 start.setOnClickListener(this);
20 }
21
22 public void onClick(View v)
23 {
24 startActivity (new Intent (this, GameActivity.class));
25 }
26
27
28
29}

1package de.android.kill;
2
3
4import java.util.Date;
5import java.util.Random;
6
7import android.app.Dialog;
8import android.os.Bundle;
9import android.os.Handler;
10import android.view.Gravity;
11import android.view.View;
12import android.view.View.OnClickListener;
13import android.view.ViewGroup.LayoutParams;
14import android.widget.FrameLayout;
15import android.widget.ImageView;
16import android.widget.TextView;
17
18
19/**
20 * @author sischn2
21 *
22 */
23public class GameActivity extends KillActivity implements OnClickListener,Runnable
24{
25 boolean spiellaeuft = false;
26 int runde, punkte, troll, gtroll= 0, zeit =0;
27 private float massstab=0;
28 private Random zufallsgenerator = new Random();
29 private static final long HOECHSTALTER_MS=2000;
30 private static final int ZEITSCHIEBEN=60;
31 private Handler handler = new Handler();
32
33 @Override
34 public void onCreate(Bundle savedInstanceState)
35 {
36 super.onCreate(savedInstanceState);
37 setContentView(R.layout.game);
38 massstab = getResources().getDisplayMetrics().density;
39 if(spiellaeuft==false)
40 {
41 spielStarten();
42 }
43 }
44
45 private void spielStarten()
46 {
47 spiellaeuft = true;
48 runde = 0;
49 punkte = 0;
50 starteRunde();
51 }
52
53 private void starteRunde()
54 {
55 runde ++;
56 troll = runde * 10;
57 gtroll = 0;
58 zeit = ZEITSCHIEBEN;
59 bildschirmAktualisieren();
60 handler.postDelayed(this,1000);
61 }
62
63 private void bildschirmAktualisieren()
64 {
65 TextView tvpunkte = (TextView) findViewById(R.id.points);
66 tvpunkte.setText(Integer.toString(punkte));
67 TextView tvtroll = (TextView) findViewById(R.id.troll);
68 tvtroll.setText(Integer.toString(troll));
69 TextView tvrunde = (TextView) findViewById(R.id.round);
70 tvrunde.setText(Integer.toString(runde));
71 TextView tvhits = (TextView) findViewById(R.id.hits);
72 tvhits.setText(Integer.toString(gtroll));
73 TextView tvzeit = (TextView) findViewById(R.id.time);
74 tvzeit.setText(Integer.toString(zeit));
75 FrameLayout flhits = (FrameLayout) findViewById(R.id.bar_hits);
76 FrameLayout fltime = (FrameLayout) findViewById(R.id.bar_time);
77 LayoutParams lphits = flhits.getLayoutParams();
78 //lphits.width = Math.round(massstab*300*Math.min(gtroll,troll/troll));
79 LayoutParams lptime = fltime.getLayoutParams();
80 //lptime.width = Math.round(massstab*zeit*300/60);
81 }
82
83 private void zeitzaelen ()
84 {
85 zeit--;
86 float zufallszahl = zufallsgenerator.nextFloat();
87 double wahrscheinlichkeit = troll*1.5/ZEITSCHIEBEN;
88
89 if(wahrscheinlichkeit>1)
90 {
91 trollAnzeigen();
92 if(zufallszahl < wahrscheinlichkeit -1)
93 {
94 trollAnzeigen();
95 }
96 }
97
98 else
99 {
100
101 if(zufallszahl < wahrscheinlichkeit)
102 {
103 trollAnzeigen();
104 }
105 }
106 trollVerschwinden();
107 bildschirmAktualisieren();
108 if(!pruefeSpielende())
109 {
110 if (!pruefeRundenende())
111 {
112 handler.postDelayed(this,1000);
113 }
114 }
115
116 }
117
118 private boolean pruefeSpielende()
119 {
120 if(zeit == 0 && gtroll<troll)
121 {
122 gameOver();
123 return true;
124 }
125 return false;
126 }
127
128 private boolean pruefeRundenende()
129 {
130 if(zeit == 0)
131 {
132 starteRunde();
133 return true;
134 }
135 return false;
136 }
137
138 private void trollAnzeigen()
139 {
140
141 FrameLayout spielbereich = (FrameLayout)findViewById(R.id.spielbereich);
142 int breite = spielbereich.getWidth();
143 int hoehe = spielbereich.getHeight();
144 int tbreite = (int) Math.round(massstab*50);
145 int thoehe = (int) Math.round(massstab*50);
146 int links = zufallsgenerator.nextInt(breite-tbreite);
147 int oben = zufallsgenerator.nextInt(hoehe-thoehe);
148 ImageView ivtroll = new ImageView(this);
149 ivtroll.setImageResource(R.drawable.trollface);
150 ivtroll.setOnClickListener(this);
151 FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(tbreite,thoehe);
152 params.leftMargin = links;
153 params.topMargin = oben;
154 params.gravity = Gravity.TOP + Gravity.LEFT;
155 spielbereich.addView(ivtroll,params);
156 ivtroll.setTag(R.id.datum, new Date());
157
158 }
159
160 public void OnClick(View vi)
161 {
162 punkte++;
163 gtroll++;
164 FrameLayout spielbereich = (FrameLayout) findViewById(R.id.spielbereich);
165 spielbereich.removeView(vi);
166 bildschirmAktualisieren();
167
168 }
169
170 private void trollVerschwinden()
171 {
172 int i=0;
173 FrameLayout spielbereich = (FrameLayout) findViewById(R.id.spielbereich);
174
175 while(i<spielbereich.getChildCount())
176 {
177 ImageView ivtroll = (ImageView) spielbereich.getChildAt(i);
178 Date geburtsdatum = (Date) ivtroll.getTag(R.id.datum);
179 long alter = (new Date()).getTime() - geburtsdatum.getTime();
180 if(alter > HOECHSTALTER_MS)
181 {
182 spielbereich.removeView(ivtroll);
183 }
184 else
185 {
186 i++;
187 }
188 }
189 }
190
191 private void gameOver()
192 {
193 Dialog dialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
194 dialog.setContentView(R.layout.gameover);
195 dialog.show();
196 spiellaeuft = false;
197 }
198
199
200 public void run()
201 {
202 zeitzaelen ();
203 }
204}

Antworten
Markus B.
  • Forum-Beiträge: 636

10.02.2012, 09:29:16 via App

Hi,
dann sag uns doch mal wie sich der Fehler genau äußert. Kannst du dein Tool schon nicht kompilieren? Stürzt die App ab (Wenn ja, zeig uns den Logcat Auszug)? Funktioniert ein Teil nicht wie angenommen?

Gruß,
Markus

Antworten
country joe
  • Forum-Beiträge: 6

10.02.2012, 10:11:28 via Website

Die App läst sich kompilieren und startet auch. Sie Stürzt auch nicht ab.
Es ist nur so dass immer wenn ich auf ein erscheinendes Bild klicke die App quassi von vorn beginnt also alle Variablen auf Null und so weiter. Gewünscht währe einfach einen Zähler hoch zu Zählen.

Antworten
Felix
  • Forum-Beiträge: 259

10.02.2012, 13:23:41 via Website

country joe
Die App läst sich kompilieren und startet auch. Sie Stürzt auch nicht ab.
Es ist nur so dass immer wenn ich auf ein erscheinendes Bild klicke die App quassi von vorn beginnt also alle Variablen auf Null und so weiter. Gewünscht währe einfach einen Zähler hoch zu Zählen.

Wenn sich Fehler nicht durch Anschauen des Codes offenbaren, so findet man sie sehr häufig, indem man mit dem Debugger genau nachschaut, an welcher Stelle Wunsch und Wirklichkeit auseinanderlaufen. Du wirst ja ungefähr wissen, was deine Anwendung zu welchem Zeitpunkt machen soll, wenn du nicht einfach nur Copy'n'Paste gemacht hast. Also setz dir einen Breakpoint an die Stelle, an der auf das Klicken reagiert wird und verfolge, was passiert.


Felix.

Antworten
country joe
  • Forum-Beiträge: 6

16.02.2012, 13:57:32 via Website

Ich bin iwie zu doof mit eclipse zu debugen. Ich setze einen Brackpoint aber die App hält nie an egal wo der Brakepoint gesetzt ist.
Hab aber rausbekommen das die game Activity bei jedem klick neu startet.
Kann mir bitte jemand helfen. Ich bekomms einfach nicht hin und solangsam wirds echt frustrirend

Antworten
Felix
  • Forum-Beiträge: 259

16.02.2012, 21:52:22 via Website

Tach!

Vielleicht hast du ja mit Run statt Debug gestartet.


Felix.

Antworten