プログラミング Clojure 6.6 スネークゲーム を seesaw で作る(1)
ここはまんま写経するのも面白くないし、実際の使い勝手を知りたいと言う面から
Clojure の Swing ライブラリである seesaw 使って書いてみようと思う。
Seesaw のサンプルを取ってくる
とは言っても Seesaw は前に brief-tutorial をちょろっと触ってみただけなので
スネークゲームを作るに当たってどこを使いそうか感触を掴むためにサンプルを拾ってくる事に。
とりあえず git clone する。
> git clone git://github.com/daveray/seesaw.git
動かしてみる
leiningen は入っているものとします。
依存ライブラリをダウンロード。
> lein deps
seesaw 公式見ると lein examples とすればサンプル動作見れるよと書いてるのでやってみる。
> lein examples
lein-javac: system java compiler not found; Be sure to use java from a JDK\nrath
er than a JRE by either modifying PATH or setting JAVA_CMD.
あれ?あー、そういや JDK って Windows にインストールする時 java.exe
や javaw.exe だけは Windows\System32 フォルダに入れるけど開発する時は
代替 JDK に入ってる javac.exe も必要だからそれでヘンになってんのか。
そういや前にも似たような事があって Windows\System32 の方の Java 関連
exe は消してたな。JDK インストールフォルダの bin に PATH を通してリト
ライすると、動いた動いた。
今日はここまで、と言いたいがそれだとあまりに味気ないので
お決まりの Hello, seesaw
leiningen プロジェクト作成
もう定番みたいな leiningen で snake-game プロジェクトを作る。
>lein new snake-game Generating a project called snake-game based on the 'default' template.
ほんで出来た snake-game\project.clj に seesaw を使うよう宣言
(defproject snake-game "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :dependencies [[org.clojure/clojure "1.4.0"] [seesaw "1.4.2"]] ; ←ここと :main snake-game.core) ; ←ここ
master branch は 1.4.3-SNAPSHOT みたいだけど別に今回は seesaw の最新機
能を使いたいわけじゃないのでその前のリリースである 1.4.2 を指定。
:main の方はまだテンプレの記述しかないけど後で lein run で動作確認した
いので指定しとく。
で、lein deps
> lein deps
ちょっと待つとライブラリのダウンロード完了。
seesaw 動かしてみる
core.clj の方をこんな感じにする
(ns snake-game.core (:require [seesaw.core :as sw])) (defn -main [& args] (sw/invoke-later (-> (sw/frame :title "こんにちわ", :content "こんにちわ、seesaw さん。", :on-close :exit) sw/pack! sw/show!)))
use はオレオレルールで極力使わないように。
require でも :as オプション指定してやればそれなりに短くなるし、補完時
に指定した名前空間で使える関数一覧を眺められるのでいいかなと思って最近
はこちらにしてる。
じゃ動かしてみよう。
> lein run
これでパッと見は気づかないくらいちっちゃな画面が出てくる。
もしかしたら今環境変数で
JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
としてないと日本語だと文字化けするかも。
今日はここまで。特にそこまで考えずに seesaw に置き換えるだけだから
そんなにかからないと思ってるんだがさてどうなるやら。