Skip to content

Commit

Permalink
added conways game of life and validator example
Browse files Browse the repository at this point in the history
  • Loading branch information
doug-martin committed Jan 27, 2013
1 parent 3d145fe commit 9767478
Show file tree
Hide file tree
Showing 11 changed files with 820 additions and 0 deletions.
92 changes: 92 additions & 0 deletions examples/conways/assets/conways.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
body {
font-size: 14px;
line-height: 24px;
font-weight: bold;
font-family: 'Londrina Shadow', cursive;
}

.container {
padding: 10px;
width: 600px;
margin-left: auto;
margin-right: auto;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
background: -webkit-gradient(linear, bottom, left 175px, from(#CCCCCC), to(#EEEEEE));
background: -moz-linear-gradient(bottom, #CCCCCC, #EEEEEE 175px);
border-top: 1px solid #999;
border-bottom: 1px solid #999;
border: inset 1px solid #333;
-webkit-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3);
box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3);
}

.container > textarea {
width: 500px;
height: 120px;
border: 3px solid #cccccc;
padding: 5px;
font-family: Tahoma, sans-serif;
background-position: bottom right;
background-repeat: no-repeat;
}

.container > header {
text-align: center;
text-align: center;
}

hr {
margin: 10px;
border: 1px solid rgba(0, 0, 0, 0.1);
-webkit-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3);
box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3);
}

input[type="submit"], input[type="button"] {
width: 100px;
right: 20px;
bottom: 20px;
background: #09C;
color: #fff;
font-family: Tahoma, Geneva, sans-serif;
height: 30px;
-webkit-border-radius: 15px;
-moz-border-radius: 15px;
border-radius: 15px;
border: 1px solid #999;
margin: 10px;
}

#grid {

overflow: hidden;
width: 350px;
height: 360px;
margin-left: auto;
margin-right: auto;

}

.row {
display: table-row;
}

.col {
width: 10px;
height: 10px;
display: table-cell;
border: 1px solid #cbcbcb;
content: " "
}

.col.live {
background-color: black;
}

.col.dead {
background-color: white;
}
126 changes: 126 additions & 0 deletions examples/conways/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Conways</title>
<link type="text/css" rel="stylesheet" href="assets/conways.css">
<link href='http://fonts.googleapis.com/css?family=Londrina+Shadow' rel='stylesheet' type='text/css'>
</head>
<body onload="init()">

<div class="container">
<header>
<h1>Conways Game Of Life</h1>
</header>

<div id="grid"></div>

<hr>


<h2>
Pattern
</h2>
<textarea id="pattern">
[
[false, true, false],
[false, true, false],
[false, true, false]
]
</textarea>

<form>
<input type="submit" id="run" value="Run!"/>
<input type="button" id="stop" value="Stop"/>
</form>
</div>

<script src="http://code.jquery.com/jquery-1.9.0.min.js"></script>
<script type="text/javascript" src="../../nools.js"></script>
<script type="text/javascript" src="./rules/conways.js"></script>
<script type="text/javascript">

var init = (function () {
var flow = nools.getFlow("conways"), Cell = flow.getDefined("Cell"), session;
var run = (function () {

var grid = $("#grid"), cells = [], rows = 30, cols = 30;

function addCell(row, col, cell) {
if (!cells[row]) {
cells[row] = [];
}
cells[row][col] = cell;
return cell;
}

function createPattern(pattern) {
var cell;
for (var i = 0; i < rows; i++) {
var row = $("<div class='row'></div>").appendTo(grid);
for (var j = 0; j < cols; j++) {
cell = addCell(i, j, new Cell());
cell.el = $("<div class='col dead'></div>").appendTo(row);
if (pattern[i] && pattern[i][j]) {
cell.state = "live";
cell.el.removeClass("dead").addClass("live");
}
if (i > 0) {
cell.addNeighbor(cells[i - 1][j]);
if (j <= (cols - 2)) {
// neighbor to the northeast
cell.addNeighbor(cells[i - 1][j + 1]);
}
}
if (j > 0) {
// neighbor to the west
cell.addNeighbor(cells[i][j - 1]);
if (i > 0) {
// neighbor to the northwest
cell.addNeighbor(cells[i - 1][j - 1]);
}
}
}
}
return cell;
}

return function (pattern) {
grid.empty();
createPattern(pattern);
session = flow.getSession("populate", cells);
session.on("cell-transition", function (cell) {
if (cell.state === "live") {
cell.el.removeClass("dead").addClass("live");
} else {
cell.el.removeClass("live").addClass("dead");
}
});
return session.match().then(function () {
session.dispose();
});
};
}());

return function () {
//setup grid;
run([]);
$("form").on("submit", function () {
run(eval("(0, " + $("#pattern").val() + ")"))
return false;
});

$("#stop").on("click", function () {
if (session) {
session.dispose();
}
//clear grid;
run([]);
})
};
}());
</script>

