もんしょの巣穴blog

スポンサーサイト

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

Squirrel その2

前回の続き。
まずは Squirrel をDLしてきます。公式サイトからSourceForgeに飛んでDLできます。
メイクファイルも付属していますが、VC6プロジェクトファイルが付属しているのでVS使用者なら簡単にビルドできるでしょう。
エラーが出るかもしれませんが、簡単に直せると思います。
ライブラリ以外に sq.exe があり、これを使用すれば Squirrel ソースファイルのコンパイルや実行が可能です。
実行は以下のコンソールコマンドです。


sq ファイル名


Squirrel ソースファイルのデフォルト拡張子は .nut です。リスだからナッツ、ということなのでしょう、きっと。
まず、適当なソースファイル(test.nut とか)を作成し、以下のように書いてください。


print("Hello World!");


なお、セミコロンはなくても可。Cプログラマならつけておいた方がわかりやすいと思いますが。
これを実行すると、コンソールに Hello World! と出力されます。
Cと違って、main() 関数は存在しません。関数として宣言されていない命令はすべて実行されます。
print() 命令はCの printf() 命令と似ていますが、文字列でなくても指定することが出来ます。


print(1);
print(0.55);


数値がそのまま文字列として出力されます。
文字列と数値や変数を出力する際には + を利用します。


local a = 10;
print("a = " + a + "\n");


変数はローカル変数とグローバル変数が使用できます。
ただし、グローバル変数は暗黙的に存在するルートテーブルのスロットとして登録されます。
変数には整数、浮動小数点数、文字列、NULL、BOOLがあります。
整数は10進数以外に16進数も使用可能です。また、一文字も整数として扱われます。


local a = 10;
local b = 0x0010;
local c = 'c';


浮動小数点は f をつけてはいけません。BOOL は true か false です。
null で初期化するか、初期化を行わないと NULL オブジェクトになります。
文字列は " で囲みます。また、こんな指定の仕方も出来ます。


local a = "I am Sam.\nI am not John.\n";
local b = @"I am Sam.
I am not John.
"


@ を付けるとソースコード中の改行を文字列の中に加えてくれます。結構便利ですよ。
これらは代入の段階で型が決定されます。これらの型は別の型を代入することでその型に変更することが可能です。
ただし、テーブル、配列、クラスとの間で型変換は出来ません。
テーブルは Lua と同じように初期化できます。


local a = {};
local b = {
    i = 10,
    f = 0.55,
    str = "I am string.",
    [1] = 3,
};


この例で、a は空のテーブルです。あとからスロット(要素)を追加することが可能です。
b の各スロットにアクセスするにはCと同じやり方か、配列のような指定が使えます。


b.i = 20;
b["str"] = "I am not integer.";
b[1] = 10;


Lua ではスロットの追加は新規のスロット名に適当に代入すればよかったのですが、Squirrel では明示的にスロットの追加を行わないといけません。


a.i = 20; // エラー。暗黙的なスロットの追加はされない。
a.i <- 20; // i というスロットが追加され、整数 20 で初期化される。


グローバル変数はルートテーブルのスロットとして登録されるので、Lua のように local を付けないだけではエラーになります。


ga = 1; // エラー。
ga <- 1; // ルートテーブルにスロットが追加される。


配列はテーブルを使用しても何とかなりますが、配列の方が高速に動作します。


local a = [];
local b = [10, 20, 30];


配列の番号は 0 からです。
この例で b は要素数 3 の配列になります。a は空の配列です。
テーブルのようなスロットの追加は出来ません。初期化と似たような方法になります。


a[0] <- 10; // エラー。
a <- [10, 20, 30]; // これならOK。
b <- [40, 50]; // 要素数は 2 になってしまう。追加はされない。


決まった要素数の配列は組み込み関数を使用します。Cのような方法ではエラーとなります。


local c[10]; // エラー。
local c = array(10, 0); // 要素数 10 の配列を 0 で初期化する。


スロットの追加は特にミスしやすい部分だと思います。気をつけてください。
テーブルと配列の場合、代入は参照渡しになります。
コピーを渡す場合は clone 命令を使います。


local a = {
    val = 10
};
local b = a;
b.val = 20; // a.val も 20 になる
local c = clone a;
c.val = 30; // a.val は変化しない



なお、Luaにあった複数の変数への代入は出来ません。


a, b = 10, 20; // LuaではOKだったが、Squirrel では代入されない。エラーにはならないけど。


今日はここまで。
次回も言語仕様について解説します。

スポンサーサイト
  1. 2006/04/30(日) 18:38:23|
  2. プログラミング
  3. | トラックバック:0
  4. | コメント:0

Squirrel その1

最近、Luaという単語を稀ながら耳にすることがある。
Luaは、いわゆるスクリプト言語と呼ばれる類の言語で、一般的には組み込み型軽量言語というのではないかと思う。
スクリプト言語はある程度以上の規模のゲームを作る上では欠かせない。
スクリプト言語で出来ることはC/C++にしろJAVAにしろ、ほとんどそちらでも対処可能だ。
しかし、それらを全てプログラムで書くのはいろいろな点で難しい。
まず、プログラムサイズが無駄に大きくなる。使う必要のないところでも読み込まれるからだ。
しかもちょっと変更しただけでメイクしなおすというのはかなり面倒。
スクリプト言語があれば、ある程度の処理をそちらで作ることが可能になる。
プログラムのメイクとは別にコンパイル可能なので、プログラマ以外でも弄ろうと思えば弄れる。
プログラムとは別のデータになるので、読み込まなければ無駄なメモリを消費せずに済む。
上手くすればユーザが何らかの処理を作成し、追加することも出来る。
そんなわけで、ある程度以上の規模のゲームになると何らかのスクリプト言語が使用されているのが普通だ。
もちろん、やりたいことが決まっているのなら、それ専用のスクリプト言語を作成するのが色々な意味で手っ取り早い。
特にプログラムサイズや速度の面ではそれ専用の方が有利だ。
が、色々な用途で使用したい場合は、それぞれで別々のスクリプト言語を用意するべきだろうか?
この方法だと覚えなければならないことが多くなるし、同じようなことをするにも別々の解決法が用意されるのはよろしくない。
そこで、ある程度汎用的に使用できる言語が求められる。しかも、軽くて速い事が重要だ。
そんな言語の一つとして、Luaが現在頭角をあらわしている。
軽量・高速でコルーチンやクロージャも使える。何よりライセンスがかなりクリアで、Cのみで作成されているため移植もしやすい。
最近のゲームで言うなら、『FarCry』やHL2のMODである『Garry’s Mod』でも使用されている。
日本人に馴染み深いものなら、『Ragnarok Online』のペットか何かの思考ルーチン作成でも使用できるとか何とか。
この辺はLuaのオフィシャルサイトで使われているソフトのリストがあるので見てみるといいだろう。
このLua、少し前から弄り始めていたのだが、どうにも不満が出てきてしまった。
C/C++っぽくない言語仕様も気に入らないし、組み込み側ではスタックを弄って色々やらなければいけないのも面倒。
他にも細々とあるのですが、それらのいくつかを解決する言語が某所で紹介されていた。
それがSquirrel。リスという意味の英単語で、”スクワラル”と読むのがいいのではないかと思う。
この言語を作成したのは『FarCry』にLuaを組み込んだプログラマらしい。そのため、Luaの不満点の一部を解決してくれている。
言語仕様はC/C++っぽくなってるし、クラスも使える。あと、配列も使える。
ただ、スタックを弄らなければならないのは変わってない。これがどうにもわかりにくい。
Luaに比べて情報が少ないのも厳しいところ。
流行るかどうかは不明だが、個人的にはLuaよりは使いやすい。
そんなわけで、これから数回に渡ってSquirrelの紹介とサンプルでもやってみようかと思う。

  1. 2006/04/28(金) 19:08:35|
  2. プログラミング
  3. | トラックバック:0
  4. | コメント:0

4月番組

最近、テレビを見るのはアニメ・特撮系かニュースかジャパネットたかたのみだ。
たかたは色んな意味で面白い。っていうか、何であんなに宣伝が上手いんだろうね?
あの番組を見てると普通に欲しくなるんですよね、大型テレビとか。
いや、買いませんけど。うちのブラウン管テレビは健在ですから。


さて、4月のアニメは相当数が放映されてるらしい。
といっても見てるのはそのごく一部。今日はそれご紹介。


同僚にダビングを頼まれたから録画しているのが『ひぐらしのなく頃に』。
3回ほど見ましたが、あんまり怖くない。
っていうか、あの日常パートはまとめると30分程度で終わっちゃうのね。
まあ、あの部分で引き込んでおいて、その後のギャップを楽しむのが正しいのでしょうけど、そのためとはいえちょっと冗長な感は否めない。
アニメの方はすっきりまとまってますが、クオリティに関しては微妙かな。


