Browse Source

Started work on the grammar

tags/v0.7.0
Fen Dweller 7 years ago
commit
65ff582b17
2 changed files with 166 additions and 0 deletions
  1. +154
    -0
      recursive-macro.js
  2. +12
    -0
      stroll.html

+ 154
- 0
recursive-macro.js View File

@@ -0,0 +1,154 @@

function random_desc(list, odds=1) {
if (Math.random() < odds)
return list[Math.floor(Math.random() * list.length)];
else
return "";
}

function merge_things(list) {
if (list.length == 0) {
return "";
} else if (list.length == 1) {
return list[0];
} else if (list.length == 2) {
return list[0] + " and " + list[1];
} else {
result = "";

list.slice(0,list.length-1).forEach(function(term) {
result += term + ", ";
})

result += "and " + list[list.length-1]

return result;
}
}

function merge_desc(list) {
result = ""

list.forEach(function(term) {
if (term != "")
result += term + " ";
});

// knock off the last space
if (result.length > 0) {
result = result.substring(0, result.length - 1);
}

return result;
}
// maybe make this something that approximates a
// normal distribution; doing this 15,000,000 times is bad...

function distribution(min, max, samples) {
var result = 0;
for (var i = 0; i < samples; i++) {
result += Math.floor(Math.random() * (max - min + 1) + min);
}

return result;
}

function Person(count = 1) {
this.name = "Person";
this.count = count;
this.contents = [];

this.describeOne = function () {
sex = random_desc(["male", "female"]);
body = random_desc(["skinny","fat","tall","short","stocky","spindly"],0.6);
species = random_desc(["wolf","cat","dog","squirrel","horse","hyena","fox","jackal","crux","sergal"]);
return "a " + merge_desc([sex,body,species]);
}

this.describe = function() {
if (count <= 3) {
list = [];
for (var i = 0; i < count; i++) {
list.push(this.describeOne());
}
return merge_things(list);
} else {
return this.count + " people."
}
}

return this;
}

function EmptyCar(count = 1) {
this.name = "Car";
this.count = count;
this.contents = [];

this.describeOne
}

function Car(count = 1) {
this.name = "Car";
this.count = count;
this.contents = [];
var amount = distribution(2,5,count);
this.contents.push(new Person(amount));
}

function Bus(count = 1) {
this.name = "Bus";
this.count = count;
this.contents = [];
this.resolved = false;
var amount = distribution(10,35,count);
this.contents.push(new Person(amount));
}

function Motorcycle(count = 1) {
this.name = "Motorcycle";
this.count = count;
this.contents = [];
var amount = distribution(1,2,count);
this.contents.push(new Person(amount));
}

function Train(count = 1) {
this.name = "Train";
this.count = count;
this.contents = [];
var amount = distribution(20,60,count);
this.contents.push(new Person(amount));
}

function House(count = 1) {
this.name = "House";
this.count = count;
this.contents = [];
var amount = distribution(0,8,count);
this.contents.push(new Person(amount));
amount = distribution(0,2,count);
this.contents.push(new Car(amount));
}

function ParkingGarage(count = 1) {
this.name = "Parking Garage";
this.count = count;
this.contents = [];
var amount = distribution(10,200,count);
this.contents.push(new Person(amount));
amount = distribution(30,100,count);
this.contents.push(new EmptyCar(amount));
amount = distribution(5,20,count);
this.contents.push(new Car(amount));
}

function Overpass(count = 1) {
this.name = "Overpass";
this.count = count;
this.contents = [];
var amount = distribution(0,20,count);
this.contents.push(new Person(amount));
amount = distribution(25,100,count);
this.contents.push(new Car(amount));
}

+ 12
- 0
stroll.html View File

@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Stroll</title>
<link rel="stylesheet" href="style.css">
<script src="recursive-macro.js"></script>
</head>
<body>
vore
</body>
</html>

Loading…
Cancel
Save