正規表現
ここ3日間は、お仕事&アクションゲームの製作をしていました。
ここ3日で学んだこと…
HTTPプロトコルについて
Basic認証について
Socketの投げ方
などなどです。うち、ゲームに関係あるのは最後の正規表現ですね。
今回のゲームでは、マップチップ(オブジェクト)を3D空間内に配置するわけですが、2Dゲームと違ってただ単に画像を切り出して張っているわけではなく、Xファイルオブジェクト(これも独自形式にしないとな…)を適切な大きさに変更して配置しているわけです。それに加えてそのチップが通れる通れないの判定も前より複雑です。
今まではプログラム側で決めうちで作っていたのですが、そろそろ外部ファイルに書き出しておくことにしました。バイナリデータで書いておいても良かったのですが、それだと専用のエディタが必要になります。そこで、テキストファイルに独自スクリプトでデータを書いておくことにしました。(.NETなんで、別にXMLでも良かったのですが…)
.NETは標準で正規表現が使えるので、それを利用しない手はないですね。正規表現は言語記述用の言語みたいなものなので、大体の言語の構文はこれを使って定義できます。表現空間的には結構広いらしいです。さてさて、.NETで正規表現を使うには…
using System.Text.RegularExpressions;
と「System.Text.RegularExpressions」ネームスペースを使います。ここら辺のクラスを使うことで、あるテキスト内からマッチする文字列を取得することが出来ます。例えば・・
Regex r = new Regex(@".*\;"); Match m = r.Match(Text); while (m.Success) { alText.Add(m.Value.Trim()); m = m.NextMatch(); }
こんな感じです。このプログラムはstring変数Textの中から「〜;」という文章を探し出して「alText」(これはArrayList型)に追加していっています。このあと「string sText = (string)alText.ToArray(alText[0].GetType()); 」とでもやってやれば、「〜;」という文章のstring配列が作れます。いや、便利ですね。(ここら辺はDOBON.NETを参考にさせていただきました)
こうやって、文字列を切り出していってやれば、大体のスクリプトの解析は簡単にかけてしまいます。是非是非お試しくださいな。