2015-05-20 09:42
きふわらべの脳内完成図から見ると、スクリプト言語を使いこなすことが必要なんだぜ☆
スクリプト言語の1つ、Lua が使えるかどうか まず調査なんだぜ☆
C:\Root_KifuWarabeその他\NLua
というフォルダーを作って、テスト環境を作ってみるぜ☆
前回の続き☆
NLua のソリューションを開いて、[追加]-[既存のプロジェクト]で、
KeraLua のプロジェクトを開けばいいと思うんだが、やってみるぜ☆
src/KeraLua.Net45.csproj
参照の追加で、いろいろ追加するぜ☆
C:\Root_KifuWarabeその他\NLua\KeraLua-master\src\bin\Debug\net45\KeraLua.dll
うわっ、「参照設定」が いくつかあるんだぜ☆
どうも、ローカルPCに移してきたときに パスが合わなくなったか、
環境設定がそもそも わたしと異なるみたいなんだぜ☆
10:17
NLuaTest の参照設定に KeraLua を追加すると、
コンパイル・エラーは収まったんだぜ☆
そしていつものランタイム・エラー☆
うーむ☆ ネイティブ・アプリケーションがエラーを出しているのか☆
lua52.dll の中にある、luaL_newstate というメソッドがエラーを出していると分かるな☆
10:33
これ、 Lua52.dll のソースなんじゃないか☆? 多分……☆
src/lauxlib.c ファイルの中に、 luaL_newstate メソッドがありそうだな☆
なんで
luaxlib.c じゃなくて、
lauxlib.c という名前なんだぜ☆? スペルミスじゃないのか☆? それとも正しい略語☆?
うーむ☆
10:40
lua_newstate メソッドか、
lua_atpanic メソッドのどちらかでエラーが起こっていると思うんだぜ☆
lua_newstate メソッドは lua/lstate.c ファイルの中に書かれてあって、
初期化をやっているんだぜ☆
lua_atpanic メソッドは lua/lapi.c ファイルの中に書かれてあって、
なにやら 古い関数をやめて 新しい関数に入替える、関数の交換をしているみたいだな☆
たいしたことしてないな☆
lua_newstate でエラーが出ている気がしないんだぜ☆
そもそも、lua52.dll を読み込むときにエラーが出ているんじゃないか☆?
10:54
[DllImport (LIBNAME, CallingConvention = CallingConvention.Cdecl, EntryPoint = "luaL_newstate")]
internal static extern IntPtr LuaLNewState ();
という場所に、エラーがある気がするんだぜ☆
まず ググってみるぜ☆
Lua52.dll は、『アンマネージド・コード』だから、 CallingConvention.Cdecl という
キーワードを付けて .dll ファイルを読み込んでいるようだな☆
.NET じゃないアプリケーションのメソッドを使う、ぐらいの意味だろうか☆
すると怪しいのは、残った DllImport と、LIBNAME なんだぜ☆
どのディレクトリーにある Lua52.dll を探しているのかなんだぜ☆?
12:05
NLuaTest.dll は testsフォルダーにあるんだが、これは実行ファイルではないので
カレントディレクトリーではないだろう☆
とはいえ、 ConsoleTest.exe も testsフォルダーの中にあったんだぜ☆
この tests フォルダーの中に Lua52.dll はなくていいのかなんだぜ☆?
そこで きふわらべに適当に入れて使っていた Lua52.dll を放り込んでみたんだが、
「間違ったフォーマットのプログラムを読み込もうとしました」と出てしまうんだぜ☆
バージョンが違うのだろうか☆?
Lua は、C++ なので、コンパイルの方法が分からないんだぜ☆
12:22
Windows で Lua をビルドする
というページはあるんだが、これをやることで合っているんだろうか☆?
分からないので 1つ1つ できることを潰していくんだぜ☆
わたしの場合、 Lua を Windows にインストールするには、
MinGW 64 bit 版
というものを使うみたいなんだぜ☆
ググると記事が出てきたんだぜ☆
MinGW 64 bit 版 のセットアップ
説明を深く読まずに 2つのファイルをダウンロードしたんだぜ☆
とりあえず mingw-w64-install.exe をダブルクリックするんだぜ☆
12:32
なんのこっちゃか分からないんだが、 [Next >] ボタンばっかり押していれば
いいのかなんだぜ☆?
13:13
あー、Architecture が i686 になっているんだぜ☆! これではリナックスなんだぜ☆!
インストールのやりなおしなんだぜ☆!
13:29
「MSYSを起動し~」と説明があったんだが、MSYSがどれのことか分からないんだぜ☆
これでいいのだろうか☆? さっぱり分からなくても、あるボタンは押してみるんだぜ☆
うーむ☆ どうも違うようなんだぜ☆
わからないので、 mingw-get-setup.exe ファイルもダブルクリックしてみるんだぜ☆
13:46
こんなのが出てきたんだぜ☆
出てくるボタンは どんどん押してしまおう☆ww
これでいいのかなんだぜ☆?
ここぐらいしか、それっぽい 押すところ がないんだが☆
14:06
こんなダイアログボックスが出てきたんだぜ☆
いつ入ったのか知らないんだが、
C:\MinGW\msys\1.0\msys.bat
というファイルができていたんだぜ☆ ダブルクリックしてもいいのだろうか☆?
14:09
これは MSYS なのだろうか☆? MINGW32:~ と書いてあるんだが☆
14:13
MSYSは、こっちにページがあるな☆
このツールは GNUライセンス なんだろうか☆
このツールで作られていると思われる lua は何ライセンスなんだぜ☆?
14:18
- インストール後、"C:\Program Files\mingw-w64\x86_64-4.9.2-posix-seh-rt_v3-rev1\mingw64\bin" をパスに追加する。
(http://www.geocities.jp/penguinitis2002/computer/programming/MinGW-w64.html)
という説明書きがあったんだぜ☆
環境変数にセットすればいいのだろうか☆?
わたしのPCの中を見てみると、似たようなフォルダーは次のような感じだったんだぜ☆
C:\Program Files\mingw-w64\x86_64-4.9.2-posix-seh-rt_v4-rev2\mingw64\bin
うーむ☆怪しい☆あとで考えよう☆
14:27
どうも、Windowsで Linuxのコンパイラーが使える、みたいな感じかと思うんだが、
64ビット版ではなくて、32ビット版(MINGW32:~)が断ちあがっているのが
気になるんだぜ☆
ソースからコンパイルするのではなくて、2015年5月分の Lua52.dll が落ちてないか
探してみるぜ☆
14:35
ダウンロードした lua の中を見てみると、
・android
・iOS
・WindowsPhone
用のものは入っているんだが、Windows7/8 のものがどれか分からないんだぜ☆
14:40
Lua のホームページを見たんだが、リンクをクリックしたあとがあるので、
今もっている Lua52.dll は、ここからダウンロードしたはずなんだが☆
バージョンが1個古いのか、 lua-5.2.3 で、 2014年7月27日なんだぜ☆
NLua の開発環境を持ってきてコンパイルする、という案は いったん中断するぜ☆
14:48
NLua の開発環境をまったく用意しないで、
NLua を使うだけ、というのはできるのだろうか☆?
まず NLua のページを調べるんだぜ☆
これだと思うんだが……☆(^_^)
ダウンロードしてみると……あれ☆? 新しくなっているんだぜ☆ 最新版か☆
15:05
まず、 NLua.dll と KeraLua.dll は C# で作られていることが分かった☆
そして、 lua52.dll は C++ で作られていて、アンマネージド・コード だということが分かった☆
だから、 NLua.dll と KeraLua.dll は、Visual Studio 2012 の[参照設定]に追加できるが、
lua52.dll は [参照設定]に追加できない☆
では、アンマネージド・コード は、どのフォルダーに置いておけばいいんだろうか☆?
開発環境のデスクトップPCでは .exe と一緒に入れておけば動くんだが、
ノートPCだと動かないんだぜ☆
15:41
こんな感じになるんだぜ☆ ツイッターで質問を投げていると、
ノートPCに
『Visual C++ ランタイム 2010 x86版 / x64版』
『Visual C++ ランタイム 2012 x86版 / x64版』
を入れてみてはどうか、と聞いたんだぜ☆
これらのファイルのうち、「再頒布可能パッケージ」という名前が付いていれば、
自作ゲーに添付して配布しても OK らしいんだぜ☆
インストーラー、どうするんだぜ……☆?
試してみるぜ☆
16:00
いらいら☆ww
16:18
はひょー☆! 動いたんだぜ~☆
lua52.dll を動かすには『VC++2013ランタイム 再配布可能パッケージ』で
『インストール』をする必要があったのか☆ww
成果
あり なんだぜ☆!
微速微進、遅々前進なんだぜ☆
16:54
次のテーマは、
きふわらべが、
棋譜ツリーのノードとして持っている局面データが でかすぎる
という問題の解決に当たりたいんだぜ☆
棋譜ツリーは、 符号 だけ持っていればいいんだぜ☆
今、きふわらべは 局面を持っている☆
2手 だけでも 900局面もあるんだぜ☆ それを駒1個1個 場所を覚えている☆
これを止めて、指し手だけ 記憶するようにして、
局面データが必要なときは 覚えておくか、初手から再現するようにしたいんだぜ☆
17:02
やろうとすると、 7七 には歩があるんだが、駒がないというエラーになって
いるんだぜ☆
7七から7六へ歩を動かしたあとには 確かに駒はないんだが、
データを見ると 駒はあるはずなんだぜ☆
17:15
エラーメッセージを詳しくしてみたんだが、「あるんだが ない」と言っているな☆
もっと詳しく見てみるんだぜ☆
18:17
どうも データ は合ってるみたいなので、
棋譜ツリーをいじったことで、プログラムの方に 何か 不具合が起こっている気が
するんだぜ☆
Assertを書いてみるかなんだぜ☆
時間がかかりそうなんだぜ☆ww 次へ行くぜ☆ww
18:24
MultiPV 5 を入れようとしているんだが、
指し手が5つ並んでいるだけで、どれがいい手なのか 判断を入れていないんだぜ☆
評価値も調べて、一番評価値が高い手を選びたいんだぜ☆ww
//書きかけ
[0回]
PR
http://grayscale.dou-jin.com/Entry/213/【将棋】めざせデジゲー博2015☆コンピュータ将棋ゲームきふわらべ頒布☆(5) Luaの勉強を続けるぜ☆ww