プログラミング
Jeans & Development | 電子ブロック工房 | 三日坊主 | フロントページ |
aliens.vbs [プログラミング]
2008年5月17日
先日配布の、oyagameを利用したゲーム、aliensのコードを少しばかり解説。
まず、ライセンスはGPL。これは、CでできたオリジナルのaliensがGPLであることによる。
''''''''''''''''''''''''''''''''''''' ' The license of this script is GPL ' ' ' ''''''''''''''''''''''''''''''''''''' option explicit dim SDL,IMG,Mix,i set SDL=CreateObject("sfcmini.oyagame") execute SDL.ConstVBS call SDL.Init(SDL_INIT_EVERYTHING) set IMG=CreateObject("sfcmini.oyagame") call IMG.LoadLibrary("SDL_image.dll","IMG_") set Mix=CreateObject("sfcmini.oyagame") call Mix.LoadLibrary("SDL_mixer.dll","Mix_")
まず、ライセンスはGPL。これは、CでできたオリジナルのaliensがGPLであることによる。
oyagame 0.0.3.2α [プログラミング]
2008年5月15日
微調整をかねて、SDLのゲームをoyagameに移植。選んだのは、aliensという非常にシンプルなゲーム。ソースコードの大きさが手ごろだったのでこれを選び、VBScriptに移植した。下の画像は、oyagame/VBScriptでの実行画面。


oyagame 0.0.3.0α [プログラミング]
2008年5月10日
Pygame入門を参考にしながら、どんなことができればSDLがちゃんと使えたことになるか確認しながら開発を行っている。前回の0.0.2.3αでは、ウィンドウが表示できることが分かった。次は、このウィンドウに画像を表示させるというところだろう。
実行結果:

set SDL=CreateObject("sfcmini.oyagame") execute SDL.ConstVBS SDL.Init(SDL_INIT_EVERYTHING) set surface=SDL.SetVideoMode(200,100,32,SDL_RESIZABLE+SDL_HWSURFACE+SDL_DOUBLEBUF) call SDL.WM_SetCaption("Hello oyagame",0) set temp=SDL.CreateStructure("SDL_Surface",SDL.LoadBMP_RW(SDL.RWFromFile("block.bmp", "rb"), 1)) set image=SDL.ConvertSurface ( temp, surface.format, SDL_SWSURFACE ) SDL.FreeSurface(temp) call SDL.UpperBlit(image,image.clip_rect,surface,surface.clip_rect) SDL.Flip(surface) set ev=SDL.CreateStructure("SDL_Event") do SDL.WaitEvent(ev) select case ev.type case SDL_KEYDOWN if ev.key_keysym_sym=SDLK_ESCAPE then exit do end select loop until ev.type=SDL_QUIT WScript.Quit
実行結果:

