もんしょの巣穴blog

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

龍が如く

欧州のDSLに新色の黒が登場。
っていうか、日本でも出せ。
というわけで、黒が出るまでDSLは買わない方向で。
ダメならカオス館辺りに入荷するのを待ってみようかと。

『龍が如く』を上司に借りて遊んだのでレビュー。
SEGAの『龍が如く』は同社の『シェンムー』に似たアクションアドベンチャーです。

主人公はやくざ。堂島の龍と恐れられた男。
しかし、組長殺害の罪をかぶって10年間刑務所へ。
10年後、出所してみれば組は内部抗争開始という状況。
しかも彼は組から狙われ、加えてやはり狙われている謎の少女を保護することになる。
昔世話になった刑事などの助けを借り少女を守ろうとするが、どんどんおかしな陰謀に巻き込まれる。

と、ストーリーはやくざものというより陰謀系のサスペンスです。
やくざってのはあくまでも雰囲気ものですね。
ストーリーや舞台設定には色々と突込みどころは多いですが、面白くないわけではなく、むしろ面白い方だと思います。
フィクションとしてはよくある話ではあるのですが。
特に舞台設定は突っ込もうと思うときりがない。
賽の河原という浮浪者の集まる公園にはバリケードが敷かれ、廃駅となった地下鉄駅には街に設置された1万台もの監視カメラをモニタできる部屋があったりする。
そこは地下歓楽街にもなってる。地下闘技場なんてのもある。
街にあるレンタルビデオ屋で人妻緊縛物を借りようとするとドスから手榴弾まで売ってる武器屋に案内される。
大通りに面した宝くじ売り場の近くの壁は隠し扉になっていて、その奥には丁半賭博の賭場がある。
一体全体ここはどこの国ですか、って感じ。一応日本らしいが、ありえない。
しかしまあ、そこはゲームだから。突っ込みたいのをぐっとこらえましょう。

ゲームはアドベンチャーパートとバトルパートに分かれています。
通常はアドベンチャーパートで移動します。
基本はここでイベント進行します。また、サブイベントや町の色々な施設での遊びも可能です。
遊びはゲーセンやパチンコ以外に、丁半賭博やキャバクラなんかもあり。マッサージなんてのもありますが、これってやっぱりやばい方のマッサージだよね。
これらの遊びはメインシナリオには関係ありません。唯一、メインシナリオの進行上で丁半賭博をやるくらい。
こういうシナリオと関係ないものを遊ぶ方が好きな人にとってはいろいろ楽しめてうれしいのではないかと思います。

バトルパートはイベントの進行上や街を歩いていて因縁をつけられるなどの理由から発生します。
個人的に、このバトルパートがゲーム中最も面白くないと感じました。
最大の理由はカメラです。
カメラはキャラの向いてる方向にカメラリセットする以外の操作が出来ません。
それでいてちょっと軸がずれただけで攻撃は当たらないし、ロックオンもある程度自分の正面にいないとまったくやってくれない。
時にはまったく敵のいないほうに攻撃してくれたりすることもあってとにかくストレスが溜まる。
これでまだカメラが自由に動かせればよかったのですが、自由とはとてもいえない程度にしか動かせないので自分が見たい方向、戦いたい敵の方向を見ることが出来ません。
結果、画面外の敵に突っ込まれて倒されたりするわけで。起き上がりにまた転倒技を重ねてきたりもするし。
それでもまだ広い場所ならいいのですが、狭い場所だとカメラが壁に当たって見づらいことこの上ない。
唐突にカメラが変わる場合もあったりして、自分が移動すべき方向がわからなくなることもしばしばあります。
っていうか、右のアナログスティックがミニマップの移動って何の意味もないのですが。使わないし。
カメラ回せたほうがよっぽど良かったですよ。何で自由に回せなかったんだろう?
技が微妙に少ないとか攻撃の隙がでかすぎるとかはゲーム性の範囲なので我慢できますがね。

バトル以外は及第点。バトルはもっと操作のしやすさや遊びやすさを考えるべきかと。
特にゲーム本編と無関係な寄り道が大好き、という人にはオススメできるゲームです。
ただ、バトルには期待しない方が無難ですね。