原作が面白かったので見てるのが『女子高生』。
マリみてとは正反対な女子高生ライフを描いた作品ですが、原作の雰囲気はよく出てると思います。
ただ、アニメとしてのクオリティは全体的に低め。ノリでカバーしてる感はあります。
この前はバイブ(エログッズ)が無修正で放映されてましたが、いいのか、あれ?


この前1話だけ見たのが一部で評判の『涼宮ハルヒの憂鬱』。
評判がいいだけあってクオリティは高い。
が、話がよくわからない。閉鎖空間とかって単語が当たり前のように出てきてますが、一体なんだ?
まあ、ハルヒとそれに振り回される仲間たち、という1話完結のギャグアニメとしてみれば構えることなく楽しめるような気がします。


第2期ということで当然のように見てるのが『ARIA THE NATURAL』。
やっぱり音楽がいい。加えて、アリア社長がかわいい。
っていうか、ほぼこれだけのために見てるといっても過言ではない。
いや、ストーリーとかも嫌いじゃないんですが、山も谷もあんまりないからねぇ…。
第1期を私と同じ理由で見てた人なら楽しめるんじゃないかと思います。


一番のオススメはなんといっても『おねがいマイメロディ くるくるシャッフル』。
ファンシーの代名詞であるサンリオキャラなのに、よくこれを許したなと思えるくらいに黒いキャラ・マイメロディ。
第1話でマリーランド(マイメロディ達が住んでる国)のリーサルウェポンことマイメロママが毒吐いたかと思えば、第2話では最強のウサミミ仮面(正体は秘密だ)が出てくる。
第3話ではマイメロの黒さを遺憾なく発揮させるし、最初から飛ばしすぎだ。
女の子向けアニメのはずなのに、明らかに女の子を対象にしてないのはなんでだろうか。
これとカブトで日曜日朝は1年間は安泰じゃないかと。

  1. 2006/04/26(水) 20:50:29|
  2. 未分類
  3. | トラックバック:0
  4. | コメント:0

相模湖

予告どおりに相模湖編へ。
ゲームセンターCXは知らない人もいるかと思います。
地上波では放送していないテレビ番組で、よゐこ有野が難易度の高いゲームをクリアしたりちょっと珍しいゲームセンターを紹介したりする番組です。
DVDも出ていますし(今度Vol2が出る)、YouTubeでもいくつか見れます。
このゲームセンターCXで以前紹介されていたのが相模湖のゲームセンター。
今回のツーリングの副目的はここを写真に収めることだったりします。
有料駐車場にバイクを止めて(駐車料金50円と自然を守るとか何とかいう名目で20円取られます)広場に向かいます。
広場に出るとまず目に付くのがこれ。
トムキャット1

トムキャット。F-14。映画『トップガン』でも有名です。
いや待て、宇宙のロマンとか書いてあるぞ?
湖で、名前は戦闘機、でも宇宙のロマン。これ如何に?
実物はこれ。
トムキャット2

飾りをつけたモーターボートです。いつから新登場なのでしょうか?
広場はこちらです。
相模湖広場

実際にはもっと人がいました。できるだけ人が少ない状態で撮影しただけです。
とはいえ、天気の悪さも加わって寂れた印象が強いです。
目的のゲームセンターはこちら。
ゲームセンター

入ってすぐに射的があり、奥にテーブル系のゲーム、そのまた奥に卓球やテーブルホッケーがあります。
入ればわかりますが、まるで温泉街のゲームセンターのよう。
が、この辺に温泉街はありません。
ここの奥に昔懐かしいピンボールがあります。CXでも紹介されていたそのままのもの。
ピンボール

パドルにガムテープが張ってあるのが色々すごい。
CXのとおり、得点がリセットされていません。100円で1プレーしてみましたが、やっぱりリセットされません。
っていうか、パドルのスイッチって台の横にあるんですね。
実物ピンボールは生まれてはじめて遊んだので知らなかったよ。
手前側に、台を揺らすとダメ、的な注意書きが張ってありました。
台を揺らすとTILTランプがつき、ゲームが終了してしまうんだそうな。
このピンボール、日本で最初のゲーム機らしいです。名前はアポロ。
アポロ解説

1965年らしい。私より一回り年上だ。
ピンボールはこの他もう1台ありました。こっちは遊んでませんが、やっぱり得点はリセットされないっぽい。
その横にはずらりと並んだスマートボール。
スマートボール

