diff --git a/android/gradle.properties b/android/gradle.properties index 4bb5439f682100f8ef4ba80a557fe4f2f0ab14c2..6bf54a6ed821c19f76d860d4a24e7c85d440b575 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.9 -app.versionCode=9 +app.versionName=0.0.10 +app.versionCode=10 diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 108ef70d4dfec45476167796da4bd3f6283fc900..ff8ff8f1bfbee14a1af5fbd6838dd94b827f3f44 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -23,6 +23,20 @@ class Home extends StatelessWidget { pickGrid(myProvider); } + printGrid(List cells) { + print(''); + print('-------'); + for (var rowIndex = 0; rowIndex < cells.length; rowIndex++) { + String row = ''; + for (var colIndex = 0; colIndex < cells[rowIndex].length; colIndex++) { + row += cells[rowIndex][colIndex].value.toString(); + } + print(row); + } + print('-------'); + print(''); + } + Future<void> pickGrid(Data myProvider) async { int size = myProvider.size; @@ -37,26 +51,77 @@ class Home extends StatelessWidget { } if (grid.length == pow(size, 4)) { - List cells = createBoardFromTemplate(grid); - myProvider.updateCells = cells; + myProvider.updateCells = createBoardFromTemplate(grid); } } List createBoardFromTemplate(String grid) { List cells = []; int size = int.parse(pow(grid.length, 1/4).toStringAsFixed(0)); + int sideLength = pow(size, 2); int index = 0; - for (var rowIndex = 0; rowIndex < pow(size, 2); rowIndex++) { + for (var rowIndex = 0; rowIndex < sideLength; rowIndex++) { List row = []; - for (var colIndex = 0; colIndex < pow(size, 2); colIndex++) { + for (var colIndex = 0; colIndex < sideLength; colIndex++) { int value = int.parse(grid[index++]); row.add(Cell(value, colIndex, rowIndex, (value != 0))); } cells.add(row); } - // TODO: shuffle/flip/rotate grid + List<String> allowedFlip = ['', 'horizontal', 'vertical']; + List<String> allowedRotate = ['', 'left', 'right']; + + var rand = new Random(); + String flip = allowedFlip[rand.nextInt(allowedFlip.length)]; + String rotate = allowedRotate[rand.nextInt(allowedRotate.length)]; + + switch(flip) { + case 'horizontal': { + List transformedBoard = createEmptyBoard(size); + for (var rowIndex = 0; rowIndex < sideLength; rowIndex++) { + for (var colIndex = 0; colIndex < sideLength; colIndex++) { + transformedBoard[rowIndex][colIndex] = cells[sideLength - rowIndex - 1][colIndex]; + } + } + cells = transformedBoard; + } + break; + case 'vertical': { + List transformedBoard = createEmptyBoard(size); + for (var rowIndex = 0; rowIndex < sideLength; rowIndex++) { + for (var colIndex = 0; colIndex < sideLength; colIndex++) { + transformedBoard[rowIndex][colIndex] = cells[rowIndex][sideLength - colIndex - 1]; + } + } + cells = transformedBoard; + } + break; + } + + switch(rotate) { + case 'left': { + List transformedBoard = createEmptyBoard(size); + for (var rowIndex = 0; rowIndex < sideLength; rowIndex++) { + for (var colIndex = 0; colIndex < sideLength; colIndex++) { + transformedBoard[rowIndex][colIndex] = cells[colIndex][sideLength - rowIndex - 1]; + } + } + cells = transformedBoard; + } + break; + case 'right': { + List transformedBoard = createEmptyBoard(size); + for (var rowIndex = 0; rowIndex < sideLength; rowIndex++) { + for (var colIndex = 0; colIndex < sideLength; colIndex++) { + transformedBoard[rowIndex][colIndex] = cells[sideLength - colIndex - 1][rowIndex]; + } + } + cells = transformedBoard; + } + break; + } return cells; }