スポンサーサイト
  1. 2006/05/27(土) 15:14:04|
  2. ゲーム
  3. | トラックバック:0
  4. | コメント:0

Squirrel その5

今回で Squirrel の言語仕様解説は終了。
C言語と同様に条件分岐には if と else を使います。


if(i == 0){
}
else if(i == 1){
}
else{
}


ループには for 、while 、do?while が使えます。どれもC言語と同じ使い方です。
for 文は for 文内で変数宣言することもできます。


for(local a=0; a<10; a++){
}


C言語にはありませんが、C#にはある foreach が使えます。
foreach は配列やテーブルのスロットの数だけループします。


local arr = ["zero", "one", "two"];
foreach(i, v in arr){
    print(i + ", " + v + "\n");
}

結果:
0, zero
1, one
2, two


この例の場合、i にスロット名、v にスロットの中身が入ります。
i, の部分をはずすこともできます。その場合も v にはスロットの中身が入ります。
ループ中に break, continue の使用もできます。

typeof 命令を使用すると変数の型を文字列として取得することができます。


local a = 0;
local b = "zero";
local c = 0.0;

print(typeof a + "\n");
print(typeof b + "\n");
print(typeof c + "\n");

結果:
integer
string
float


instanceof 命令を使用するとどのクラスのインスタンスかを調べることができます。


class Foo{
    x = 0;
};

a = Foo();
if(a instanceof Foo){
    print("This is Foo.\n");
}


”インスタンス名 instanceof クラス名”で、一致していれば true を、不一致なら false を返します。

その他、様々な組み込み関数があります。
これらの関数はヘルプにもありますのでそちらを参照してください。
よく使いそうな関数なら dofile() あたりでしょうか。
この命令は引数として .nut ファイル名を指定することで他のファイルを実行することができます。
いわゆるヘッダファイルのインクルードみたいなものですね。
なお、Squirrel を自作プログラムに組み込む場合、組み込み関数を使用するかしないかをいくつかのグループに対して指定することが出来ます。

次回はSquirrelを自作プログラムに組み込む方法についてやっていきます。

  1. 2006/05/18(木) 22:01:58|
  2. プログラミング
  3. | トラックバック:0
  4. | コメント:0

God of War 日本語版

GW中に同僚から借りた『God of War』日本語版をやりこんだのでレビューを。
以前オリジナルの方を日記に書いたことがありますが、今回は日本語版。
日本語版になったおかげでシナリオとかよくわかるようになりましたし、その所為か落ち着いて楽しめました。
やっぱり日本語は落ち着く。

まずはシナリオ。日本語になったおかげでよくわかったのですが、結構適当じゃないかな、これ。
全体的なストーリーの流れは悪くないのですが、所々が説明不足。
しかも説明不足の部分をナレーションで補ってるのですが、これがもうとにかく適当で。
”クレイトスは知っていた”とか”アレスにはわかった”とか、とにかくそういうもんなんだから理解しろ、といわんばかり。
辻褄あわせとかそういうのはほとんど考えてないようです。
ゲーム中のトラップにしても、何のヒントもないのに当たり前のように死体の頭を引っこ抜く。
で、それが扉の鍵になる。説明は一切ない。
ただ、クレイトスというキャラクタはそれでもOKと思わせる迫力があります。
また、おかしなトラップの数々も、クレイトスをはじめとするキャラクタの狂気を反映していると考えるとまったく違和感がない。
キャラクタの造型によってシナリオの悪い部分をふっ飛ばしてます。
それを何の問題もなく受け入れられる人には問題なく楽しめるのですが、そうでない人にはちょっときつい部分かもしれませんね。

日本語版になってエロ系は結構規制されています。
具体的には乳が見えてる部分は全部見えないようにしています。
残虐部分は流血表現はそのままのようですが、ゲーム中に人間は殺せなくなっています。
生贄の人間もスケルトンに変更されていました。
唯一能動的に人間を殺せるのはレバーを抑えている人間を殺すだけ。
オリジナルは人間を殺すとライフオーブ(体力回復)を出すのですが、日本語版はそれがなくなったので難易度が微妙に変わっているようです。
が、難しくなったのではなくむしろ簡単になっているようです。
デストラップは変わってませんが、微妙に敵が弱くなっているように感じました。
特にラスボスはオリジナルの方はEASYでも苦労した記憶が。日本語版はかなり簡単に倒せました。

