Sunflat のブログ

ソフトウェア開発についての話題が多いかも

F#も少し使ってみた

.NET向けアプリの開発にOCamlをベースにしたF#という言語が使えるらしいので、id:sunflat:20110305:p1 で作ったミニゲームを、F#用に修正してみた。

ソースコード(game1.fs)

Ubuntu上のmono+F#2.0でコンパイル&動作確認済み。Windowsでは動作未確認。
インデントの構文は良く知らないので、OFFにしてあります。


.NETのAPIは、普通にC#っぽい構文で呼び出すみたいなので、OCamlC#をごちゃまぜにしたような感じのコードに。
Objective C と C++ が混ざった Objective C++ みたいなノリで使えそう。

ocamljsで簡単なシューティングゲームを作ってみた

名古屋Reject会議02で話を聞いたocamljsが面白そうだったので、OCamlよく分からないけど、ocamljsを使ってみた。なんか、シューティングゲームっぽいものが出来た。

[ゲームを起動] (Firefox, Chrome, Safariで動作。IE不可)

遊び方:クリックでゲーム開始。上から敵(水色の四角形)が降ってくるので、マウスで宇宙船(緑色の四角)を動かして、クリックで弾を撃って倒す。敵に当たるとゲームオーバーなので、ブラウザをリロードしてリプレイ。5点ごとにスピードが速くなるよ!

追加仕様:150点以上取るとエラーが出るかもしれませんが(未確認)、それがゲームクリアということでw

ソースコード(game1.ml)

ocamljsとは

OCamlのプログラムを、Webブラウザで動作するJavascriptに変換してくれる。
id:keigoiさんの記事が詳しい:
http://d.hatena.ne.jp/keigoi/20101101/1288584308

OCaml入門

OCaml.jpのチュートリアルで勉強した: http://ocaml.jp/
あとは、ocamljsについているexamplesを眺めたりすると良さげ

使ってみた感想

  • 良かった点
    • mutableな変数を定義すれば、普通にjavascriptと同じような感覚でコードが書ける。関数型言語的にはあまり良くないらしいが
    • 型推論が強力なので、静的型付け言語にもかかわらず、ActionScript3みたいに型名だらけにならない
    • コンパイルエラーと戦う必要があるが、コンパイルが通った後は、ランタイムエラーはめったに発生しない(コンパイル時に多くのエラーを見つけられる)
    • onMouseMoveメソッドでの return false; のし忘れとかを、自動検出できた
    • 関数の部分適用が結構便利。引数の一部のみを指定した関数(残りの引数を取る)を作って、別の関数に渡したり
    • バリアント型やパターンマッチが便利そう!
  • 困った点、気になった点
    • OCamlの構文に慣れるのが結構大変。セミコロンの有無を間違えたり、演算子の優先順位を勘違いしたり、負の数を括弧で囲み忘れたり
    • 複数のレコード型に、同じ名前の要素を定義してしまうと、型推論がうまくいかない(ship_t, bullet_t, enemy_t に、同じ変数 x,y を定義した場合など)。id:mzpさんによると、shipX, bulletX, enemyX のように、別々の名前をつけるのが良いらしい
    • ocamljsで生成されるJavascriptのコードには、LGPLのコードが含まれているようだけど、静的にリンクされちゃっているので元のOCamlのソースも公開が必須になるのかな?ライブラリ部分を別のjsファイルに分ければ大丈夫?

Android 1.5/1.6 のsampleのビルドエラー

Android 1.5/1.6 のsample(ApiDemo)を、最新のAndroidSDKでビルドするとエラーが出るようだ。
以下のように、res/values/strings.xmlアポストロフィー(')の前に、バックスラッシュ(/)を入れれば解決するっぽい。

例:

変更前: <string name="summary_on_advanced_toggle_preference">I'm on! :)</string>
変更後: <string name="summary_on_advanced_toggle_preference">I\'m on! :)</string>


まだまだAndroid1.5端末は生き残ってるので、当分は対応が必要そうだなぁ
http://developer.android.com/resources/dashboard/platform-versions.html

スマートフォンまみれ

ふと気づけば、机の上がスマートフォンまみれだ。(iPod touch含む)

ほんの2〜3年前までは、ガラケーまみれの環境でFlash Lite開発の日々だったのになぁ。
(2007年に撮った写真)


今から3年後は、どんな環境で開発してるんだろうか。
とりあえず、iPhone7には3D液晶と指紋センサと心拍計ぐらいはついてそうだな。
CPUは32コアぐらいになって、並列処理向け言語のErlangやgoとかでソフト開発してたりするのかな。