kenken 0.5.3 copy "kenken: ^0.5.3" to clipboard
kenken: ^0.5.3 copied to clipboard

outdated

Create and solve Kenkens!

example/kenken_example.dart

import 'dart:io';

import 'package:kenken/kenken.dart';

// This example uses a terminal and command line,
// but most likely you want
// to draw kenken and also handle custom events in a web application.

void main() {
  var kenken = Kenken(3);

  /// You can use automacic filling kenken with rules:
  kenken.autoFillCustomRules();

  // Manually adding rules (if you have own logic):
  // kenken
  //   ..addRuleFor([RC(1, 1)], SingleValue(), 1)
  //   ..addRuleFor([RC(1, 2), RC(1, 3)], Sum(), 5)
  //   ..addRuleFor([RC(2, 1), RC(3, 1)], Diff(), 1)
  //   ..addRuleFor([RC(2, 2), RC(2, 3)], Sum(), 4)
  //   ..addRuleFor([RC(3, 2), RC(3, 3)], Sum(), 3);

  while (kenken.brokenRules.isNotEmpty) {
    print(kenken.brokenRules);
    printKenken(kenken);
    // User enters a row number of cell:
    p('Enter row:');
    var row = int.tryParse(stdin.readLineSync());
    // User enters a column numer of cell:
    p('Enter col:');
    var col = int.tryParse(stdin.readLineSync());
    // User enters a value for cell:
    p('Enter value:');
    var val = int.tryParse(stdin.readLineSync());
    kenken.setValue(row, col, val);
  }

  p('DONE!');
}

void printKenken(Kenken kenken) {
  for (var rowNumber in kenken.rowOrColNumbers) {
    for (var colNumber in kenken.rowOrColNumbers) {
      var cell = kenken.cellOf(RC(rowNumber, colNumber));
      // print top borders
      p(topBorderAsString(cell, 8));
    }
    // print new line:
    print('');

    // print Left borders, rules, Right borders
    for (var colNumber in kenken.rowOrColNumbers) {
      var cell = kenken.cellOf(RC(rowNumber, colNumber));
      //print left border, cell text and right border:
      p(wrapTextWithLeftAndRightBorders(
          '${cell.ruleText} ${cell.valueAsString}', cell, 8));
    }
    // print new line:
    print('');
  }
}

void p(val) {
  stdout.write(val);
}

/// Returns string representation of top cell border.
String topBorderAsString(Cell cell, int cellWidth) =>
    cell.isTopBorderBold ? '-' * cellWidth : '|' + ' ' * (cellWidth - 2) + '|';

/// Returns string with left and right borders and text between they
String wrapTextWithLeftAndRightBorders(String text, Cell cell, int cellWidth) {
  var leftBorder = cell.isLeftBorderBold ? '|' : ' ';
  var rightBorder = cell.isRightBorderBold ? '|' : ' ';
  var spacesCount = cellWidth - text.length - 2;
  return '$leftBorder$text' + (' ' * spacesCount) + rightBorder;
}
0
likes
20
pub points
0%
popularity

Publisher

unverified uploader

Create and solve Kenkens!

Homepage

License

unknown (LICENSE)

More

Packages that depend on kenken