Added new ruleset and states to support it.

This commit is contained in:
Simon Brooke 2014-07-20 14:43:46 +01:00
parent 707f93d7a3
commit 1c838a79bd
7 changed files with 120 additions and 7 deletions

View file

@ -3162,7 +3162,7 @@ front of the sequence of tokens it returns nil.</p>
([tokens expect-int]
(or
(parse-disjunct-value tokens expect-int)
(parse-simple-value tokens)))
(parse-simple-value tokens expect-int)))
([tokens]
(parse-value tokens false)))</pre></td></tr><tr><td class="docs"><p>Parses a condition of the form '[property] in [value] or [value]...'</p>
</td><td class="codes"><pre class="brush: clojure">(defn parse-member-condition

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 643 B

View file

@ -0,0 +1,116 @@
# Human settlement
;; nomads make their first significant camp near water because of fish and
;; shellfish (kitchen-midden people)
if state is in grassland or heath and more than 3 neighbours are water and generation is more than 20 then state should be camp
;; sooner or later nomads learn to keep flocks
if state is in grassland or heath and some neighbours are camp then state should be meadow
;; and more herds support more people
if state is in grassland or heath and more than 2 neighbours are meadow then state should be camp
if state is meadow and more than 3 neighbours are meadow and
;; the idea of agriculture spreads
if state is in grassland or heath and some neighbours are meadow and some neighbours within 3 are house then state should be meadow
;; nomads move on
if state is camp then 1 chance in 5 state should be waste
;; meadow that's too far from a house or camp will be abandoned
if state is meadow and fewer than 1 neighbours within 3 are house and fewer than 1 neighbours within 2 are camp then state should be heath
;; good fertile pasture close to settlement will be ploughed for crops
if state is meadow and fertility is more than 10 and altitude is less than 100 and some neighbours are camp or some neighbours are house then state should be ploughland
if state is ploughland then state should be crop
;; after the crop is harvested, the land is allowed to lie fallow
if state is crop then state should be grassland
;; if there's reliable food available, nomads build permanent settlements
if state is in camp or abandoned and some neighbours are crop then state should be house
;; people camp near to markets
if state is in waste or grassland and some neighbours are market then state should be camp
;; markets spring up near settlements
if state is meadow and more than 1 neighbours are house then 1 chance in 10 state should be market
;; a market in a settlement survives
if state is market and more than 3 neighbours are house then state should be market
if state is market and some neighbours are inn then state should be market
if state is market then state should be grassland
;; a house near a market in a settlement will become an inn
if state is house and some neighbours are market and more than 1 neighbours are house then state should be inn
;; but it will need some local custom to survive
if state is inn and fewer than 2 neighbours are house then state should be house
;; if there aren't enough resources houses should be abandoned
;; resources from fishing
if state is house and more than 2 neighbours are water then state should be house
;; from farming
if state is house and some neighbours are meadow then state should be house
if state is house and some neighbours are crop then state should be house
;; from the market
if state is house and some neighbours are market then state should be house
if state is house then 1 chance in 2 state should be abandoned
if state is abandoned then 1 chance in 5 state should be waste
## Vegetation rules
;; rules which populate the world with plants
;; Occasionally, passing birds plant tree seeds into grassland
if state is grassland then 1 chance in 10 state should be heath
;; heath below the treeline grows gradually into forest, providing browsing pressure is not to high
if state is heath and deer are fewer than 6 and altitude is less than 150 then state should be scrub
if state is scrub then 1 chance in 5 state should be forest
;; Forest on fertile land grows to climax
if state is forest and fertility is more than 5 then state should be climax
;; Climax forest occasionally catches fire (e.g. lightning strikes)
if state is climax then 1 chance in 500 state should be fire
;; Climax forest neighbouring fires is likely to catch fire. So are buildings.
if state is in climax or camp or house or inn and some neighbours are fire then 1 chance in 3 state should be fire
;; After fire we get waste
if state is fire then state should be waste
;; And after waste we get pioneer species; if there's a woodland seed
;; source, it's going to be heath, otherwise grassland.
if state is waste and some neighbours are scrub then state should be heath
if state is waste and some neighbours are forest then state should be heath
if state is waste and some neighbours are climax then state should be heath
if state is waste then state should be grassland
## Potential blockers
;; Forest increases soil fertility.
if state is in forest or climax then fertility should be fertility + 1
## Initialisation rules
;; Rules which deal with state 'new' will waste less time if they're near the
;; end of the file
;; below the waterline we have water.
if state is new and altitude is less than 10 then state should be water
;; above the snowline we have snow.
if state is new and altitude is more than 200 then state should be snow
;; otherwise, we have grassland.
if state is new then state should be grassland

View file

@ -4,9 +4,6 @@
<textarea name="src" id="src" rows="10" cols="80">
{{rule-text}}
</textarea>
{% if error %}
<p class="error">{{error}}</p>
{% endif %}
<p class="widget">
<label for="submit">When you have finished editing</label>
<input name="submit" id="submit" type="submit" value="Save your rules"/>

View file

@ -28,7 +28,7 @@
(let [state (:state cell)]
[:td {:class (format-css-class state) :title (format-mouseover cell)}
[:a {:href (format "inspect?x=%d&amp;y=%d" (:x cell) (:y cell))}
[:img {:alt (world/format-cell cell) :src (format-image-path state)}]]]))
[:img {:alt (:state cell) :src (format-image-path state)}]]]))
(defn render-world-row
"Render this world row as a Hiccup table row."
@ -41,8 +41,8 @@
(let [world (or (session/get :world)
(engine/transform-world
(heightmap/apply-heightmap
;;"resources/public/img/20x20/hill.png"
"resources/public/img/heightmaps/great_britain_and_ireland_small.png"
"resources/public/img/20x20/hill.png"
;; "resources/public/img/heightmaps/great_britain_and_ireland_small.png"
)
rules/init-rules))
rules (or (session/get :rules)