diff --git a/android/gradle.properties b/android/gradle.properties index 32638a39cd697ca58b0dd482eb1cd46e5e051809..1f1e18fde2fb2162defa4f04b777246542b50926 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.35 -app.versionCode=35 +app.versionName=0.0.36 +app.versionCode=36 diff --git a/fastlane/metadata/android/en-US/changelogs/36.txt b/fastlane/metadata/android/en-US/changelogs/36.txt new file mode 100644 index 0000000000000000000000000000000000000000..33e10a2961d887326307b8f76d86c2b7a675fe96 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/36.txt @@ -0,0 +1 @@ +Add abstraction to allow other games implementation. diff --git a/fastlane/metadata/android/fr-FR/changelogs/36.txt b/fastlane/metadata/android/fr-FR/changelogs/36.txt new file mode 100644 index 0000000000000000000000000000000000000000..d2ec7c432726503b0ac1eeaf55a99bae1047f358 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/36.txt @@ -0,0 +1 @@ +Ajout d'abstraction pour permettre l'implémentation d'autres jeux. diff --git a/lib/entities/moving_tile.dart b/lib/entities/moving_tile.dart new file mode 100644 index 0000000000000000000000000000000000000000..cdcc109e05ea29f95426e051c4d55128f406bca2 --- /dev/null +++ b/lib/entities/moving_tile.dart @@ -0,0 +1,93 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +import 'tile.dart'; +import '../provider/data.dart'; + +class MovingTile extends Tile { + int currentCol; + int currentRow; + + MovingTile( + image, + size, + originalCol, + originalRow, + this.currentCol, + this.currentRow + ): super( + image, + size, + originalCol, + originalRow + ); + + Container _tileWidget() { + return Container( + decoration: BoxDecoration( + color: Colors.black, + border: Border.all( + color: Colors.black, + width: 1, + ), + ), + child: Image( + image: this.image.image, + width: this.size, + height: this.size, + fit: BoxFit.fill + ), + ); + } + + Container widget(Data myProvider) { + return Container( + child: DragTarget<List<int>>( + builder: ( + BuildContext context, + List<dynamic> accepted, + List<dynamic> rejected, + ) { + return Container( + height: this.size, + width: this.size, + color: Colors.cyan, + child: Draggable<List<int>>( + data: [ + this.currentCol, + this.currentRow, + ], + + // Widget when draggable is stationary + child: this._tileWidget(), + + // Widget when draggable is being dragged + feedback: this._tileWidget(), + + // Widget to display on original place when being dragged + childWhenDragging: Container( + height: this.size, + width: this.size, + color: Colors.pinkAccent, + ), + ), + ); + }, + onAccept: (List<int> data) { + myProvider.swapTiles( + [this.currentCol, this.currentRow], + data + ); + }, + ) + ); + } + + bool isCorrect() { + return ( + (this.currentRow == this.originalRow) + && + (this.currentCol == this.originalCol) + ); + } +} diff --git a/lib/entities/tile.dart b/lib/entities/tile.dart index e60d059d49310ce9ef2ef689d3e27a2614390383..cab77ecbcf4f00258fedf49a64c488916dc8cba0 100644 --- a/lib/entities/tile.dart +++ b/lib/entities/tile.dart @@ -3,81 +3,22 @@ import 'package:provider/provider.dart'; import '../provider/data.dart'; -class Tile { +class Tile{ final Image image; final double size; - int currentCol; - int currentRow; final int originalCol; final int originalRow; Tile( @required this.image, @required this.size, - @required this.currentCol, - @required this.currentRow, @required this.originalCol, @required this.originalRow, ); - Container _tileWidget() { - return Container( - decoration: BoxDecoration( - color: Colors.black, - border: Border.all( - color: Colors.black, - width: 1, - ), - ), - child: Image( - image: this.image.image, - width: this.size, - height: this.size, - fit: BoxFit.fill - ), - ); - } - Container widget(Data myProvider) { - return Container( - child: DragTarget<List<int>>( - builder: ( - BuildContext context, - List<dynamic> accepted, - List<dynamic> rejected, - ) { - return Container( - height: this.size, - width: this.size, - color: Colors.cyan, - child: Draggable<List<int>>( - data: [ - this.currentCol, - this.currentRow, - ], - - // Widget when draggable is stationary - child: this._tileWidget(), - - // Widget when draggable is being dragged - feedback: this._tileWidget(), - - // Widget to display on original place when being dragged - childWhenDragging: Container( - height: this.size, - width: this.size, - color: Colors.pinkAccent, - ), - ), - ); - }, - onAccept: (List<int> data) { - myProvider.swapTiles( - [this.currentCol, this.currentRow], - data - ); - }, - ) - ); + return Container(); } + + bool isCorrect() {} } diff --git a/lib/provider/data.dart b/lib/provider/data.dart index a7571bc91e47812f282fc0b49e362a6ae12bfd7a..8255353a98e676e00921de6e8eaf22768a0e98fd 100644 --- a/lib/provider/data.dart +++ b/lib/provider/data.dart @@ -1,6 +1,6 @@ import 'package:flutter/foundation.dart'; -import '../entities/tile.dart'; +import '../entities/moving_tile.dart'; class Data extends ChangeNotifier { @@ -62,7 +62,7 @@ class Data extends ChangeNotifier { int indexTile1 = _tiles.indexWhere((tile) => ((tile.currentCol == tile1[0]) && (tile.currentRow == tile1[1]))); int indexTile2 = _tiles.indexWhere((tile) => ((tile.currentCol == tile2[0]) && (tile.currentRow == tile2[1]))); - Tile swap = _tiles[indexTile1]; + MovingTile swap = _tiles[indexTile1]; _tiles[indexTile1] = _tiles[indexTile2]; _tiles[indexTile2] = swap; diff --git a/lib/screens/home.dart b/lib/screens/home.dart index d6ba0effc4e5cd98d4b99d842af99718ccf0d046..783b1b834c6e2480fdf1500ea66371bd1d525884 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -8,6 +8,7 @@ import 'package:image/image.dart' as imglib; import 'package:provider/provider.dart'; import '../entities/tile.dart'; +import '../entities/moving_tile.dart'; import '../provider/data.dart'; import '../utils/get_images_list.dart'; @@ -141,7 +142,7 @@ class Home extends StatelessWidget { ); } - List<Tile> shuffleTiles(List<Tile> tiles) { + List<MovingTile> shuffleMovingTiles(List<MovingTile> tiles) { var random = new Random(); int tilesCount = tiles.length; @@ -149,7 +150,7 @@ class Home extends StatelessWidget { int indexTile1 = random.nextInt(tilesCount); int indexTile2 = random.nextInt(tilesCount); - Tile swap = tiles[indexTile1]; + MovingTile swap = tiles[indexTile1]; tiles[indexTile1] = tiles[indexTile2]; tiles[indexTile2] = swap; @@ -176,11 +177,11 @@ class Home extends StatelessWidget { int width = (image.width / myProvider.tilesCount).round(); int height = (image.height / myProvider.tilesCount).round(); - List<Tile> tiles = List<Tile>(); + List<MovingTile> tiles = List<MovingTile>(); for (int i = 0; i < myProvider.tilesCount; i++) { for (int j = 0; j < myProvider.tilesCount; j++) { tiles.add( - Tile( + MovingTile( Image.memory( imglib.encodeJpg( imglib.copyCrop(image, x, y, width, height) @@ -198,28 +199,23 @@ class Home extends StatelessWidget { y += height; } - myProvider.updateTiles = shuffleTiles(tiles); + myProvider.updateTiles = shuffleMovingTiles(tiles); myProvider.updateIsShufflingBoard = false; } - bool _checkTilesetIsOrdered(List<Tile> tiles) { + bool _checkTilesetIsCleared(List<Tile> tiles) { for (Tile tile in tiles) { - if ( - (tile.currentRow != tile.originalRow) - || - (tile.currentCol != tile.originalCol) - ) { + if (!tile.isCorrect()) { return false; } } - return true; } Container _buildTilesetWidget(Data myProvider) { List tiles = myProvider.tiles; - Color borderColor = _checkTilesetIsOrdered(tiles) ? Colors.green : Colors.orange; + Color borderColor = _checkTilesetIsCleared(tiles) ? Colors.green : Colors.orange; int tileIndex = 0; Table tileset = Table( @@ -292,7 +288,7 @@ class Home extends StatelessWidget { children: [ _buildTilesetWidget(myProvider), SizedBox(height: 20), - _checkTilesetIsOrdered(myProvider.tiles) ? _buildWinMessage(myProvider) : _buildTipWidget(myProvider), + _checkTilesetIsCleared(myProvider.tiles) ? _buildWinMessage(myProvider) : _buildTipWidget(myProvider), ], ), );