diff --git a/android/gradle.properties b/android/gradle.properties index 6bf54a6ed821c19f76d860d4a24e7c85d440b575..f0be9fb67d6fe0b36ce90df03ff2f3f1551d738c 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -app.versionName=0.0.10 -app.versionCode=10 +app.versionName=0.0.11 +app.versionCode=11 diff --git a/lib/entities/tile.dart b/lib/entities/tile.dart index 2860b50f6df50c69071adb71fdd6f51325e5c189..e60d059d49310ce9ef2ef689d3e27a2614390383 100644 --- a/lib/entities/tile.dart +++ b/lib/entities/tile.dart @@ -6,8 +6,8 @@ import '../provider/data.dart'; class Tile { final Image image; final double size; - final int currentCol; - final int currentRow; + int currentCol; + int currentRow; final int originalCol; final int originalRow; @@ -72,7 +72,6 @@ class Tile { ); }, onAccept: (List<int> data) { - print(data.toString()); myProvider.swapTiles( [this.currentCol, this.currentRow], data diff --git a/lib/provider/data.dart b/lib/provider/data.dart index 3f05b5a9e4502d4cfd166146c4d237938dd2e2a3..6980aa51593fd5019406361661ab67a0315d626f 100644 --- a/lib/provider/data.dart +++ b/lib/provider/data.dart @@ -58,6 +58,14 @@ class Data extends ChangeNotifier { _tiles[indexTile1] = _tiles[indexTile2]; _tiles[indexTile2] = swap; + int swapCol = _tiles[indexTile1].currentCol; + _tiles[indexTile1].currentCol = _tiles[indexTile2].currentCol; + _tiles[indexTile2].currentCol = swapCol; + + int swapRow = _tiles[indexTile1].currentRow; + _tiles[indexTile1].currentRow = _tiles[indexTile2].currentRow; + _tiles[indexTile2].currentRow = swapRow; + notifyListeners(); } diff --git a/lib/screens/home.dart b/lib/screens/home.dart index a2fdd2fce8553d080f9c430aabe910ef3fc5bdec..c9784883d5e46dac8242a7f209b2a4ade6f259af 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -1,4 +1,5 @@ import 'dart:typed_data'; +import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart' show rootBundle; @@ -143,6 +144,30 @@ class Home extends StatelessWidget { ); } + List<Tile> shuffleTiles(List<Tile> tiles) { + var random = new Random(); + int tilesCount = tiles.length; + + for (int i = 0; i < 40; i++) { + int indexTile1 = random.nextInt(tilesCount); + int indexTile2 = random.nextInt(tilesCount); + + Tile swap = tiles[indexTile1]; + tiles[indexTile1] = tiles[indexTile2]; + tiles[indexTile2] = swap; + + int swapCol = tiles[indexTile1].currentCol; + tiles[indexTile1].currentCol = tiles[indexTile2].currentCol; + tiles[indexTile2].currentCol = swapCol; + + int swapRow = tiles[indexTile1].currentRow; + tiles[indexTile1].currentRow = tiles[indexTile2].currentRow; + tiles[indexTile2].currentRow = swapRow; + } + + return tiles; + } + Future<List<Tile>> splitImageInTiles(Data myProvider) async { String imageAsset = getImageAssetName(myProvider.image); Uint8List imageData = (await rootBundle.load(imageAsset)) @@ -176,14 +201,27 @@ class Home extends StatelessWidget { y += height; } - tiles.shuffle(); + return shuffleTiles(tiles); + } - return tiles; + bool _checkTilesetIsOrdered(List<Tile> tiles) { + for (Tile tile in tiles) { + if ( + (tile.currentRow != tile.originalRow) + || + (tile.currentCol != tile.originalCol) + ) { + return false; + } + } + + return true; } Container _buildTilesetWidget(Data myProvider) { List tiles = myProvider.tiles; + Color borderColor = _checkTilesetIsOrdered(tiles) ? Colors.green : Colors.orange; int tileIndex = 0; Table tileset = Table( @@ -204,14 +242,14 @@ class Home extends StatelessWidget { ); return Container( - margin: EdgeInsets.all(4), - padding: EdgeInsets.all(4), + margin: EdgeInsets.all(8), + padding: EdgeInsets.all(8), decoration: BoxDecoration( - color: Colors.blue, - borderRadius: BorderRadius.circular(4), + color: borderColor, + borderRadius: BorderRadius.circular(8), border: Border.all( - color: Colors.green, - width: 4, + color: borderColor, + width: 8, ), ), child: tileset, @@ -226,7 +264,7 @@ class Home extends StatelessWidget { color: Colors.blue, borderRadius: BorderRadius.circular(4), border: Border.all( - color: Colors.green, + color: Colors.blue, width: 4, ), ),