落ち着いて遊べた分、技術的な部分にも結構目が行きました。
アーチの奥に見える景色はある程度の距離だと書割なのが、ある程度近づくと3Dのモデルに変化してます。
極力その変化がわからないようにカメラとかを工夫していますが、すばやく移動したりカメラが色々な移動の仕方をするようにしてみたりすると変化のタイミングがわかりやすいですね。
このような工夫はMAYA上でほとんどのことが出来るから実現できることなのでしょう。
スクリプトでなんとかする、という方針だとこうは上手く出来ないでしょう。

このゲームは非常に魅力的で面白い作品です。
それは日本語化してもあまり変わりません。
面白いアクションゲームを求めているならオススメです。

  1. 2006/05/17(水) 22:17:35|
  2. ゲーム
  3. | トラックバック:0
  4. | コメント:0

Vフォー・ヴェンデッタ

SCEはかの人物の口を塞いだ方がいいのでは?
あれは反感を買うだけで利点がないと思うのですが。
注目を集めるためにやってるのかもしれませんが、PSPでもPSXでも失敗してるような…。
まあ、PSPは海外で調子いいんですけどね。

据え置きゲーム機は今のところ勝者が見えてこない。
勝者なき戦い、になることが一番可能性として高いような気もします。
一番いいのはハードの一本化ですが、それは無理だろうしなぁ…。


話は変わって映画のレビュー。
先日見てきた『Vフォー・ヴェンデッタ』です。
ストーリーは正直あんまりです。
矛盾やおかしなところも多いし、独裁政権を題材にしたSFは結構多い。
オーウェルの『1984年』なんてまさにこれと似てる世界です。
舞台は近未来のイギリス。
第3次世界大戦でアメリカは敗れ、イギリスは議長による独裁政権によって支配されている。
そこに現れたのが”V”と名乗る仮面の男。
彼は要人を暗殺し、裁判所を爆破するといった、いわゆるテロリスト。
正体も目的も不明な彼と一人の女性の出会いから物語は始まります。
物語については微妙ですが、映像は非常に迫力があります。
というか、力強い映像を作るために他のいろいろな部分をそぎ取ったようにも見えます。
アクション映画かというと実はそうでもなく、あんまりアクションシーンはありません。
それでも妙に力のある映像に仕上がっていると思います。
個人的にはアクションシーンで剣残像(『ソウルキャリバー』のあれ)が使われていたのが良かったです。
ストーリーの矛盾が絶えられない人には厳しいと思いますが、娯楽映画としては合格だと思います。

  1. 2006/05/12(金) 22:31:51|
  2. 映画
  3. | トラックバック:0
  4. | コメント:0

据え置きゲーム機

E3で色々情報が出てきたので、現状を独断と偏見でまとめてみる。

Xbox360
・発売中。約4万円。最新据え置きゲーム機としては妥当な値段。
・海外では売れているが、日本では売れていない。やはり日本向けソフトの少なさが原因か。
・性能面ではPS3にやや劣る。弄ってみると案外やりたいことが出来ないとか何とか。
・排熱量、駆動音がでかい。熱暴走しやすいので、夏場は厳しいかも。
・ネットワークはそれなりに上手くいってるっぽい。他社に対して一歩リード?
・開発環境、サポートに力を入れている。評価は高い。
・だからと言って開発費が安くなるというわけでもない。PS3よりはマシっぽいが。
・今後、Windowsとの連携を強めていく予定。PCゲームの開発がしやすいのは海外においては利点。
・HD-DVDドライブは年末発売予定。価格は未定。買う人がいるかどうかは甚だ疑問。
・それでもMSのゲーム部門は調子がいいらしい。欧米では十分なシェア獲得が期待できそう。

