diff --git a/lib/src/Simulation.dart b/lib/src/Simulation.dart index 2f167a3..a3f99c5 100644 --- a/lib/src/Simulation.dart +++ b/lib/src/Simulation.dart @@ -2,6 +2,7 @@ import 'dart:html' as html; import 'dart:math' as math; import 'package:rules_of_living/src/Grid.dart'; +import 'package:rules_of_living/src/rules/GameOfLife.dart'; import 'package:rules_of_living/src/rules/RuleSet.dart'; enum CellPattern { SpaceShip, Blinker } diff --git a/lib/src/rules/CellPattern.dart b/lib/src/rules/CellPattern.dart new file mode 100644 index 0000000..9798948 --- /dev/null +++ b/lib/src/rules/CellPattern.dart @@ -0,0 +1,10 @@ +import 'package:collection/collection.dart'; + +class CellPattern extends DelegatingList { + final String _name; + CellPattern(String name, List base) + : _name = name, + super(base); + + String get name => _name; +} diff --git a/lib/src/rules/GameOfLife.dart b/lib/src/rules/GameOfLife.dart new file mode 100644 index 0000000..f812233 --- /dev/null +++ b/lib/src/rules/GameOfLife.dart @@ -0,0 +1,38 @@ +import 'dart:math'; + +import 'package:rules_of_living/src/rules/RuleSet.dart'; +import 'package:rules_of_living/src/rules/CellPattern.dart'; + +class GameOfLife implements RuleSet { + int checkRange = 1; + List patterns = [ + // Two blocks, offset + // ## + // ## + CellPattern("Blinker", [ + Point(0, 0), + Point(1, 0), + Point(0, 1), + Point(1, 1), + Point(2, 2), + Point(3, 2), + Point(2, 3), + Point(3, 3) + ]), + // A 'gliding' Spaceship + // # + // # + // ### + CellPattern("SpaceShip", [ + Point(1, 0), + Point(2, 1), + Point(2, 2), + Point(1, 2), + Point(0, 2), + ]) + ]; + + bool checkSurvival(int neighbors) => + neighbors == 2 || neighbors == 3 ? true : false; + bool checkBirth(int neighbors) => neighbors == 3 ? true : false; +} diff --git a/lib/src/rules/RuleSet.dart b/lib/src/rules/RuleSet.dart index f115699..ad2bb70 100644 --- a/lib/src/rules/RuleSet.dart +++ b/lib/src/rules/RuleSet.dart @@ -1,54 +1,9 @@ -import 'dart:math'; - -import 'package:collection/collection.dart'; +import 'package:rules_of_living/src/rules/CellPattern.dart'; abstract class RuleSet { int checkRange; - List patterns; + List patterns; bool checkSurvival(int neighbors); bool checkBirth(int neighbors); } - -class Pattern extends DelegatingList { - final String _name; - Pattern(String name, List base) - : _name = name, - super(base); - - String get name => _name; -} - -class GameOfLife implements RuleSet { - int checkRange = 1; - List patterns = [ - // Two blocks, offset - // ## - // ## - Pattern("Blinker", [ - Point(0, 0), - Point(1, 0), - Point(0, 1), - Point(1, 1), - Point(2, 2), - Point(3, 2), - Point(2, 3), - Point(3, 3) - ]), - // A 'gliding' Spaceship - // # - // # - // ### - Pattern("SpaceShip", [ - Point(1, 0), - Point(2, 1), - Point(2, 2), - Point(1, 2), - Point(0, 2), - ]) - ]; - - bool checkSurvival(int neighbors) => - neighbors == 2 || neighbors == 3 ? true : false; - bool checkBirth(int neighbors) => neighbors == 3 ? true : false; -}