スマートボールは小学生くらいの時に遊んだ記憶はあるのですが、どこで遊んだかは覚えてません。
多分どこかの温泉だったと思います。
なお、こちらは1ゲーム200円。ちょっと高い。
この写真の上のほうにあるポスターですが『サムライスピリッツ』のポスターでした。
たぶん最新作だと思うのですが、ゲーム自体はどこにも置いてません。
また、ここにはギャラガ、スペースインベーダー(モノクロ)、ドンキーコングが置いてあります。1ゲーム100円。
なお、勝手に写真撮ってたら怒られました。
まあ、いい人なので笑って許してくれましたが。写真を撮るなら許可も取ろう。

広場写真の左側にある貸しボート屋さんのところにも古いゲームがいっぱいありました。
バーチャファイターとかあったし。色付きのスペースインベーダー(画面が変だった)もありました。
有野が20分遊んでいたボウリングゲームもありましたし、10円が詰まったのもありました。これらは遊んでません。
腕相撲のやつは遊びましたが、有野より腕力なくて泣いた。っていうか、あれから肩が痛いんですが(運動不足を実感)。

正直なところ、ここで遊ぶために来るのはさすがにどうかと思うのですが、ツーリングがてら立ち寄るなら悪くない場所だと思います。
友達とお誘い合わせの上、是非。
  1. 2006/04/23(日) 17:47:36|
  2. ツーリング
  3. | トラックバック:0
  4. | コメント:0

奥多摩湖

今後の日記はこっちで書こうと思います。
元の日記は1ヶ月くらい放置しておく予定。

今日は相模湖→奥多摩湖→別ルートで相模湖とツーリングに行ってきました。
今日のところは奥多摩湖編。
まず相模湖まで2時間。いつもながら16号線は混んでる。
16号を外れて相模湖まで行くルートも結構混む。
あんなところに行く人がこんなにいるのが信じられない。
相模湖に到着したものの、そのままスルー。メインはこっちじゃないので。
途中のコンビニで休憩してから約1時間。奥多摩周遊道路に入る。
ここは道幅も広く、景観もいい。カーブもそれほどきつくない。
しかしそのためか、とにかくバイクが多い。チャリも多い。
バイクはほとんどがスポーツタイプ。速そうなのがぶんぶん飛ばしてる。
所々にあるバイク事故多発の看板には納得せざるを得ない。
しかも、ここで事故ると病院に搬送されるまで2時間かかります、とか書いてある。生々しいなぁ、おい。
私は景色を眺めながらのんびり走るのが好きなので、速い人には追い抜かせてまったり。
いくつかある駐車場での景色を堪能し、最も景色がいいと看板に書いてあった駐車場で撮影。
奥多摩湖1

奥多摩湖2

途中、まばらに桜があったのですが、まだ少々寒いとは言えさすがに散り始めてました。
桜の花びらの中を走るのはなかなか感動的です。もっと桜が多いところだと感動もひとしおかも。
さすがに走ってる最中の桜は撮影できないので、上記駐車場にあった桜を撮影。
奥多摩の桜

天気が良ければもうちょっと綺麗に撮影できたと思うんですけどね。

そのあと、陣屋という蕎麦屋さんで休憩がてらに手打ちそばを食べる。
つゆは甘め。蕎麦は香りが弱いけどコシがあっておいしい。
しかし、量が少ないので物足りない。定食だとちょっとお高い。
この店はかなりライダーが多く、速さがどうのと話してたりした。
峠を攻めるのが好きな人たちなのでしょう。

それから小菅村の方を通って相模湖へ戻る。
途中に鯉のぼり発見。川を挟む感じでロープが通され、そこに大量の鯉のぼりが。
考えてみたらもうすぐ子供の日。でも、桜と鯉のぼりが一緒ってのは珍しいのではないかと思う。
桜と鯉のぼり

鯉のぼり

この道はあんまり開けた眺望はないものの、杉林の中を走るのでそれはそれで面白みがあります。
しかし、やはり曇ってると薄暗い感じがするだけであんまりよろしくない。
もっとカラッと晴れてくれてればなぁ。

奥多摩湖編はこんなもの。次回は相模湖編。
ゲームセンターCXで相模湖の回を見た人は特にお楽しみに。
  1. 2006/04/22(土) 19:03:27|
  2. ツーリング
  3. | トラックバック:0
  4. | コメント:0

Hello World!

#include "stdio.h"
#include "stdlib.h"

int main()
{
    printf("Hello World!\n");
    return 0;
}

  1. 2006/04/20(木) 00:47:33|
  2. プログラミング
  3. | トラックバック:0
  4. | コメント:0

プロフィール

monsho

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

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

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

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