OyaGame 0.0.2.3α [プログラミング]
2008年5月3日
oyagame 開発中 [プログラミング]
2008年4月28日
先日、ふとしたことからpygameの存在を知り、少しばかり虜になってしまっている。
これは何かと言うと、SDL (Simple DirectMedia Layer)を、Pythonで使えるようにしたものだ。要するに、Pythonでゲームを作成するためのツールである。同様のものに、Ruby/SDLがある。
何が私を虜にさせるかというと、gameという名なのである。20年以上前になるが、GAMEというプログラミング言語があった。BASICと良く似ているが、これが流行した当時、この言語の一番の特徴は実行速度にあった。BASICと比べてとにかく速かったその理由は、コンパイルが可能であったことである。これを使って、MZ-80で、数え切れないほどのゲームを作成したものだ。
これは何かと言うと、SDL (Simple DirectMedia Layer)を、Pythonで使えるようにしたものだ。要するに、Pythonでゲームを作成するためのツールである。同様のものに、Ruby/SDLがある。
何が私を虜にさせるかというと、gameという名なのである。20年以上前になるが、GAMEというプログラミング言語があった。BASICと良く似ているが、これが流行した当時、この言語の一番の特徴は実行速度にあった。BASICと比べてとにかく速かったその理由は、コンパイルが可能であったことである。これを使って、MZ-80で、数え切れないほどのゲームを作成したものだ。
SFC mini ver 1.0.5 β [プログラミング]
2008年4月24日
Windows Vista対応の、SFC mini バージョン 1.0.5 ベータをリリースしました。利用の際は、1.0.1に上書きした後にinstall.vbsを実行してください。
とりあえず、ベータバージョンとします。もし不具合がある場合は、お知らせいただければうれしいです。
次の正式バージョンは 1.1.0 の予定で、現在の 1.0.5 のメモリ管理を少し見直し、ヘルプファイルを少し書き直してリリースの予定です。同時に、SFC mini のためのフォーラムを暫定的に立ち上げるかもしれません。
SFC mini ver 1.0.5 βは、SourceForge.jp からダウンロード可能です。
とりあえず、ベータバージョンとします。もし不具合がある場合は、お知らせいただければうれしいです。
次の正式バージョンは 1.1.0 の予定で、現在の 1.0.5 のメモリ管理を少し見直し、ヘルプファイルを少し書き直してリリースの予定です。同時に、SFC mini のためのフォーラムを暫定的に立ち上げるかもしれません。
SFC mini ver 1.0.5 βは、SourceForge.jp からダウンロード可能です。
SysAllocString [プログラミング]
2008年4月22日
SFC miniの一部の機能がVistaで動かない件について、一ヶ月悩んだのがうそのような出来事が…。
原因はほぼ一つのことに絞られれていた。SFC miniから文字列を出力した場合、WSHの側でそれを使用した後に例外が出て止まる。mallocやnewやdeleteなどをいくらいじっても駄目。
で、思いついたのが、当然ではあるのだが、Google先生に聞いてみること。今回の件の実装については、"pVarResult->bstrVal="というソースコードが必ずあるはず。で、『"pVarResult->bstrVal"』という検索語で調べてみた。
4つ目に、このブログのエントリーが。これはまずいと思ったけれど、その少し下に、『pvarResult->bstrVal = SysAllocString(wStrValue);』と言う文字が。SysAllocString!!!なんと心地いい名の関数であることか。これだと思い、テストコードに挿入。いとも簡単にエラーが無くなった。1ヶ月悩んだのがまるで嘘であったかのように…。
色々調べると、次のページあたりが参考になりそう。
WinAPI: BSTR
BSTR 用のメモリの割り当てと解放
SysAllocStringを使っていなかったのは規約違反であったということらしい。
これで、Vista対応版のSFC miniの新しいバージョンをリリースするめどが、ほぼついた。
原因はほぼ一つのことに絞られれていた。SFC miniから文字列を出力した場合、WSHの側でそれを使用した後に例外が出て止まる。mallocやnewやdeleteなどをいくらいじっても駄目。
で、思いついたのが、当然ではあるのだが、Google先生に聞いてみること。今回の件の実装については、"pVarResult->bstrVal="というソースコードが必ずあるはず。で、『"pVarResult->bstrVal"』という検索語で調べてみた。
4つ目に、このブログのエントリーが。これはまずいと思ったけれど、その少し下に、『pvarResult->bstrVal = SysAllocString(wStrValue);』と言う文字が。SysAllocString!!!なんと心地いい名の関数であることか。これだと思い、テストコードに挿入。いとも簡単にエラーが無くなった。1ヶ月悩んだのがまるで嘘であったかのように…。
色々調べると、次のページあたりが参考になりそう。
WinAPI: BSTR
BSTR 用のメモリの割り当てと解放
SysAllocStringを使っていなかったのは規約違反であったということらしい。
これで、Vista対応版のSFC miniの新しいバージョンをリリースするめどが、ほぼついた。
JScriptのFunctionオブジェクト [プログラミング]
2008年4月16日
ネットサーフィンしていて、たまたま見つけた情報。
jscriptで自作COMからイベントを発生させたい - Visual C++/CLI その他 - Visual Studio User Group:
から、抜粋。
なお、関数オブジェクトは、DISPIDが0(DISPID_VALUE)で、名前が"anonymous"というメソッドを持ったCOMオブジェクトのようです。 MSDN内でもまとまった記述はなく、色々と苦労して調査しましたよ。
JScriptの関数もオブジェクトとして扱われていることは知っていたが、これをCOMオブジェクトとして扱うと、上記のようなことになるらしい。お宝を見つけた気がするので、忘れないようにメモ。
VB.NETでのテストプログラムは、こちら。このリンクは、IDispatchの.NETからの呼び出しの参考にもなる。ちなみに、Native C++からの呼び出しの例は、こちら。
jscriptで自作COMからイベントを発生させたい - Visual C++/CLI その他 - Visual Studio User Group:
から、抜粋。
なお、関数オブジェクトは、DISPIDが0(DISPID_VALUE)で、名前が"anonymous"というメソッドを持ったCOMオブジェクトのようです。 MSDN内でもまとまった記述はなく、色々と苦労して調査しましたよ。
JScriptの関数もオブジェクトとして扱われていることは知っていたが、これをCOMオブジェクトとして扱うと、上記のようなことになるらしい。お宝を見つけた気がするので、忘れないようにメモ。
VB.NETでのテストプログラムは、こちら。このリンクは、IDispatchの.NETからの呼び出しの参考にもなる。ちなみに、Native C++からの呼び出しの例は、こちら。
Vistaにおいて、VBScriptスクリプト中で管理者権限に移行する方法 [プログラミング]
2008年4月12日
SFC mini用の新しいinstall.vbsが完成。
Vistaかどうかのチェック方法として、『WSHのバージョンが5.7以上』かつ『Windowsのバージョンが6.0以上』で調べている。これに該当する場合、Shell.ApplicationオブジェクトのShellExecuteメソッドを利用して管理者権限でwscript.exeを起動しなおす(このとき、引数に『vista』を指定)。最後に、regsvr32.exeを実行して終了。
option explicit Dim wmi,os,value,wsh,sha,sfo Set sfo=CreateObject("Scripting.FileSystemObject") do while WScript.Arguments.Count=0 and WScript.Version>=5.7 'Check if Vista Set wmi = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set os = wmi.ExecQuery ("SELECT * FROM Win32_OperatingSystem") For Each value in os if left(value.Version,3)<6.0 then exit do 'Exit if not Vista Next 'Run this script as admin. Set sha=CreateObject("Shell.Application") sha.ShellExecute "wscript.exe",""""+WScript.ScriptFullName+""" vista","","runas" WScript.Quit loop 'Current directory may be moved to system32, maybe not. Set wsh=CreateObject("WScript.Shell") wsh.run "regsvr32.exe """+sfo.GetAbsolutePathName(WScript.ScriptFullName & "\..\" & "sfcmini.dll")+""""
Vistaかどうかのチェック方法として、『WSHのバージョンが5.7以上』かつ『Windowsのバージョンが6.0以上』で調べている。これに該当する場合、Shell.ApplicationオブジェクトのShellExecuteメソッドを利用して管理者権限でwscript.exeを起動しなおす(このとき、引数に『vista』を指定)。最後に、regsvr32.exeを実行して終了。
QIQを試してみた [プログラミング]
2008年4月7日
今度は、もどきではないクロージャの、PHPでの実装について。
先日の記事、『PHPでクロージャもどき』を書いた後、hsurさんからの指摘などもいただいて色々調べた結果、先の記事の方法ではcreate_functionを使う不便さを除けば、一般的なクロージャの機能は一通りそろえていることは分かった。
一方で、create_functionの不便さはいかんともしがたいと思っていた矢先、知ったのがこれ:
続々・Zend Engine Hack (クロージャもあるよ) (拡張モジュールもあるよ) - 讃容日記:
先日の記事、『PHPでクロージャもどき』を書いた後、hsurさんからの指摘などもいただいて色々調べた結果、先の記事の方法ではcreate_functionを使う不便さを除けば、一般的なクロージャの機能は一通りそろえていることは分かった。
一方で、create_functionの不便さはいかんともしがたいと思っていた矢先、知ったのがこれ:
続々・Zend Engine Hack (クロージャもあるよ) (拡張モジュールもあるよ) - 讃容日記: