From f4ff6eaf1ceafb149f0a48989b7758383de481fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Thu, 17 Jun 2021 16:38:35 +0200 Subject: [PATCH] Improve randomness when generating board from template --- android/gradle.properties | 4 +-- lib/screens/home.dart | 75 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 72 insertions(+), 7 deletions(-) diff --git a/android/gradle.properties b/android/gradle.properties index 4bb5439..6bf54a6 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 108ef70..ff8ff8f 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; } -- GitLab