日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

プログラミング 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 に置き換えるだけだから
そんなにかからないと思ってるんだがさてどうなるやら。