</body>
</html>
83 changes: 83 additions & 0 deletions examples/conways/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
"use strict";

var nools = require("../.."),
p = require("promise-extended"),
patterns = require("./patterns");


var flow = nools.compile(__dirname + "/rules/conways.nools"),
Cell = flow.getDefined("Cell");

var run = (function () {

var cells = [], rows = 30, cols = 30;

function print() {
var str = [];
console.log("\x1b[2J\x1b[H");
for (var i = 0; i < rows; i++) {
var row = [];
for (var j = 0; j < cols; j++) {
if (cells[i][j].state === "live") {
row.push("#");
} else {
row.push(" ");
}
}
str.push(row.join(" "));
}
console.log(str.join("\n"));
}

function addCell(row, col, cell) {
if (!cells[row]) {
cells[row] = [];
}
cells[row][col] = cell;
return cell;
}

function createPattern(pattern) {
var cell;
for (var i = 0; i < rows; i++) {
for (var j = 0; j < cols; j++) {
cell = addCell(i, j, new Cell());
if (pattern[i] && pattern[i][j]) {
cell.state = "live";
}
if (i > 0) {
cell.addNeighbor(cells[i - 1][j]);
if (j <= (cols - 2)) {
// neighbor to the northeast
cell.addNeighbor(cells[i - 1][j + 1]);
}
}
if (j > 0) {
// neighbor to the west
cell.addNeighbor(cells[i][j - 1]);
if (i > 0) {
// neighbor to the northwest
cell.addNeighbor(cells[i - 1][j - 1]);
}
}
}
}
return cell;
}

return function (pattern) {
createPattern(pattern);
var session = flow.getSession("populate", cells);
session.on("print", print);
return session.match().then(function () {
print();
session.dispose();
});
};
}());

var pattern = process.argv.slice(2)[0] || "hi";
run(patterns[pattern]).addErrback(function (err) {
console.log(err.stack);
});

89 changes: 89 additions & 0 deletions examples/conways/patterns.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
{
"hi": [
[true, false, false, false, true, false, false, true, true, true, true, true, true, true],
[true, false, false, false, true, false, false, false, false, false, true, false, false, false],
[true, false, false, false, true, false, false, false, false, false, true, false, false, false],
[true, false, false, false, true, false, false, false, false, false, true, false, false, false],
[true, true, true, true, true, false, false, false, false, false, true, false, false, false],
[true, false, false, false, true, false, false, false, false, false, true, false, false, false],
[true, false, false, false, true, false, false, false, false, false, true, false, false, false],
[true, false, false, false, true, false, false, false, false, false, true, false, false, false],
[true, false, false, false, true, false, false, true, true, true, true, true, true, true]
],

"border": [
[true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true],
[true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]
],

"pulsar": [
[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
[false, false, false, true, true, true, false, false, false, true, true, true, false, false, false],
[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
[false, true, false, false, false, false, true, false, true, false, false, false, false, true, false],
[false, true, false, false, false, false, true, false, true, false, false, false, false, true, false],
[false, true, false, false, false, false, true, false, true, false, false, false, false, true, false],
[false, false, false, true, true, true, false, false, false, true, true, true, false, false, false],
[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
[false, false, false, true, true, true, false, false, false, true, true, true, false, false, false],
[false, true, false, false, false, false, true, false, true, false, false, false, false, true, false],
[false, true, false, false, false, false, true, false, true, false, false, false, false, true, false],
[false, true, false, false, false, false, true, false, true, false, false, false, false, true, false],
[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false],
[false, false, false, true, true, true, false, false, false, true, true, true, false, false, false],
[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
],

"glider": [
[false, false, false, false, false],
[false, false, true, false, false],
[false, false, false, true, false],
[false, true, true, true, false],
[false, false, false, false, false]
],

"pentadecathalon": [
[true, true, true, true, true, true, true, true, true]
],

"blinker": [
[false, true, false],
[false, true, false],
[false, true, false]
],

"beacon": [
[false, true, true, false, false, false],
[false, true, true, false, false, false],
[false, false, false, true, true, false],
[false, false, false, true, true, false]
]
}

0 comments on commit 9767478

Please sign in to comment.