PS3
・11月11日発売予定。通常版は7?7.5万円くらい。
・BDプレイヤとしても使えるがレコーダ機能はない。
・ゲーム機としては高い。BDプレイヤとしては安めだが、そこに魅力を感じる人はあまり多くないかも。
・そもそも、BDとHD-DVDの争いって一般人には知らない人も多そうだよね。
・新型機の中では最も性能が高い。が、排熱量、消費電力等に問題を抱えていそうな予感。
・SCEの偉い人のコメントはユーザを馬鹿にしてるように思えるのだが、それが狙いなのか?
・FF13、MGS4など、人気作の新作が参戦表明。GT新作なども予定されているっぽい。
・これらのキラータイトルが如何に牽引するかが鍵だろう。
・ただ、サードパーティのゲームは別の機種に移植する可能性がある。それなりの普及率がないと愛想をつかされるかも。
・開発費の高騰、技術難易度などが中小デベロッパに打撃を与えそう。
・コントローラのジャイロ機能は思ったより使いにくくないかも。弄ってみないとなんともいえないけど。
・現状ではちょっとネガティブなイメージが強い。発売日までにどれだけ払拭できるか?

Wii
・最終四半期(10?12月)発売予定。価格は未定ながら3万円は超えないものと予想される。
・Wiiリモコン、ヌンチャクなど個性的な入力デバイスに期待される。
・GCコントローラ、クラシックコントローラによって今までの形のゲームも十分サポートできる。
・性能はXboxと同程度。スペック不足との声もある。
・SDカード、Bluetoothなど、一般的なデバイスを使用しているのでサードパーティのデバイスも色々期待できるのでは?
・具体的にはHORIさんにもうちょっといいコントローラを作って欲しいのですが。
・FC、SFC、N64、MD、PCEの名作が有償で遊べるようになる。値段やラインナップは未定。
・ローンチタイトルが色々と出てきている。また、独占契約も色々なタイトルで結んでいるらしい。
・スマッシュブラザーズの新作はローンチではないが2007年中に出る。
・このゲームにはMGSのソリッド・スネークが参戦予定。他社ゲームからも参戦が期待されている。
・また、スマブラではジャイロ機能は使われないらしい。ジャイロ機能を使わないゲームは発売できない、ということにはならないようだ。
・現状では最も期待されている新ハード。これ以上のサプライズがあるかどうかは不明。

今の評価を見ると、2年後くらいには日本はWii、海外はXbox360という状況にならないとも限らないですね。
しかし、PS3の、というかSONYのブランド力も侮れないところ。最終的には十分なシェアを獲得できるかもしれません。
が、初回が売り切れるかどうかは疑問です。Wiiは売り切れがありそうなので、欲しい人は予約しておいた方がいいかもしれません。
多分、現状で最も知名度が高いのはPS3だろうと思います。WiiやXbox360は一般では知らない人も多いのではないかと思います。
興味のない人より興味のある人に強くアピールする、と言うSONYの方向か、ゲームを知らない人でも楽しめるようにする任天堂の方向か。
どちらが正しいとは言えませんが、日本においてはDSの例がある以上後者のほうが有利か。
蓋が開くのは今年の最終四半期なので、それまでのんびり待ってみましょう。

  1. 2006/05/11(木) 21:43:40|
  2. ゲーム
  3. | トラックバック:0
  4. | コメント:0

PS3価格発表

さて、既に発表があって多くの人が知っているであろうPS3の価格。

PS3は初期で2種類。HDD20GBバージョンとHDD60GBバージョン。
前者は59800円(税別)。後者はオープンプライス。
とりあえず前者の価格をメインに発表していますが、これが一つの落とし穴。
前者はHDMIがないなど、HDDの容量が少ないというだけではありません。
SONYとしてはこちらはPS3の廉価版で、60GBが通常版という考え方だと思われます。
PSPも2種類出していましたが、これに近い考え方と思われます。
最終的に60GB版は廉価版より1?1.5万円ほど上がるものと思われます。
アメリカでは499ドルと599ドル。これだと差は1.1万円くらい。
ヨーロッパでは499ユーロと599ユーロ。これだと差は1.4万円くらい。

このような価格設定は、カラクリがわかる人にとっては騙されるレベルではありませんが、あまり知識がない人なら結構騙されやすいのではないかと思います。
つまり、廉価版の方を見て”思ったより安い”と思う人がいる、ということです。
ちなみに、友人の一人がそんな感じのメール送ってきました。買っちゃうかも、とか。
突っ込みいれたら様子見に変更されました。そんなもんです。

価格設定について妥当かというと、スペックを見た限りでは頑張っている方ではないかと考えています。
しかし、評価できるかといえばまったく評価できません。はっきり言って中途半端です。
税込み6万円を超える(通常版は7万円を確実に超える)はゲーム機としては高すぎです。
ではBDプレイヤとしてはどうかというと、これもまた微妙です。特に機能面で。
正直なところ、もっと価格は高くてもいいので、前回発表の仕様を維持し、ついでにHDDレコーダ機能が付いていれば買っていた人は増えたと思います。
特に現在VHSを使っている人々が買った可能性があります。
この際、HDDの容量がより大きければ(最低160GB)普及の見込みもあったのではないかと思います。

ゲームの魅力に関してですが、Xbox360とのクロスプラットフォームのゲームが増えている状態ではアドバンテージは薄いのではないかと思います。
コントローラの傾きセンサについてもWiiのコントローラが評価されたから急遽無理矢理付けた感があります。
そもそも、ボタン数が多すぎて直感的でないPSコントローラに無理矢理直感的な操作を持ち込もうとしてもわやくちゃになりそうな気がするのですが。
この辺については実際にやってみないとわからない部分ですが。でも、個人的にはあんまり遊びたくないなぁ…。

この後、任天堂とMSのカンファレンスがありますが、任天堂はWiiを2万円台(2.5万円以内)に抑えてくると予想できます。
2.5万でコントローラが2つついてくるならお買い得な値段だと思います。
MSはXbox360の値段を下げてくるのではないかと予想しています。1万円くらいが妥当か?
ついでにHD-DVDドライブの発表もするのではないでしょうか。
日本では売れていないXbox360ですが、海外では十分売れているらしく、MSのゲーム部門は大幅増収増益らしい。
この機に上手く日本で普及させることが出来ればSONYからシェアを奪うことは可能でしょう。

私としては、BDの方がHD-DVDより普及してくれることを望んでいます。
最大の理由は口に出すにしてもネットなどで表記するにしてもBDの方が楽だから。
が、やはりSONYだからねぇ…ベータとかATRAC3とか…。
ちなみに、最初に言っているような高額商品にしたとしても私は買いません。BDは様子見、HDDレコーダは持ってる。
なんにしても現段階では様子見です。HALO3が出たらXbox360は買います。Wiiは多分普通に買います。

  1. 2006/05/09(火) 22:33:24|
  2. ゲーム
  3. | トラックバック:0
  4. | コメント:0

道志?山中湖ツーリング

昨日も天気が良かったのでツーリング。
とはいえ、前日の疲れが微妙に抜けない。もう歳だな。
今日の目的地は道志道を通って河口湖へ。
道志道に入る前の相模湖周辺の道がアホみたいに混んでました。
以前もここはかなり混んでたなぁ…。
やはり連休に近場で済ませようとした人々が集まったんでしょうね。
しかし道志道に入ってしまえば快適。
ここはそれなりに交通量があるのに混まないから大好き。
しかも景色がいいし。こんな感じ。
道志道の風景
で、道の駅で再び山女の塩焼きを食う。いつ食っても美味い。
道の駅はかなり混んでました。バイクには関係ないけど。
その後、山中湖に入るところでアホみたいに混む。道も狭いからすり抜けも厳しいし。
この段階でかなり時間を食ってしまい、山中湖に入っても混雑は一向に解消しない。
結局、河口湖に行くのは諦め。あの混みようでは河口湖は酷いものと予想したため。
山中湖で昼食。ほうとうは以前食べたし、何よりあんまり腹減ってなかったので蕎麦でも。
入ったお店は『華や』という和食のお店。結構混んでる。
ここには山女の刺身なんていうメニューがあったので蕎麦と一緒に頼んでみた。ちなみに、1050円。高い。
出てきたのは山女の活け作り。口がパクパク動いて、たまにビクンと大きく動く。
山女の刺身
味の方はまあまあ。同じ山女なら塩焼きの方が好みですね。値段も塩焼きの方が安いし。
蕎麦の方もまあまあ。つゆはなかなか良かったけど、蕎麦がね。
それから山中湖を一周。途中で見晴らしのいいところで写真を一枚。
山中湖から見る富士山
富士山には残念ながら雲がかかっていました。一応富士山だと認識は出来ますが。
そして道志道に戻って一路道志の湯へ。
このくらいからかなり寒くなってきて、早く風呂に入りたいと思ってました。
しかし、行ってみるとアホみたいに混んでる。外まで並んでいる状態で、お風呂は芋洗い状態。
それでも何とか隙間を見つけて入り込み、それなりに暖まりました。
評価は…まあ、あれだ…有名なところは有名なだけの理由があるよね。
無名ってことはそれなりってことなわけで。多分、もう行かないと思う。
っていうか、草津行きたい。心からそう思う。
温泉は長野や群馬が最高ですよ。正月に実家に帰れたらのんびり温泉に入りに行こう。

  1. 2006/05/05(金) 19:40:36|
  2. ツーリング
  3. | トラックバック:0
  4. | コメント:1

