2014年6月9日月曜日

AndEngineの使い方(インストールメモ)

Andoridの2Dゲームエンジン"AndEngine"が面白そうなので、使い方をメモ




当方の実行環境は以下の通り。

  • IntelliJ IDEA Community Edition 13.1.2
    • Android開発用のプラグインを入れておくこと
  • 以下のバージョンのAndEngine
    • commit: 720897f99d2c56ba357e8fe361454bd8d88c37ed
  • AneEngineExample
    • commit: 75b657b2cd7e1153e005a917753b6d0390e034d5
  • その他GitHubに公開されているExtension全て

1.ソースコードの入手

Githubにソースコードが公開されているので、AndEngine本体に加えて、サンプルコードをExtensionをすべてcloneする。
同一のディレクトリにまとめてcloneしておくと便利。

2.プロジェクトの作成

IntelliJの"import project"でAndEngineExampleのプロジェクトをインポートする。
参照するライブラリはInnteliJが自動で解決してくれるみたい。便利。

3.サンプルプログラムの実行

ExampleLauncherを実行すればさまざまサンプルが実行できる。

そのままビルドすると、いくつかエラーが発生したので、以下のように修正





  • java: シンボルを見つけられません[シンボル:   クラス DrawMode




  • インポートするディレクトリを変更 

  • import org.andengine.entity.primitive.vbo.DrawMode; 
    → import org.andengine.entity.primitive.DrawMode;





  • TextBreakExampleのTextOptionの引数が逆になっているので修正



  • BoundCameraExampleのAnimatedSprite作成時に、animateの実行を別の文に分ける。
  • final AnimatedSprite face = new AnimatedSprite(pX, pY, this.mBoxFaceTextureRegion, this.getVertexBufferObjectManager()).animate(100);



    これでビルドできるようになり、
    これらのサンプルを参考にすればすぐにある程度ゲームが作れそう。


    2013年12月21日土曜日

    ブラックジャックのシミュレータをjavascriptで書いてみた

    ブラックジャックのシミュレータは以前も作ったことがあるけど、今回はブラウザでも実行できるようjavascriptで作ってみた。 途中で力尽きしまったので、ディーラーのシミュレーション部分のみ作成。 概要は以下のとおり

    • ディーラーのアップカードを2~10, Aceのいずれかを選択する
    • 17以上になるまでカードを引く
    • 最終的なディーラーハンドの出現回数と割合を計算する


    結果の見方

    たとえば、ディーラーのアップカードが10のとき、バーストする確率は約22~23%というが分かる。 ということは、プレイヤーカードが16であったとしてもスタンドすればほぼ8割方負けしまうので、引いた方がまだましという判断になる。

    シミュレータの場所

    シミュレータのページはこちら

    2013年8月31日土曜日

    BlackJackシミュレータ作ってみた

    ブラックジャックのそれぞれの手の場合にどれくらいの期待値で
    勝てるのかを調べるために、Scalaでモンテカルロシミュレーションプログラムを作ってみた。


    • プレイヤーの手札が8~20の時に対して、ディーラーのアップカードが2~Aのそれぞれに対して、HIT/STAND/DOUBLEDOWNを500000回繰り返したときの期待値を求める。
    • カードは無限にあるものとする(カウンティングの要素は含まない)
    • 乱数は擬似乱数を使用する
    • サレンダーは考慮しない(アーリーサレンダーとレイトサレンダーを分けるのがしんどいので)
    • ディーラーはソフト17スタンドとする

    結果



     こんな感じになった。表の各数値はHIT / STAND / DOUBLE DOWN をずっと繰り返したときの期待値です。各セル内の最大値となるものが、最適戦略となる。


    他のサイトとの比較

     このあたりに掲載されているベーシックストラテジーと比較すると、一部微妙に違いがあるが、このあたりは乱数の性能の限界なのかもしれない。




    作成したプログラム


    GitHubに置いています。

    2013年4月13日土曜日

    家に帰ってブログ書くまでがシェル芸



    春爛漫シェル芸人撩乱勉強会に参加してきた。
    本日はwget, curl, sedさんたちが活躍する内容。 curlなんて入ってたっけ?と思うぐらい何もしない状態での参加をしてしまった。
     前回と同じく以下、自分の知らなかったことの(断片的な)まとめ。

    curl, wget で画像URL収集

    curl, wgetでhtmlファイルを持ってきて、そこからは必要なデータを切り出すという作業。
    以下はimgタグにある画像データを取ってくる場合。

    $ curl http://www.yahoo.co.jp | sed -e 's/<img src/\n&/g' | grep "img src" | grep http | sed -e 's/^[^"]*"//' | sed -e 's/".*$//'
    
    http://k.yimg.jp/images/clear.gif
    http://k.yimg.jp/images/clear.gif
    http://k.yimg.jp/images/clear.gif
    http://k.yimg.jp/images/clear.gif
    ・・・以下略
    

    上のコマンドを見て気持ち悪いと持った人は正常な感性を持ってると思う。オレならこう書けるとか思った人は変態やと思う。

    ひたすらsedでテキストをいじってるけど、このURL抜き出しに必要なsedイディオムは以下のようだった。
    • img srcタグ1つにつき1行にするように抜き出したいタグ(この場合img)の前に改行をぶちこむ
    • 先頭からURLの直前の'"'までと、URL以降を削除する。
    正規表現は普通に書くと最長一致となり意図しない部分まで削られてしまうので、 ^[^"]*"のような気持ち悪い書き方になる。これは何とかならない物なのか。

    grep -oオプションを使えばもう少し簡単にかけて、以下のような感じになった。
    $ curl http://www.yahoo.co.jp | sed -e 's/<img src/\n&amp//g' | grep "img src" | grep -o 'http://[^"]*"' | tr -d \"
    
    
    
    -oオプションは行単位ではなく、マッチした部分のみ出力する。これは一番明日から使える内容かもしれない。 

    いずれにしろ、こういう書き方はワンライナーだから許されるものであってこんなのがスクリプトとして残っていたら見るほうが発狂しそう。

    あと便利なgrepオプションついでに-A -B -C (NUM)オプションも素晴らしい。これはマッチした行の前後もあわせて表示すると言うもの。

    % seq 1 10 | sort -R
    % seq 100 110                                           
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    
    # マッチした次の行も表示
    % seq 100 110 | grep -A 1 105
    105
    106
    # マッチした前の行も表示
    % seq 100 110 | grep -B 1 105  
    104
    105
    # マッチした前後の行も表示
    % seq 100 110 | grep -C 1 105 
    104
    105
    106
    
    


    curl, wgetでPOSTリクエスト

    以下のようにすれば、wget, curlでもPOSTリクエストが送れる。 cronで定期的にリクエスト投げたいときに使えるかもしれない。
    $ wget -O - --post-data=test http://www.usptomo.com/XXXXXXX
    $ curl -d test  http://www.usptomo.com/XXXXXX
    
    

    他にもいろいろあったけど、とりあえず酒が入ってものすごい眠いので今日はここまで!

    2013年1月27日日曜日

    Windows環境へPython, easy_installインストール手順


    Linux環境ならすぐできたけど、Windows環境では環境変数の
    設定などが多少必要だったのでメモ

    環境:Windows 7
    入れるもの: python2.7, easy_install

    1. Python公式サイトからpython2.7インストーラをダウンロード・実行
    2. すべてデフォルトでインストールすると、C:\Python27以下にディレクトリ・ファイルが生成される。
    3. 環境変数PATHに"C:\Python27"と"C:\Python27\Scripts"を追加。
    4. 環境変数PYTHON_HOMEにも"C:\Python27"追加。
    5. コマンドプロンプトからpythonと実行すると反応があることを確認。
    以上でpythonインストール完了。
    ついでにeasy_installも入れる。
    1. このWebサイトからez_setup.pyをダウンロード
    2. python ez_setup.py でインストール
    3. コマンドプロンプトからeasy_installと実行すると反応があることを確認。
    以上




    2013年1月2日水曜日

    cmdおみくじ

    正月で暇だからコマンドプロンプトで貼り付けたらおみくじの結果を表示するワンライナー書いてみた。 シェルだとすぐにできるけどDOSのコマンドだとどうやっていいのかなかなか分からなかったので、メモ代わりに残しておく。
    SET /A R=%RANDOM% % 6+1 >null & for /f "tokens=%R%" %i in ("大吉 中吉 小吉 末吉 凶 大凶") do echo おみくじの結果は"%i"です。
    
    おみくじの結果は"中吉"です。