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)

play window

各部分の説明をします。

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)にご連絡ください。

Herbert Menu

Ads