Skip to content
Snippets Groups Projects
Commit 94c64839 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Merge branch '5-add-generate-initial-board-feature' into 'master'

Resolve "Add generate initial board feature"

Closes #5

See merge request !5
parents fdbb61f9 7b7d229f
No related branches found
No related tags found
1 merge request!5Resolve "Add generate initial board feature"
Pipeline #1374 passed
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
app.versionName=0.0.3
app.versionCode=3
app.versionName=0.0.4
app.versionCode=4
{
"templates": {
"2x2": {
"easy": [
"0000320400210100",
"0003034000040000",
"0402000000004020",
"0002001443002000",
"4312020000000020"
],
"medium": [
"3012200003000000",
"0003104030002100",
"0410100400000030",
"0100000030120000"
],
"hard": [
"0001000003000034",
"1000032000040002",
"0420000000100040",
"0300010010030240"
]
},
"3x3": {
"easy": [
"402370008801000000009086400108020000200060009000090207006450100000000603700032905",
"000100035060203000020059041002008304000000000509600700450320010000401070780005000",
"000130000070960050596000001000700105380000079704009000800000243040083010000091000",
"000300000001006030384200100700083056600000003830610002008005649060400200000002000"
],
"medium": [
"800050003004902700000340600305100800200030001001008409006093000003807200100060004",
"020000370500036029000200605004701006000000000600904100802009000950340007043000050",
"005060300091000005206400078000957010000000000080143000510004709900000620002030500",
"040006090080000320090570040005307900800090004009804200050089030073000010010700060"
],
"hard": [
"010900700050000060006207900600700080320804096080006007005602300060000010008003040",
"000009850900600402007050001000000093861000724730000000100020600406003009092800000",
"064900100000020006107006090000050364030000010576040000090500201700090000005007680",
"008007010512000370470051000000705900000010000004306000000560098045000763030900100"
]
}
}
}
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../entities/cell.dart';
import '../provider/data.dart';
import '../utils/random_pick_grid.dart';
class Home extends StatelessWidget {
static const String id = 'home';
......@@ -17,21 +20,54 @@ class Home extends StatelessWidget {
Future<void> startGame(Data myProvider) async {
myProvider.updateStateRunning = true;
myProvider.updateCells = createEmptyBoard(myProvider.size);
pickGrid(myProvider);
}
Future<void> pickGrid(Data myProvider) async {
int size = myProvider.size;
String grid;
RandomPickGrid randomPickGrid;
randomPickGrid = RandomPickGrid();
await randomPickGrid.init(myProvider.level, size);
if (randomPickGrid.grid != null) {
grid = randomPickGrid.grid;
}
if (grid.length == pow(size, 4)) {
List cells = createBoardFromTemplate(grid);
myProvider.updateCells = cells;
}
}
List createBoardFromTemplate(String grid) {
List cells = [];
int size = int.parse(pow(grid.length, 1/4).toStringAsFixed(0));
int index = 0;
for (var rowIndex = 0; rowIndex < pow(size, 2); rowIndex++) {
List row = [];
for (var colIndex = 0; colIndex < pow(size, 2); colIndex++) {
int value = int.parse(grid[index++]);
row.add(Cell(value, colIndex, rowIndex));
}
cells.add(row);
}
// TODO: shuffle/flip/rotate grid
return cells;
}
List createEmptyBoard(int size) {
int index = 0;
List cells = [];
for (var rowIndex = 0; rowIndex < (size * size); rowIndex++) {
for (var rowIndex = 0; rowIndex < pow(size, 2); rowIndex++) {
List row = [];
for (var colIndex = 0; colIndex < (size * size); colIndex++) {
row.add(
Cell(
(index++ % ((size * size) + 1)), // for debug purpose only :')
colIndex,
rowIndex
)
);
for (var colIndex = 0; colIndex < pow(size, 2); colIndex++) {
row.add(Cell(0, colIndex, rowIndex));
}
cells.add(row);
}
......@@ -160,9 +196,9 @@ class Home extends StatelessWidget {
child: Table(
defaultColumnWidth: IntrinsicColumnWidth(),
children: [
for (var row = 0; row < (size * size); row++)
for (var row = 0; row < pow(size, 2); row++)
TableRow(children: [
for (var col = 0; col < (size * size); col++)
for (var col = 0; col < pow(size, 2); col++)
Column(children: [
cells[row][col].widget(myProvider)
]),
......@@ -189,7 +225,7 @@ class Home extends StatelessWidget {
children: [
TableRow(
children: [
for (var value = 0; value < ((size * size) + 1); value++)
for (var value = 0; value < (pow(size, 2) + 1); value++)
Column(
children: [
Cell(
......
import 'dart:async';
import 'dart:convert';
import 'package:flutter/services.dart';
class RandomPickGrid {
RandomPickGrid();
String _grid;
init(String difficulty, int size) async {
_grid = '';
await gridFromLocalFile(difficulty, size);
}
Future<void> gridFromLocalFile(String difficulty, int size) async {
String sizeAsString = size.toString() + 'x' + size.toString();
// Get global grids list
List grids;
try {
String jsonString = await rootBundle.loadString('assets/files/templates.json');
final jsonResponse = await json.decode(jsonString);
grids = jsonResponse['templates'][sizeAsString][difficulty];
} catch (e) {
print("$e");
}
// Check we have enough grids
if (grids.length < 1) {
print('Not enough grids [' + sizeAsString + ', ' + difficulty + '] in templates.');
}
// Randomize grids list
grids.shuffle();
// Pick first grids from shuffled list
_grid = grids.take(1).toList()[0];
}
String get grid => _grid;
}
......@@ -18,5 +18,6 @@ dev_dependencies:
flutter:
uses-material-design: true
assets:
- assets/files/
- assets/icons/
- assets/skins/
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment