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;
}
} |
Partager