30行のミームに続いて、有名な
Lifeゲームの実装を
LiveScript (Javascriptに翻訳された言語)に投稿します。
人生のゲームは、単純なルールを持つセルオートマトンです。
- 生きている細胞と死んでいる細胞の2つの状態があるフィールドがあります
- 死んだ細胞にちょうど3つの生きている隣人がいる場合、それは生き返ります
- 生きている細胞が2つまたは3つの生きている隣人を持っている場合、それは生き続けます。
手始めに、コード自体:
stopped=true document.body.onkeyup = (e) -> e.keyCode==13 && stopped := !stopped change = (div, a) -> div.setAttribute(\class, a and "cell active" or "cell") div.ac=a window.activate = (div) -> div.ac ?= false change div, !div.ac setInterval -> unless stopped arr=document.getElementById("board").children newarr=[[false for _ to arr[0].children.length-1] for _ to arr.length-1] c=0 for i in [0 to arr.length-1] for j in [0 to arr[i].children.length-1] for sx in [i-1 to i+1] for sy in [j-1 to j+1] when not (sy == j and sx ==i) arr[(sx+newarr.length)%newarr.length].children[(sy+newarr[0].length)%newarr[0].length].ac and ++c (c == 3 or (c == 2 and arr[i].children[j].ac)) and newarr[i][j]=true c=0 for i in [0 to newarr.length-1] for j in [0 to newarr[i].length-1] change arr[i].children[j], newarr[i][j] , 1000/15
ご覧のとおり、コードはシンプルで簡潔です。 中括弧がないため、コードのサイズが小さくなります。
jsfiddleへのリンク。 まず、フィールドの初期状態(ループ状態)を設定してから、Enterキーを押すと、ゲームが開始されます。
言語の短いレビューも行います。誰かが興味を持つかもしれません。
LiveScriptは、すでに確立されているCoffeeScriptに似ていますが、関数型言語の要素、多くのデザインの構文糖衣も備えています。
基本的な構文要素を検討してください。
関数定義:
add = (x, y) -> x+y
関数呼び出し:
add 5 6 add(5, 6) add 5, 6
ループ:
for i in [0 to 10] console.log i
スペースのない行は次のように記述できます。
a = \string alert \str
クラス定義:
class Accumulator (num) -> @acc = num sum:8 add: (n) -> @acc+=n @acc+@sum #returns a = new Accumulator 1 a.sum # 8 a.acc # 1 a.add 9 # @acc now 10; return 18
それだけです ご清聴ありがとうございました。