投稿

ラベル(python)が付いた投稿を表示しています

Blender 3D Game Engine AI python code for 'Programming Game AI By Example' Cap.3.

イメージ
I ported AI code from  Programming Game AI By Example Cap.3 ' How to Create Autonomously Moving Game Agents ' c/c++  to python(Blender Game Engine).  All codes are derived from source originally written by  Mat Buckland and Petr Bilek,(Java version) Open blend file by Blender 3D (Ver2.7 and Ver2.69 were tested). Please edit params.ini file path in param_loader.py by yours. C lick center screen and push 'P' demo will start.( and stop by ESC key). A lso see README in Zip file. DOWNLOAD: here Enjoy. History: Jun. 12 '14 Fixed Hide behavior. P.S. Japanese version is  「実例で学ぶゲームAIプログラミング」 Mat Buckland、 Kouichi Mastuda

Pythonと++(increment)

PythonへJavaやC++のコードをポート(移植)するメリットはほとんど場合、コードが短くなり、シンプルになってアルゴリズムに集中できるからだ。そして高速にテストが出来るためとても便利である。しかも、最近はBlender 3D上でのシュミレーションも可能で実験するのに便利だ(bulletも含め)。ボクは主にAIやPhysicsの分野で役立てている。 で、ポートの際、バグが入ってしまうのは、instanceのコピーや参照、テンプレート(*)やオーバーロードの問題もあるが、簡単なものでは++iという数式がエラーを発生しない問題がある。 javaやC++で以下の行があるとする。     i=0;     ++i; ご存知の通りiは+1されて1になる。 python(2.xや3.x, ボクは現在3.3.2を利用)では。     i=0;     ++i; エラーが表示されず、単にiは0のままになっている。 理由は +(+i)と認識し、結果的にiが書かれているとpythonは認識するからだ。 正しくは...    i=0;    i+=1; と書くと正常にポートできたことになる。(もちろん;は不要、念の為) したがって、++iなどがあればi+=1に全て書きなおすことを忘れないようにしなければならない。 最後に、短いコードではすぐにこの手のバグは発見できるが、  数千、数万行単位になると発見しにくいので注意しなければならない。 P.S. lint( pylint )も役立つと思われる。 例えば以下のようなエラーを表示してくれる。 W:617,12:GameWorld.Render: Statement seems to have no effect E:617,12:GameWorld.Render: Use of the non-existent ++ operator 参考: http://stackoverflow.com/questions/1485841/behaviour-of-increment-and-decrement-operators-in-python ...

開発言語は人気があればなんでもいい

ボクの好きなコンピュータ言語はC/C++言語。いままで一番利用してきた言語である。だた最近のものは機能がありすぎてゲップがでるほどだけどw シンプルなほうが一番である。ここ3,4年は使っているのがjavaである。一番の理由は iOSも含めモバイルに対応 してきたためだ。ただC/C++と比べ処理速度が遅い。マニュアルのスポーツカーが好きなボクには少し物足りない。 しかし、javaを使うのはクロスプラットフォーム対応で、コンパイル時間がものすごく高速なのがいい。pythonも好きな言語だが、インタープリターのため実行しなければバグが発見されないのが少々イライラする。まぁ、ともかくjavaとpython。そして、痒いところに手が届くためにSWIG(GUIじゃないぞw)などを利用しC/C++言語を使っていく。サーバー側の開発が多いならばrubyも使いたいけどもしばらくなさそうだ。またjavascriptはいまのところ、Webで遊び程度に使っているだけだ。 ただし、所詮開発言語も人気次第(特に英語圏)、優れた言語でも人気がなければ意味がない、言語と言っても優秀なライブラリや、クラスプラットフォーム、情報の質の高さ、ツールの優秀さ、独占者がいないか?などできるだけ自由で子供が鉛筆を持つように気軽に使えなければならない。そういう意味ではdart、C#などはまだまだボクには手が出しにくい言語である。 今年から、息子たち(とくに長男)にコンピュータ言語を教えようと予定しているがどの言語から始めようか迷っている。候補はjavaかpythonである。 PS Swigは http://www.swig.org/ を参照