Bonjour à tous,

Je suis actuellement en train de développer un Taquin sur android studio, cependant, je suis confronté à un petit soucis :

Je génère mon image découpée et mélangée avec une case blanche, cependant, je ne sais pas trop comment identifier cette case blanche dans mon code afin de gérer les déplacements... j'ai fait des tests infructueux pour le moment et je vous avoue que je suis un peu agacé par un problème qui me paraît pourtant très simple...
Dans le code ci-dessous, vous verrez que je gère un tableau d'entier, il s'agit d'un outil qui me permettra de detecter la fin du jeu (une fois que le tableau sera dans l'ordre.)

Voici mon code source :

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
package com.example.antho.taquin_progmobile;
 
/**
 * Created by antho on 08/03/2017.
 */
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Chronometer;
import android.widget.GridView;
 
import java.util.Random;
 
 
public class Jeu extends AppCompatActivity {
 
 
 
    private  int tab[];
    private Bitmap img[];
    private GridView gridView;
    private ImageAdapter adapter;
 
 
 
 
 
 
 
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.jeu);
        System.out.println(tab);
        Chronometer simpleChronometer = (Chronometer) findViewById(R.id.simpleChronometer); // initiate a chronometer
        simpleChronometer.start(); // start a chronometer
 
 
 
            Intent res = getIntent();
            final int taille = res.getIntExtra("taille", 3);
            this.tab=new int[taille*taille];
            for (int i=0; i<taille-i; i++){
                tab[i]=i;
            }
 
            final int caseBlanche= tab.length-1;
 
            //Log.i("test", Integer.toString(getIntent().getIntExtra("taille", 0)));
            Bitmap image = BitmapFactory.decodeResource(this.getResources(), R.drawable.pinkfloyd);
            img= getCutImages(taille, Bitmap.createScaledBitmap(image, 500, 500, true));
            gridView = (GridView) findViewById(R.id.gridView);
           adapter = new ImageAdapter(this, img);
            shuffleImages(img, adapter);
            gridView.setAdapter(adapter);
 
            gridView.setNumColumns(taille);
 
        // Colonne 1 gerée
 
            gridView.setOnItemClickListener(new AdapterView.OnItemClickListener()
            {
                public void onItemClick(AdapterView<?> parent,
                                        View v, int position, long id)
                {
                    System.out.println(caseBlanche);
                    int tmp;
                    Bitmap tmp2;
                    gridView.setAdapter(adapter);
 
 
                    // Si on à une case à droite de la case selectionnée
                    // Si cette case est la case blanche
                    if( position%taille!=(taille-1) && tab[position+1]==tab[caseBlanche]){
                        tmp = tab[position + 1];
                        tab[position + 1] = tab[position];
                        tab[position] = tmp;
                        tmp2 = img[position + 1];
                        img[position+1] = img[position];
                        img[position]=tmp2;
                    }
 
                    // Si on est pas sur la première colonne
                    // Si la case à gauche de la case selectionnée est la case blanche
                    if(position%taille!=0 && tab[position-1]==tab[caseBlanche]){
                        tmp= tab[position-1];
                        tab[position-1]=tab[position];
                        tab[position]=tmp;
                        tmp2=img[position-1];
                        img[position-1]=img[position];
                        img[position]=tmp2;
                    }
 
                    //S'il y a une case en haut de la case selectionnée
                    //Si elle est blanche
                    if(position-taille>=0 && tab[position-taille]==tab[caseBlanche])
                    {
                        tmp=tab[position-taille];
                        tab[position-taille]=tab[position];
                        tab[position]=tmp;
                        tmp2=img[position-taille];
                        img[position-taille]=img[position];
                        img[position]=tmp2;
                    }
 
                    //S'il y a une case en bas de la case selectionnée
                    //Si elle est blanche
                    if(position+taille <=(taille*taille) && tab[position+taille]==tab[caseBlanche]){
                        tmp=tab[position+taille];
                        tab[position+taille]=tab[position];
                        tab[position]=tmp;
                        tmp2=img[position+taille];
                        img[position+taille]=img[position];
                        img[position]=tmp2;
 
                    }
                    }
 
 
 
            });
        }
 
        private void shuffleImages(Bitmap[] images, ImageAdapter adapter) {
            int size = images.length-1;
            int cote = (int) Math.sqrt(size + 1);
            int position = size;
            int cpt = 0;
            int newPosition;
            Random r = new Random();
            int tmp;
 
            while (cpt < 500) {
                newPosition = r.nextInt(size);
 
                if (newPosition == position + 1 || newPosition == position -1 || newPosition == position + cote || newPosition == position - cote) {
                    adapter.exchangePositions(position, newPosition);
                    tmp = tab[position];
                    tab[position]=tab[newPosition];
                    tab[newPosition]=tmp;
                    position = newPosition;
 
 
 
                    cpt++;
                }
            }
        }
 
        private Bitmap[] getCutImages(int factor, Bitmap image) {
            Bitmap[] bmp = new Bitmap[factor*factor];
            int width=image.getWidth();
            int height=image.getHeight();
            for(int i = 0; i < factor; i++){
                for(int j = 0; j < factor; j++){
                    if (i*factor + j != factor*factor - 1) {
                        bmp[i * factor + j] = Bitmap.createBitmap(image, j * (width / factor), i * (height / factor), width / factor, height / factor);
                    } /*else {
                        bmp[i * factor + j] = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.images), j * (width / factor), i * (height / factor), false);
                    }*/
                }
            }
            return bmp;
        }
    }

En vous remerciant d'avance pour l'aide que vous pourrez m'apporter !


Anthony