Okay, j'ai donc mis l'option souhaité.
Cependant l'application bugg toujours dès le départ ... j'arrive sur mon menu mais lorsque je souhaite accéder au .Jeu, l'application plante ...
Okay, j'ai donc mis l'option souhaité.
Cependant l'application bugg toujours dès le départ ... j'arrive sur mon menu mais lorsque je souhaite accéder au .Jeu, l'application plante ...
Bonjour,
Juste pour rajouter une petite précision . As tu bien déclarer ta nouvelle classe "Jeu" dans ton manifest ?
Comme te l'as souligné malgache quand tu as une erreur n'hésite pas à utiliser le débugger et autre log pour mieux comprendre ton code , ainsi que quand tu poste une nouvelle réponse sur le forum met également l'erreur que tu trouveras dans le logcat. (si erreur il y a ).
Responsable Android de Developpez.com (Twitter et Facebook)
Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.
Merci tu avais raison pour le manifest
Pour le coup j'ai un écran noir, du au fait qu'il ne doit pas voir que j'appelle un écran en particulier.
Je vais tacher d'y remédier.
Par ailleurs je suivrais tes conseils sur les logcat lors de mes prochains posts.
Merci
Bonjour,
Je n'ai plus aucune erreur en console , cependant j'ai un écran noir qui s'affiche alors que j'ai un layout non vide qui devrait apparaître ...
Y a t il une erreur courante qui explique cela ?
Merci
Bonjour,
Est ce que tu as un SetContentView(tonlayout) dans le onCreate de ta nouvelle Activity ?
Sinon montre nous ce que tu as comme code dans ce OnCreate .
Responsable Android de Developpez.com (Twitter et Facebook)
Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.
Exact, je n'avais pas de OnCreate, juste un pour le menu ... Merci pour ton aide
J'ai une autre question concernant toujours mon jeu, donc je le poste à l’intérieur.
Comment puis demander : si tous les boutons sont invisibles alors ... ?
Je n'arrive pas à trouver la commande avec les "if".
(histoire de faire un layout, bravo vous avez gagné)
Merci
Bonjour,
Pourquoi ne pas utiliser une variable (byte(8) ) sur lequel tu l'initialiserais à 0.Comment puis demander : si tous les boutons sont invisibles alors ... ?
Je n'arrive pas à trouver la commande avec les "if".
Puis à chaque fois qu'un bouton devient visible +1 et chaque fois qu'un bouton devient invisible -1 .
Si ta variable ==0 alors tous les boutons sont invisibles .
Sinon tu peux toujours modifier un bit par bouton (1-> visible , 0 -> invisible )
Pareil pour le test si ta variable est égal à 0 tes boutons sont invisibles , tu pourras savoir également quel bouton est actif avec cette méthode.
Sinon le test pour savoir si un bouton est visible
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (button.getVisibility() != View.VISIBLE)
Responsable Android de Developpez.com (Twitter et Facebook)
Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.
Tout dépend e comment tu as gérer le jeu.
Quand l'utilisateur trouve une paire, t'en fait quoi de cette paire? Tu agis sur des éléments? Sur une liste?
Je vais essayer la méthode de la variable c'est plutôt malin
Code : Sélectionner tout - Visualiser dans une fenêtre à part public int t;puis je met dans le OnCreate : (le 2 n'est là que pour tester)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if(cards[seconedCard.x][seconedCard.y] == cards[firstCard.x][firstCard.y]){ firstCard.button.setVisibility(View.INVISIBLE); seconedCard.button.setVisibility(View.INVISIBLE); t = t++; }
Mais le problème que j'ai pour le coup, c'est que cette variable t n'est pas reconnue
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if (t == 2) { setContentView(R.layout.score); }
Malgache : la paire je la retourne avec la méthode ci dessus.
Tu définis t en variable de classe?
Et la tu fais un +1 quand ca devient invisible si je me trompe pas, faurai plutot faire un -1 sinon ta vérification sera pas lorsque ta variable est égale à 0 mais à ton nombre x/2 de bouton (vu que tu rend invisible deux boutons en même temps)
Et d'ailleurs, vu que tu rend invisible deux boutons en même tend, il faudrait soit te baser sur ton nombre de bouton /2 soit tu fais des +2 et -2...Si je me trompe pas ^^
Oui ton raisonnement est juste, mais je fais cela autrement. La je lui dis t=t+1 seulement quand il retourne les cartes et les met invisibles.
Donc ayant 6 paires par exemple, une fois t=6 alors les 6 paires sont retournés. donc le jeu est fini.
Je l'ai codé comme cela.
Et pourquoi le définir en variable de classe pose problème ?
Justement si tu veux qu'elle soit reconnus dans plusieurs méthode il faut que ta variable soit définie en tant que variable de classe ^^
aAors je crois que oui je l'ai mis en variable de classe.
Avec tous mes : public ou private au début
Mais il ne le reconnait pas lorsque j'essaye de lui signifier : "C'est bon tu as fini !! si si je t'assure y a plus aucune carte ..."
tu peux montrer le code de ta classe?
ouaip :
si je reprend que les passages qui sont interessants :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327 package com.aviy.memory; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.Gravity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.Spinner; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemSelectedListener; public class Jeu1 extends Activity implements OnClickListener{ //variable necessaire private static int ROW_COUNT = -1; private static int COL_COUNT = -1; private Context context; private Drawable backImage; private int [] [] cards; private List<Drawable> images; private Card firstCard; private Card seconedCard; private ButtonListener buttonListener; public int t=0; private static Object lock = new Object(); int turns; private TableLayout mainTable; private UpdateCardsHandler handler; Button Facile = null; @Override //affichage du menu public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.monmenu, menu); return true; } public boolean onMenuItemSelected(int featureId,MenuItem item){ switch (item.getItemId()){ case R.id.Regles: Toast.makeText(this,"pour jouer cliquez sur new game et selectionner une taille de grille, puis trouvez les paires !",Toast.LENGTH_SHORT).show(); return true; case R.id.Quitter: finish(); return true; case R.id.Auteur: Toast.makeText(this,"ECOCO2",Toast.LENGTH_SHORT).show(); } return super.onMenuItemSelected(featureId, item); } //fin pour le menu //ON CREATE public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); handler = new UpdateCardsHandler(); loadImages(); setContentView(R.layout.main); backImage = getResources().getDrawable(R.drawable.solosfond); buttonListener = new ButtonListener(); mainTable = (TableLayout)findViewById(R.id.TableLayout03); context = mainTable.getContext(); Facile=(Button)findViewById(R.id.button1); Facile.setOnClickListener(this);} public void onClick(View v){ if(v==Facile){ newGame(3,4); //Facile.setBackgroundColor(R.drawable.boutonrejouez); } if (t == 2) { Intent monIntent=new Intent(this,Score.class); startActivity(monIntent); } } //genere la nouvelle partie private void newGame(int c, int r) { ROW_COUNT = 4; COL_COUNT = 3; cards = new int [COL_COUNT] [ROW_COUNT]; //enleve le menu principal mainTable.removeView(findViewById(R.id.TableRow02)); TableRow tr = ((TableRow)findViewById(R.id.TableRow03)); tr.removeAllViews(); //cré un nouvel affichage mainTable = new TableLayout(context); tr.addView(mainTable); /*context.setBackgroundDrawable(R.drawable.fond);*/ for (int y = 0; y < ROW_COUNT; y++) { mainTable.addView(createRow(y)); } firstCard=null; loadCards(); //affiche le score turns=0; ((TextView)findViewById(R.id.tv1)).setText("Score: "+turns); } //charge les images private void loadImages() { images = new ArrayList<Drawable>(); images.add(getResources().getDrawable(R.drawable.card1)); images.add(getResources().getDrawable(R.drawable.card2)); images.add(getResources().getDrawable(R.drawable.card3)); images.add(getResources().getDrawable(R.drawable.card4)); images.add(getResources().getDrawable(R.drawable.card5)); images.add(getResources().getDrawable(R.drawable.card6)); images.add(getResources().getDrawable(R.drawable.card7)); images.add(getResources().getDrawable(R.drawable.card8)); images.add(getResources().getDrawable(R.drawable.card9)); images.add(getResources().getDrawable(R.drawable.card10)); images.add(getResources().getDrawable(R.drawable.card11)); images.add(getResources().getDrawable(R.drawable.card12)); images.add(getResources().getDrawable(R.drawable.card13)); images.add(getResources().getDrawable(R.drawable.card14)); images.add(getResources().getDrawable(R.drawable.card15)); images.add(getResources().getDrawable(R.drawable.card16)); images.add(getResources().getDrawable(R.drawable.card17)); images.add(getResources().getDrawable(R.drawable.card18)); images.add(getResources().getDrawable(R.drawable.card19)); images.add(getResources().getDrawable(R.drawable.card20)); images.add(getResources().getDrawable(R.drawable.card21)); } //genre les cates dans les cases private void loadCards(){ try{ int size = ROW_COUNT*COL_COUNT; Log.i("loadCards()","size=" + size); ArrayList<Integer> list = new ArrayList<Integer>(); for(int i=0;i<size;i++){ list.add(new Integer(i)); } Random r = new Random(); for(int i=size-1;i>=0;i--){ int t=0; if(i>0){ t = r.nextInt(i); } t=list.remove(t).intValue(); // la division par 2 (sur le dernier size) met les cartes en doubles !! car deux cartes ont le mm nombre dans la matrice cards[i%COL_COUNT][i/COL_COUNT]=t%(size/2); Log.i("loadCards()", "card["+(i%COL_COUNT)+ "]["+(i/COL_COUNT)+"]=" + cards[i%COL_COUNT][i/COL_COUNT]); } } catch (Exception e) { Log.e("loadCards()", e+""); } } //cré les boutons sur chaque case du tableau private TableRow createRow(int y){ TableRow row = new TableRow(context); row.setHorizontalGravity(Gravity.CENTER); for (int x = 0; x < COL_COUNT; x++) { row.addView(createImageButton(x,y)); } return row; } //met un ecran par defaut sur chaque case du tableau (arriere de la carte) private View createImageButton(int x, int y){ Button button = new Button(context); button.setBackgroundDrawable(backImage); button.setId(100*x+y); button.setOnClickListener(buttonListener); return button; } //classe qui regarde ou l'utilisateur clique class ButtonListener implements OnClickListener { @Override public void onClick(View v) { synchronized (lock) { if(firstCard!=null && seconedCard != null){ return; } int id = v.getId(); int x = id/100; int y = id%100; turnCard((Button)v,x,y); } } //Création des cartes en doublon (mm coordonné proposé entre first et seconed) private void turnCard(Button button,int x, int y) { button.setBackgroundDrawable(images.get(cards[x][y])); if(firstCard==null){ firstCard = new Card(button,x,y, y, y); } else{ if(firstCard.x == x && firstCard.y == y){ return; //the user pressed the same card } seconedCard = new Card(button,x,y, y, y); //Faire une fonction pour tourner les cartes de facon jolie //public void addJavascriptInterface() //carte.rotate3Di('flip', 750, {sideChange: turnCard}); turns++; ((TextView)findViewById(R.id.tv1)).setText("Score: "+turns); TimerTask tt = new TimerTask() { @Override public void run() { try{ synchronized (lock) { handler.sendEmptyMessage(0); } } catch (Exception e) { Log.e("E1", e.getMessage()); } } }; Timer t = new Timer(false); t.schedule(tt, 1300); } } } class UpdateCardsHandler extends Handler{ @Override public void handleMessage(Message msg) { synchronized (lock) { checkCards(); } } //regarde les cartes public void checkCards(){ //si deux cartes identiques alors les deux deviennent invisible if(cards[seconedCard.x][seconedCard.y] == cards[firstCard.x][firstCard.y]){ firstCard.button.setVisibility(View.INVISIBLE); seconedCard.button.setVisibility(View.INVISIBLE); t = t++; } else { //sinon on remet l'image de fond seconedCard.button.setBackgroundDrawable(backImage); firstCard.button.setBackgroundDrawable(backImage); } //on remet à zéro les images firstCard=null; seconedCard=null; } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116 package com.aviy.memory; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.Gravity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.Spinner; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemSelectedListener; public class Jeu1 extends Activity implements OnClickListener{ //variable necessaire private static int ROW_COUNT = -1; private static int COL_COUNT = -1; private Context context; private Drawable backImage; private int [] [] cards; private List<Drawable> images; private Card firstCard; private Card seconedCard; private ButtonListener buttonListener; public int t=0; private static Object lock = new Object(); int turns; private TableLayout mainTable; private UpdateCardsHandler handler; Button Facile = null; //ON CREATE public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); handler = new UpdateCardsHandler(); loadImages(); setContentView(R.layout.main); backImage = getResources().getDrawable(R.drawable.solosfond); buttonListener = new ButtonListener(); mainTable = (TableLayout)findViewById(R.id.TableLayout03); context = mainTable.getContext(); Facile=(Button)findViewById(R.id.button1); Facile.setOnClickListener(this);} public void onClick(View v){ if(v==Facile){ newGame(3,4); //Facile.setBackgroundColor(R.drawable.boutonrejouez); } if (t == 2) { Intent monIntent=new Intent(this,Score.class); startActivity(monIntent); } } class UpdateCardsHandler extends Handler{ @Override public void handleMessage(Message msg) { synchronized (lock) { checkCards(); } } //regarde les cartes public void checkCards(){ //si deux cartes identiques alors les deux deviennent invisible if(cards[seconedCard.x][seconedCard.y] == cards[firstCard.x][firstCard.y]){ firstCard.button.setVisibility(View.INVISIBLE); seconedCard.button.setVisibility(View.INVISIBLE); t = t++; } else { //sinon on remet l'image de fond seconedCard.button.setBackgroundDrawable(backImage); firstCard.button.setBackgroundDrawable(backImage); } //on remet à zéro les images firstCard=null; seconedCard=null; } } }
Une variable t utilisé dans deux classes... =)
Cela pose problème donc ... Mais étant déclaré dans la première en tant que public, pourquoi la seconde ne la verrais pas et ne pourrais pas "jouer" avec ?
C'est dansque tu as une erreur avec t?
Code : Sélectionner tout - Visualiser dans une fenêtre à part class UpdateCardsHandler
C'est quoi l'erreur dans ton LogCat??
j'ai pas d'erreur
Juste il ne fait rien ... je ne bascule pas sur mon autre menu. Donc je pense qu'il ne voit pas le "t".
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager