Rules of Herbert
Sorry, Japanese only currently. For English user: please see instruction by wildnoodle.
基本ルール
Herbertのプレイは、次の3つの要素によって構成されています
1. H言語のコードを書く
2. Herbertを動かす
3. ターゲットを全て踏ませる
Herbert(ロボット)の動きはすべてH言語によって規定され、手動で動かすことはできません。
ターゲットの配置を良く見て、うまく全て踏むようなコードを書くことがプレイヤーの使命です。
また、各問題には制限バイト数というものが規定されています。
プレイヤーはこの数値以下のバイト数(後述)になるように、コードを短く書かなければなりません。
制限を満たしたコードで、Herbertに全てのターゲットを踏ませることができるとクリアとなります。
なお、Herbertがすべてのターゲットを踏むまでにかかる歩数は、特に問題にはされません。
プレイ画面
Herbertの画面は下のようになっています。
※この画面はα版のものです。現在ベータ版向け解説を作成しています。(2010/03/07)
各部分の説明をします。
1: 情報
残りのターゲット数と、現在のコードのバイト数、制限バイト数が表示されます。
バイト数が制限を超過していないか、常に気を付けましょう。
2: コーディングエリア
H言語のコードを書く場所です。
3: コントローラ
左のスタートボタンを押すとコードが解析され、Herbertが動き始めます。
Herbertが動いている途中で再びスタート(ポーズ)ボタンを押すと、Herbertは一時停止します。
中央のストップボタンでHerbertの動作は中止されます。
右のステップボタンをHerbertが停止/一時停止している途中に押すと、1命令ずつHerbertを動かせます。
右端のスライダーを動かすことで、Herbertの動くスピードを調節できます。
4. ゲームフィールド
縦25マス×横25マスの碁盤の目状のフィールドになっています。
中央にある赤い凸型の物体がHerbertで、上部の白い丸がターゲットです。
また、画面上黒いブロックで表されている壁と、この他灰色の丸で表されるトラップがあります。
Herbertは壁にぶつかっても先に進むことは出来ず、トラップを踏むとそれまでに踏んだターゲットの状態がリセットされ、全て踏みなおさなければならなくなります。
5. 情報ウィンドウ
コードのエラーや、サーバーへのランキング登録の通知を表示したりします。
6. ランキング
その問題を解いたプレイヤーのランキングです。
コードのバイト数が小さいほど上位となり、また同順位ではより早く解いた人ほど上に表示されます。
H言語のシンタクス
H言語のシンタクス(記法)を解説します。
要約した内容となっているので、初心者向け解説はTutorialをご覧ください。
文法事項 | 記述例 | 説明 |
---|---|---|
基本命令 | s, r, l | sで一歩前進、rで右に90°回転、lで左に90°回転します。 |
引数なしプロシージャ | a:ssss a |
複数の命令を一つにまとめることができます。プロシージャの名前は必ず小文字のアルファベットでなくてはいけません。 |
命令引数付きプロシージャ | a(X):Xa(Xs) a(l) |
任意の長さの命令文を受け取ってプロシージャ内で実行することができます。引数の名前は必ず大文字のアルファベットでなくてはいけません。左の例だとaが無限に再帰実行され、順にl ls lss lsss...と評価されます。 |
数値引数付きプロシージャ | a(X):sa(X-1) a(4) |
命令ではなく整数値を引数にプロシージャを実行することもできます。引数に0以下の数値を渡されたプロシージャは実行されずに処理を返すので、これを使って繰り返し処理を記述できます。左の例だと、sが4回実行されます。 |
複数個引数付きプロシージャ | a(X,Y):Ya(X-1,Y) a(4,s) |
プロシージャは任意(26個まで)の個数の引数を受け取ることができ、命令と数値を自由に組み合わせることができます。 |
実行ライン | a:ssss b:srsl ab |
プロシージャの宣言を連ねた後、必ず一つだけ最後の行にシグネチャ宣言("a:"のような記述)の無い実行ラインを定義しなければいけません。 |
数値計算 | a(X+Y) a(X-1) |
数値引数付きプロシージャの呼び出し時に、足し算と引き算のみを行うことができます。絶対値が255を超える数値を扱うことは出来ません。 |
バイト数 | a:sa a |
アルファベットの文字数と、数値の個数("12"は1byte)の合計がバイト数となります。左のコードだと、4バイトです。 |
その他
Herbertの実行は、現在1000000ステップに制限されています。
メモリーは直線的に展開されていき、展開長が1000000バイトを超えるとエラーとなります。
その他、オリジナルのHerbertとは数点仕様が異なる場所があります。
何か疑問点があれば、開発者(mail:quolc.i_at_gmail.com / twitter:@quolc)にご連絡ください。