御殿場ツーリング

今日は晴れていたのでツーリング。
目的地は静岡の御殿場。
天気がいいから富士山が見れるかも、と期待してました。
御殿場市には市営の温泉会館なるものがあり、そこの浴場から富士山が拝めるらしいという情報を得て行ってみることにしたわけです。
朝、洗濯とかしてたらちょっと遅くなってしまったのですが、それでも10時に自宅を出る。
しかしその時間ではすでにR246はアホみたいに混んでる。
いつも思うのですが、もう少し何とかならないものか。R246とR16は。
しかも山北よりちょっと手前くらいに大量の珍走団の群れに巻き込まれる。
すげぇ迷惑。蛇行するし五月蝿い音でふかすし。
死ねばいいんだ、ああいうやつらは。GTAだったら真っ先に殺してるな。
そいつらを適当にやり過ごして、結局御殿場市に入ったのは2時回ってから。4時間もかかったのか。
道の駅で一休みして、ルートをチェックしてからいざ温泉。
何ら問題なく発見できたので早速入浴。
なお、この温泉会館は利用時間が決まっています。
500円で2時間。800円で半日らしいです。オーバーすると1時間につき100円の追加料金。
まあ、普通に風呂に入るだけなら2時間で十分。
残念ながら、富士山は見えませんでした。富士山付近に雲が立ち込めていてまったく見えず。
温泉の方はというと、塩素臭い。ちょっとこれは、と思うくらいに臭い。
最近の温泉は行政指導とかで塩素を入れてるところが多くなってるらしい。
なんとか菌とかがやばいとか何とか。とかとか。
仕方がないとは思いつつも残念でしょうがない。
それでも十分暖まれたので良しとする。自宅ではシャワーばかりだから。
その後、近くに厳島神社があることが判明したので行ってみることに。
厳島神社といえば世界文化遺産。でも、それは広島の方。
看板に由緒が書いてありましたが、どうやら広島の厳島神社から分霊されたもののようです。
厳島神社の由緒
分霊されたものとはいえあの厳島神社に連なる神社。そのすばらしい神社はこちら!
厳島神社(御殿場バージョン)
鳥居の奥にある本堂。狛犬。神木。でもこれだけ。
しょぼいとか言わない。私はこういううら寂れた神社の方が好きだ!
なお、この神社は砂利道の奥にあります。
砂利道は狭いのですが、車は通っても大丈夫みたいです。
ここを見てから今度は箱根を越えて平塚経由で帰ってこようと思って一路箱根越え!
しかし…アホみたいな渋滞。R246などメじゃないです。
どうやら、観光客が横断歩道を渡る際に信号機ではなく交通整理の人がやっていた模様。
ただ、これがとにかく止めるらしく、渋滞の列は一向に進まない。
下りだったからほぼずっとエンジンを切って重力のみで移動していましたが、さすがに疲れた。
っていうか、二度と箱根には行かん。あんな思いはもうごめんだ。
それであまりにも時間をくってしまったので、平塚までは西湘バイパスを爆走。
しかしあまりの寒さに死にそうになる。今日は空気が冷たかった。
帰りのR246はいい感じに進んでいたので問題なかったのですが、寒さだけはどうにもならない。
結局、時間はかかった割に200キロ程度しか走ってないんですよねぇ…。
渋滞は嫌いだ。

  1. 2006/05/03(水) 21:53:55|
  2. ツーリング
  3. | トラックバック:0
  4. | コメント:0

