Commit 4689a1e8 authored by Lila NICKLER's avatar Lila NICKLER

Exercice 7 difficulté + condition de victoire + nb de déplacement

parent fe141d90
Pipeline #1069 canceled with stages
...@@ -30,13 +30,29 @@ class TileUp { ...@@ -30,13 +30,29 @@ class TileUp {
); );
} }
} }
class TileWidget extends StatelessWidget
{
TileUp tile;
int size;
@override
TileWidget(this.tile, this.size);
Widget build(BuildContext context) {
return Container (
child: tile.croppedImageTile(size)
);
}
}
List <TileUp> createListTile (int value, String imageURL) List <TileUp> createListTile (int value, String imageURL)
{ {
double pas = (2/((value-1))); double pas = (2/((value-1)));
List <TileUp> _listTile = <TileUp>[]; List <TileUp> _listTile = <TileUp>[];
double i; double i;
double j; double j;
int index =0; int index = 0;
for(i = -1 ; i <=1; i+=pas) for(i = -1 ; i <=1; i+=pas)
{ {
for (j=-1; j<=1; j +=pas) { for (j=-1; j<=1; j +=pas) {
...@@ -48,16 +64,11 @@ List <TileUp> createListTile (int value, String imageURL) ...@@ -48,16 +64,11 @@ List <TileUp> createListTile (int value, String imageURL)
} }
return _listTile; return _listTile;
} }
Widget createTileUpWidgetFrom(TileUp tile, int size) {
return InkWell(
child: tile.croppedImageTile(size),
);
}
List<Widget> createWidgetList(List<TileUp> lt,int size){ List<Widget> createWidgetList(List<TileUp> lt,int size){
List<Widget> lw =<Widget>[]; List<Widget> lw =<Widget>[];
for(int i=0;i<lt.length;i++){ for(int i=0;i<lt.length;i++){
lw.add(createTileUpWidgetFrom(lt[i], size)); lw.add(new TileWidget(lt[i], size));
} }
return lw; return lw;
} }
...@@ -68,13 +79,18 @@ class ImageGridViewTileSwap extends StatefulWidget{ ...@@ -68,13 +79,18 @@ class ImageGridViewTileSwap extends StatefulWidget{
} }
class _ImageGridViewTileSwapState extends State<ImageGridViewTileSwap> { class _ImageGridViewTileSwapState extends State<ImageGridViewTileSwap> {
int _currentSliderValue = 3; int sizeofGrid = 3;
double difficulty = 1;
String imageURL = "https://picsum.photos/512"; String imageURL = "https://picsum.photos/512";
List <Widget> _listTile = createWidgetList(createListTile(3,"https://picsum.photos/512"), 3); List <TileUp> _listTile = createListTile(3, "https://picsum.photos/512");
List <Widget> _listTileWidget = createWidgetList(
createListTile(3, "https://picsum.photos/512"), 3);
int indexSwap = 0; int indexSwap = 0;
bool isWin = false;
int nbDeplacement = 0;
TextStyle style = TextStyle(fontSize: 20, color: Colors.deepPurple);
GridView creatGridView(List <Widget> _listTile, int value) GridView creatGridView(List <Widget> _listTile, int value) {
{
return GridView.builder( return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: value, crossAxisCount: value,
...@@ -100,16 +116,18 @@ class _ImageGridViewTileSwapState extends State<ImageGridViewTileSwap> { ...@@ -100,16 +116,18 @@ class _ImageGridViewTileSwapState extends State<ImageGridViewTileSwap> {
child: InkWell( child: InkWell(
child: _listTile[index], child: _listTile[index],
onTap: () { onTap: () {
if (index == indexSwap -1 || index == indexSwap +1 || index == indexSwap -_currentSliderValue || index == indexSwap +_currentSliderValue ) if (index == indexSwap - 1 || index == indexSwap + 1 ||
{ index == indexSwap - sizeofGrid ||
index == indexSwap + sizeofGrid) {
swapTiles(index, indexSwap); swapTiles(index, indexSwap);
} }
isWin = win();
}, },
) )
); );
} }
} }
); );
} }
Widget build(BuildContext context) { Widget build(BuildContext context) {
...@@ -123,92 +141,145 @@ class _ImageGridViewTileSwapState extends State<ImageGridViewTileSwap> { ...@@ -123,92 +141,145 @@ class _ImageGridViewTileSwapState extends State<ImageGridViewTileSwap> {
scrollDirection: Axis.vertical, scrollDirection: Axis.vertical,
shrinkWrap: true, shrinkWrap: true,
children: [ children: [
Container (
child: Align(
alignment: Alignment.center ,
child: Text("Nombre de déplacement", style: style)),
),
Container(
child: Align(
alignment: Alignment.center,
child:Text(nbDeplacement.toString(),style: style),)
),
SizedBox( SizedBox(
height: 500, height: 500,
width: 400, width: 400,
child:Container( child: Container(
child: creatGridView(_listTile,_currentSliderValue) child: creatGridView(_listTileWidget, sizeofGrid)
), ),
), ),
isWin?Container(
child: Align (
alignment: Alignment.center,
child: Text("Gagné!",style: TextStyle(fontSize: 30, color: Colors.blue))
)
): Container(),
Container(
child: Align(
alignment: Alignment.center ,
child: Text("Taille de l'image",
style: TextStyle(fontSize: 20, color: Colors.deepPurple)),)
),
Container( Container(
width: mediaQueryData.size.width * (7 / 8), width: mediaQueryData.size.width * (7 / 8),
child: Slider( child: Slider(
value: _currentSliderValue.toDouble(), value: sizeofGrid.toDouble(),
min: 2, min: 2,
max: 10, max: 10,
divisions: 9, divisions: 9,
label: _currentSliderValue.round().toString(), label: sizeofGrid.round().toString(),
onChanged: (double value) { onChanged: (double value) {
setState(() { setState(() {
indexSwap = 0; indexSwap = 0;
_currentSliderValue = value.toInt(); sizeofGrid = value.toInt();
_listTile = createWidgetList(createListTile(_currentSliderValue,"https://picsum.photos/512"), _currentSliderValue); _listTile = createListTile(sizeofGrid, "https://picsum.photos/512");
_listTileWidget = createWidgetList(_listTile, sizeofGrid);
isWin= false;
}); });
}),) }),),
Container(
child: Align(
alignment: Alignment.center,
child: Text("Difficulté",
style: TextStyle(fontSize: 20, color: Colors.deepPurple)),)
),
Container(
width: mediaQueryData.size.width * (7 / 8),
child: Slider(
value: difficulty,
min: 1,
max: 5,
divisions: 4,
label: difficulty.toString(),
onChanged: (double value) {
setState(() {
difficulty = value;
});
}
),
),
], ],
) )
), ),
floatingActionButton: FloatingActionButton( floatingActionButton: FloatingActionButton(
onPressed: () { onPressed: () {
mixTiles(100); mixTiles((difficulty.toInt()^difficulty.toInt()*20)*200);
isWin = false;
nbDeplacement = 0;
}, },
child: Icon(Icons.play_arrow_rounded), child: Icon(Icons.play_arrow_rounded),
backgroundColor: Colors.deepPurple, backgroundColor: Colors.deepPurple,
), ),
floatingActionButtonLocation:FloatingActionButtonLocation.centerDocked floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked
); );
} }
swapTiles(int index1, int emptyIndex) { swapTiles(int index1, int emptyIndex) {
setState(() { setState(() {
print("Button pressed"); nbDeplacement ++;
_listTile.insert(index1, _listTile.removeAt(emptyIndex)); _listTileWidget.insert(index1, _listTileWidget.removeAt(emptyIndex));
if (index1 == _currentSliderValue+emptyIndex ) if (index1 == sizeofGrid + emptyIndex) {
{ _listTileWidget.insert(emptyIndex, _listTileWidget.removeAt(index1 - 1));
_listTile.insert(emptyIndex, _listTile.removeAt(index1-1));
} }
if (index1 == emptyIndex -_currentSliderValue) if (index1 == emptyIndex - sizeofGrid) {
{ _listTileWidget.insert(emptyIndex, _listTileWidget.removeAt(index1 + 1));
_listTile.insert(emptyIndex, _listTile.removeAt(index1+1));
} }
indexSwap = index1; indexSwap = index1;
}); });
} }
mixTiles(int mixMouvement) mixTiles(int mixMovement) {
{
Random random = new Random (); Random random = new Random ();
int rng = random.nextInt(3); int rng = random.nextInt(3);
int mouvement ; int mouvement;
indexSwap = random.nextInt(_currentSliderValue); indexSwap = random.nextInt(sizeofGrid*sizeofGrid);
for (int i = 0; i < mixMovement; i++) {
rng = random.nextInt(3);
switch (rng) {
case 0:
mouvement = indexSwap + 1;
break;
case 1:
mouvement = indexSwap - 1;
break;
case 2:
mouvement = indexSwap - sizeofGrid;
break;
case 3:
mouvement = indexSwap + sizeofGrid;
}
if (mouvement > (sizeofGrid * sizeofGrid) - 1 ||
mouvement < 0) {
mouvement = indexSwap;
}
swapTiles(mouvement, indexSwap);
}
}
for (int i = 0; i<mixMouvement; i++) bool win()
{
TileWidget tileWidget;
bool isWin = true;
for (int i =0; i<sizeofGrid*sizeofGrid; i++)
{ {
rng = random.nextInt(3); tileWidget = _listTileWidget[i];
switch (rng){ if ( tileWidget.tile.index != i )
{
case 0: isWin = false;
mouvement = indexSwap +1; }
break;
case 1:
mouvement = indexSwap -1;
break;
case 2:
mouvement = indexSwap - _currentSliderValue;
break;
case 3:
mouvement = indexSwap + _currentSliderValue;
}
if (mouvement > (_currentSliderValue * _currentSliderValue )-1 || mouvement < 0)
{
mouvement = indexSwap;
}
print (mouvement);
print(indexSwap);
swapTiles(mouvement, indexSwap);
} }
return isWin;
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment