aologスマートフォン用の表示で見るaologこの広告は、90日以上更新していないブログに表示しています。javascriptこれは、2014年Lispアドベントカレンダーの最後12/25に投稿されるはずだった記事です。年末が特に忙しく、5日も遅れてしましいました。「遅れちゃったしもういいかなー」とも思ったのですが、このような記事も見つけてしまいまして、ほかでやりたい人もいたのに、さすがに放置はまずいかなと思って書きました。皆さんはArcというLisp方言をご存知でしょうか。Grahamさんが2009年に発表した次世代のLisp方言でシンプルな特徴を持っています。チュートリアル出た当時は第三のLispとして注目度もあったのですが、最近は、第三のLispの座はClojureに奪われ、めっきりと話を聞かなくなってしまいました。いえ、私は好きで使っています。前のエントリで紹介しましたが、ブラウザ上で動くArc処理系を作りました。GitHubこだわったところは、VM型の処理系でJavaScriptでStackVMを作って動かしているところ。コンパイラのセルフホスティングを実現しているところ。めぼしい機能は一通り実現されているところ。schemeでは、有名なBiwaSchemeというのがありますが、それのArc版と思っていただけるとわかりやすいです。今回はArcJSの「Webページ上で動かせる」という特徴をつかって、Arcで簡単なゲームを作って遊んでみましょう。HTMLを書いてみました。;;")でArcコードを実行します。)では、左側のフォームにArcコードを打ち込んで試してみましょう。書き出されることがわかります。1.htmlでは、右側の黒い画面にゲーム画面が表示されるようにして、左側に打ち込んだArcコードが描画するようにします。このままでは画面に絵を出すことができないので、canvasタグへのJSブリッジを書いてみましょう。いう関数、alertを出す関数がArc内で使用できるようになります。"#F00")と打ち込んで実行すると、右上に赤い四角が出るのが見えると思います。3.htmlArcJSでは以下のようにプリミティブ関数を定義できます。}],});テトロミノを作るさて、画面にブロックを出すことができるようになったので、まずテトリスのブロック(テトロミノ)を作ってみます。color))))))ちょっとオブジェクト指向っぽくしてみました。すると、関数が帰ってきます。コマンドを受け取ることができます。それぞれ、colorは色を"#F00"のような形で返します。drawはブロックをスクリーンに描きます。以下のように書き加えて実行してみましょう。'draw)赤いZブロックが表示されたでしょうか。4.html移動・回転させるさて、ブロックはできたのですが、まだ動かす関数がありません。ブロックは回転させたり移動させたりできなくてはいけません。移動・回転は、すでに溜まっているブロックにぶつからないようにしなければなりません。stageという関数を受け取って、移動や回転の前にその位置におけるかどうか確認しましょう。new-positions)このような関数が作れると仮定して、移動と回転の処理も書き加えてみます。