Squirrel その4

Squirrel ではクラスが使用できます。
C++ほど便利なわけではないですが、一応継承も出来ます。
デストラクタはありませんがコンストラクタはあります。


class CVec3{
    x = 0.0;
    y = 0.0;
    z = 0.0;

    constructor(...)
    {
        if(vargc >= 3){
            x = vargv[0];
            y = vargv[1];
            z = vargv[2];
        }
    }

    function Print()
    {
        print(x + ", " + y + ", " + z + "\n");
    }
};


コンストラクタは constructor キーワードで作成します。
引数の ... は 0 個以上の引数を指定できます。
vargc に引数の個数、vargv の配列に引数の中身が入っています。
これはクラスのコンストラクタだけでなく、普通の関数でも使用できます。
なお、Squirrel では関数のオーバーロードは出来ません。
引数の数が違おうとも後に定義した関数やメソッドが有効になります。
このクラスを使用するにはインスタンスを作成します。


local v1 = CVec3();
local v2 = CVec3(1, 2, 3);
v1.x = v2.x;


メンバに private はありません。すべて public です。
面白いことに、クラスはテーブルと違って代入時にはコピーが作成されます。
また、テーブルを使うことで名前空間を作成することが可能です。


TestNamespace <- {
    Utils = {};
};
class TestNamespace.Utils.TestClass{
    constructor()
    {
        print("constructor is done.");
    }
};
function TestNamespace::Utils::TestClass::Print()
{
    print("I am TestClass.");
}


名前空間の指定方法が微妙にわかりにくいので気をつけてください。
また、クラスに外部からメンバを追加することも可能です。


class TestClass{
    constructor()
    {
        print("TestClass constructor.");
    }
};
TestClass.val <- 10;
function TestClass::Print()
{
    print("TestClass::Print.");
}


気をつけなければならないのはインスタンスを作成したあとにはメンバの追加が出来ないことです。
もちろんインスタンスに追加することも出来ません。この辺はテーブルと違う部分です。
メンバ変数には静的メンバ変数があります。


class TestClass{
    static test = "I am Static.";
};


静的メンバ変数はいわゆる定数にすぎません。変更不可。なお、静的メソッドはありません。
クラスの継承は extends キーワードを用います。


class Foo{
    constructor()
    {
        print("This is Foo constructor.");
    }
};

class FooEx extends Foo{
    constructor()
    {
        Foo.constructor();
        print("This is FooEx constructor.");
    }
};

local a = FooEx(); // FooEx のインスタンスを作成
local b = FooEx.parent; // FooExの継承元クラス(Foo)を取得する
local c = b(); // Fooのインスタンスを作成


メソッドは必ずオーバーライドされます。継承元のメソッドは明示的に実行する必要があります。
また、クラスには暗黙的に parent メンバが作成され、これが継承元クラスになります。
この継承元クラスをローカル変数に突っ込めばここから継承元クラスのインスタンスを作成できます。
Squirrel には operator の代わりにメタメソッドがあります。


class CVec3{
    function _add(other)
    {
        return CVec3(x + ohter.x, y + other.y, z + other.z);
    }
};

local a = CVec3(1, 2, 3);
local b = CVec3(4, 5, 6);
local c = a + b;


コンストラクタ等は前述のものが設定されているものとしてください。
_add は + のメタメソッドです。四則演算以外にも色々な命令に対するメタメソッドが用意されています。
メタメソッドには引数があるものとないものがありますが、引数の種類は何でもOKです。
例の場合はベクトルの加算なので引数は同じベクトルクラスですが、積算の場合は浮動小数点にすることができます。

で、クラスはこんなもんで。
次回で何とか言語仕様を終わらせる予定。

  1. 2006/05/02(火) 20:15:20|
  2. プログラミング
  3. | トラックバック:0
  4. | コメント:0

