[Diamond Game]


#navi(nimをプレーするコンピューター・プログラム)
** 構築2 [#t1a81ff8]

フロント・エンド・プログラムの製作に取りかかりましょう。

WebアプリケーションのUI部分を実現するには、
いくつかの選択肢があります。
+ CGIを用いて、ページ遷移にしたがってプログラムの状態を遷移させる
+ AJAXを使って、非同期にサーバーと通信をおこなう
+ Java Applet, Flash/Flexなどを使って、非同期にサーバーと通信をおこなう
+ AppletやFlashをクライアントサイドですべての機能を動作させてしまう

上記の方法は、それぞれ特徴があります。1.については、もっともシンプルな方法で、
分析のフェーズで作ったプログラムを発展させやすいのですが、
ゲームアプリケーションとしては、少々味気ない演出しかできません。
4.はサーバーと通信しないので、Webアプリケーションの中でもブラウザアプリケーション
といったものです。この手法は、当館の[[Kalah (マンカラ)]]で用いているものです。

ここでは、Adobe社がオープンソースとして公開しているFlex3を使って、RIAであり、
サーバー上のAIと通信しながら対戦できる方式を採用することにしましょう。

*** Flex3の準備 [#q266fdf0]
Flex3は、Adobe社から提供されている、オープンソースなプログラミング環境です。

開発環境には、Flex BuilderというEclipse((こちらもオープンソースのIDE(Itegrated Development Environment) ))に統合したものがAdobe社から提供されています。この環境は、60日間無料で使うことができますが、本システムではFlex Builderを使わずに開発を試みることにします。

Flex3は、同じくFlashアプリケーションの実行ファイルと同じswfを生成するコンパイラとデバッグ環境です。ほとんどの部分がJavaによって記述されているため、Windowsだけでなく、LinuxなどさまざまなOS上でFlex3を使うことができます。

Flex3のプログラムは、Flashのスクリプト言語である、ActionScript 3.0と、
UI記述を容易にするMXMLというXMLを用いた記述言語でプログラムを記述できます。
プログラムを作成する上での、ソースファイルの拡張子はそれぞれ、".as"と".mxml"です。
MXMLの中には、ActionScriptを記述することができます。

開発するには、Flex SDK 3 を入手しなければなりません。
[[Adobeのサイト>http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+3]]
から取得してください。

先述のように、IDEを使わずプログラムを作成しますので、お好みのエディタを用意してください。ActionScriptのSyntaxをハイライトしてくれるエディタや、エディタのSyntaxファイルをネット上で見つけることもできると思います。((館長はvi派なのでvimのsyntaxファイルを導入しました))

デバックおよび、動作を確認するために、上記SDKの他に、Stand Aloneで動作する
Flash Player も
[[Adbobe>http://www.adobe.com/support/flashplayer/downloads.html]]
からダウンロードしておくと便利です。

インストール方法は、複雑ではないので、こちらでは説明いたしません。
各自ドキュメントを参照して、導入してください。

*** Nimboard ClassをActionScriptで記述する [#t8423bda]
プロトタイプで作成した、nim_board.rbを発展させて、
ActionScript上に実現します。UI仕様の粗い設計は、
前回おこないましたので、それにしたがってプログラムを
書いてみました。

:&ref(Nimboard.as);|当面、nimのUIの中核になるクラス
:&ref(Stone.as);|画面上に複数の石を配置するために、石を独立したクラスとして定義

Flex3プログラムは、ソースコード(as, mxmlファイル)をコンパイルして、swfを作ります。いずれのソースコードも、mxmlcコマンドでコンパイルします。ここで掲載したプログラムは、ソースコードを同じディレクトリ内にいれて、(mxmlcコマンドにpathが通っているとして)次のように指定すればOKです。Stone.asは指定する必要はありません。
 mxmlc Nimboard.as
プログラムの開発過程であるなら、以下のようにすると、デバッグしやすく、複数ソースファイルを編集しているなら、編集したファイルだけを再コンパイルの対象にしてくれるためコンパイル時間も短く成ります。
 mxmlc -debug=true -incremental=true Nimboard.as

プログラム中、ゲームを演出するアートワークは、作成していません。ボード上の石や、
ハイライトも、すべてプログラムによって描画しています。

文字の周囲には、表示位置を後に調整しやすくするため、表示領域領域確認用の枠を記述しています。

以前作成した、Rubyのnim_board.rbとNimboard.as+Stone.asを比較してみてください。
イベント駆動でプログラムを記述するための状態遷移を管理するためのフラグや、
イベントリスナーから呼ばれるコントローラーメソッドなどで、プログラムが
大きくなっています。

勝敗判定は、バックエンドの役割なのでおこないませんが、石の選択、プレーヤーの手番の表示など、基本的な機能は実現できました。
後は、インゲームメッセージの表示部分を実装することになります。

プログラムの動作は、下で確認することができます。
ボード上の石を選択すると、その右側にある石全部が選択されます。
もう一度同じ石を選択すれば、選択を"Submit"してサーバーに
(ここでは、実際に送りませんが)情報を送ります。選択状態で、
別の石を選べば、選択がキャンセルされます。
また、手番のプレーヤー名の下に、ハイライトのための長方形を表示しています。

#iframe(/plugin/htmlinsert/Nim_Computer/4/index.html,style=width:600px;height:440px)

----
...つづく (2009/5/18)
* SEE ALSO [#n2763e67]
#related

* Feedback [#u1caae51]
&facebooklike(400x200,action="like",scrolling="yes",show_face="true",layout="standard",colorscheme="light",align="right",float="right",rlmargin="10");
&facebooklike(400x180,action="like",scrolling="yes",show_face="true",layout="standard",colorscheme="light",align="right",float="right",rlmargin="10");
#vote(おもしろい[0],役に立つ[0],興味ない[0],理解できない[0],やってみたい[0],食べてみたい[0])
#pcomment_nospam(noname)

TOP   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS   [Privacy Policy]