Squirrel その3

GWはツーリングに行く予定ですが、問題なのはガソリン代。
130円超えてますよ。アホかと。
バイクは車に比べると燃費はいいけど、それにしたってきついよ。


前回の続き。
Squirrel でも関数の作成が可能です。もちろん、引数も使えて戻り値も使えます。


function foo(a, b)
{
    return a + b;
}


引数、戻り値ともに型は指定できません。
整数や浮動小数点数を使う分には問題ないですが、テーブルや配列を使うときは気をつけてください。
この手のエラーはコンパイル時には出てこないで実行時に出てきます。
なお、整数等の引数はコピーになりますが、テーブルや配列は参照渡しになります。
関数は関数ポインタのように変数に代入することが出来ます。もちろん、その使用も可能です。
また、テーブル内の関数は以下のように登録できます。


local a = {};
function a::foo(a, b)
{
    return a + b;
}


スロット追加と同じようにも出来ますし、初期化時に登録することも可能です。
また、無名関数が使用できます。


local a = function(a, b)
{
    return a + b;
}


Luaのクロージャとは違い、無名関数が定義されている関数内のローカル変数をいじることは出来ません。
ただし、以下のようにすることで外部変数を参照することが出来ます。


local x = 0;
local y = 0;
local a = function(a, b) : (x, y)
{
    return x + y + a + b;
}


外部参照した変数は定数と同じで変更することが出来ません。が、テーブルの場合は各スロットの値を変更することは出来ます。スロットの追加も出来ます。
関数は再帰呼び出しも可能です。スタックの使いすぎに注意しましょう。
次に説明するのはコルーチンです。聞きなれない単語と思う人もいるでしょう。
通常の関数はサブルーチンと呼ばれます。
サブルーチンはメインルーチン(もしくは別のサブルーチン)から呼び出され、サブルーチンが終了するとメインルーチンに戻ります。
コルーチンの場合、別のルーチンから呼び出されますが、終了する前に一時停止して元のルーチンに戻ることが可能です。
そして適当な場所で一時停止したコルーチンに戻ることが出来ます。もちろん、停止した場所にです。
このような方法は別スレッドを作成することでCでも使用できますが、マルチスレッドのように複数のスレッドが同時に実行されるわけではありません。
Squirrel では2つの方法でコルーチンを使用することが出来ます。
1つ目はジェネレータ関数です。


function gen_test(n)
{
    for(local i=0; i<n; i++){ yield i; }
    return null;
}

local gen = gen_test(10);
local x;
while(x = resume gen){ print(x + "\n"); }


関数ポインタと違い、引数を指定した関数を変数にぶち込むとジェネレータ関数になります。
yield 命令が発行されたところで一時停止します。この時、yield の後に指定された値を戻り値にします。
ジェネレータ関数を作成した段階でも停止しています。これを動かすには resume 命令を用います。一時停止したジェネレータ関数を再起動します。
なお、終了済みのジェネレータ関数を resume するとエラーになります。
もう1つはスレッドを用いる方法です。


function thread_test(n)
{
    local ret = 0;
    for(local i=0; i<n; i++){ ret = suspend(i + ret); }
    return -1;
}

local thr = newthread(thread_test);
local ret = thr.call(10);
do{
    print(ret + "\n");
    ret = thr.wakeup(ret);
} while(thr.getstatus() == "suspended");


newthread 命令でスレッドを作成します。スレッドの状態は getstatus 命令で取得でき、idle, running, suspended のいずれかの文字列が返ってきます。
suspend 命令でコルーチンを一時停止し、wakeup 命令で再起動します。
ジェネレータ関数と違う点はコルーチンの一時停止時以外に、再起動時にコルーチンの方に戻り値(というのも変な話だが)を渡すことができる点です。
suspend 命令の引数は call か wakeup の戻り値になり、wakeup 命令の引数は suspend の戻り値になります。

  1. 2006/05/01(月) 22:53:16|
  2. プログラミング
  3. | トラックバック:0
  4. | コメント:1

プロフィール

monsho

Author:monsho
ゲームプログラマ?

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。