ゴミイ零號機 簡易説明書

《物語》
 ロボット工学の分野で、いい意味でも悪い意味でも有名な浦桐博士は、若い頃からちょっと困った人でした。彼は中部工業大学院の博士課程4年生の時、昼はパチンコ、夜は麻雀、週末は競馬と忙しい日々を送り、卒業論文を書く暇がありませんでした。このままでは卒業できないと思った彼は、指導教授に泣きついて、論文の代わりに実技課題として「プログラム通りに動くロボット」を作って提出して、それで卒業させてもらうことになりました。お金がなかった彼は、ゴミ置き場で拾ってきた材料をドライバーとハンダゴテで組み立てて、円筒型のロボットを作りました。こうして、「ドラムカンのボディ」「ファミコンの頭脳」「壊れたライトの目」「火ばさみの腕」「古いイスのキャスターの脚」を持ったロボット「ゴミイ零號機」が誕生しました。しかし、彼は、作るだけ作ったものの、動作テストをするのが面倒くさくなって、学部の後輩に押しつけて遊びに行ってしまいました。その学生(=プレイヤー)は仕方なくゴミイの動作テストをして、その結果を浦桐氏の名前で教授に提出することになってしまいました。


《ゲームの概要》
○プログラミングの疑似体験ができる、新しいタイプのパズルゲームです。
○「LEVEL」と「既定パターンまたはランダム」を選択してください。
○動作スピードは、ゴミイの移動速度です。ゲームには直接関係なく、見た目と所要時間が変わるだけです。
 →動いている途中でも変更できます。
○[開始]をクリックすると盤面に石が配置されます。
○ゴミイの目的は、盤面にある白石を全部取って、行動を終えることです。
 →数字の付いている石は、その回数だけ取ることになります。
○ゲームの目的は、ゴミイを操作するための正しいプログラムを作成することです。
○始めに、ゴミイのスタート位置と方向を指定してください。
 →「START」コマンドを選択して、座標と方向を指定して「入力」をクリックしてください。
 →最初から石の上にゴミイを置いてはいけません。石のない場所を指定してください。
○次に、白石を取った時にゴミイが取るべき行動を指示してください。
 →3種類のコマンドのいずれかを選択して「入力」をクリックしてください。
○最後に「END」コマンドを入力してください。
○プログラムの入力が完了したら「実行」をクリックしてください。
 →ゴミイが動き出します。あとは結果を見るだけです。
○ゴミイは「開始時」と「白石を取った時」にしか命令を実行しません。
○次のいずれかの場合、行動不能状態になります。
 ・黒石を取ってしまった時
 ・盤面の端に到達してそれ以上進めなくなった時
 ・実行できる命令がなくなった時
○最後の白石を取った時に「END」命令を受け付けると、動作テスト完了(クリア)になります。
○動作テストが完了した状態で「開始」をクリックすると、自動的に次のパターンに進みます。
○失敗した時は、「開始」または「リプレイ」をクリックしてください。
○始めに「ランダム」を選択すると、コンピュータが自動生成したパターンで遊べます。
 →ランダムパターンで失敗した場合、「リプレイ」でおなじパターンに再挑戦できます。
 →新しいパターンに挑戦したい時は「開始」をクリックしてください。
○今のところ、LEVEL1〜8まで、それぞれ10パターンあります。
○このゲームには、BGMはありません。


《ゴミイ動作プログラム コマンド一覧》
[START(x,y,d)]
 (意味)座標(x,y)から方向(d)に始動せよ
 座標x…盤面左から、a b c d e f g h j
 座標y…盤面下から、1 2 3 4 5 6 7 8 9
 方向d…盤面上向き=U 右向き=R 下向き=D 左向き=L
[GO STRAIGHT]
 (意味)白石を拾った時、現在の進行方向を維持してそのまま直進せよ
[TURN LEFT]
 (意味)白石を拾った時、現在の進行方向に対して左に90度方向転換せよ
[TURN RIGHT]
 (意味)白石を拾った時、現在の進行方向に対して右に90度方向転換せよ
[END]
 (意味)白石を拾った時、その場で行動を終了せよ


《プログラミングのヒント》
・ゴミイ操作プログラムは、このゲームのために作られた、簡単な疑似プログラミング言語です。
・コマンドは5種類しかなく、途中で選択することになるのはそのうちの3種類です。
・始めの行(00行)には「START」コマンドを入力します。
 例:[00:START(e,5,U)] → 盤の中心から上向きに動き出します。
・2行目(01行)以降は、「GO STRAIGHT」「TURN LEFT」「TURN RIGHT」のいずれかを入力します。
・最後の行に「END」を入力するのを忘れないでください。
・最初から完璧なプログラムを組む必要はありません。
 →何度も失敗しながら成功を目指せば良いのです。実験とはそういうものです。
 →そのために、途中までしか動作しないプログラムを実行したり、途中で「END」を実行したりするのもひとつの方法です。
 →プログラムがあやしくなったところで、動作スピードを遅くすると、少しはわかりやすくなるかもしれません。
・正しいプログラムを作れば、行数は石の数+1になります。
 →表示上は石の数とおなじ行番号が「END」になります。


《もっとわかりやすいヒント》
・プログラミングとは、唯一絶対の正解を追求するものではありません。
・このゲームでも、おなじパターンで複数の解答が存在することは珍しくありません。
 →「正解がひとつしかないパターンはほとんどない」と言うほうがより正確かもしれません。
・実例として、LEVEL1−既定パターン01のプログラム例を見てみましょう。
・このパターンでは、座標(c,5)(e,5)(g,5)の3ヶ所に、それぞれ1個の石が置かれています。
 →わかりやすく表現すると「石が3個横に並んでいる」という状態です。
・まず、石を取る順番を考えましょう。組み合わせとしては6通りありますが、実際に取れるのは2通りだけです。
・ゴミイは、直進、左折、右折はできますが、Uターンすることはできません。
 →つまり、最初に真ん中の石を取ってしまうと、どうやっても1個取り残すことになります。
 →これにより、最初に取る石は「左」か「右」のどちらかに限定されるということになります。
・ゴミイは、石を取らずに素通りすることはできません。
 →左右どちらの石を取ったとしても、2番目に取るのは「真ん中の石」ということになります。
・石を2個取ったあとは、もちろん残った1個を取るしかありません。
・ここまでで、石を取る順番は、「左→中→右」か「右→中→左」のどちらかだということがわかります。
 →もちろん、どちらでも正解です。
・それでは実際に、「左→中→右」の順に石を取る方法を考えてみましょう。
・ゴミイの初期位置は、石のない場所に限られます。
・そこから、どちらかの方向にまっすぐ進んで、座標(c,3)に到達できれば良いのです。
・ただし、ゴミイはUターンできませんので、右側から進んで左向きにこの石を取ってしまうと、もう次の石は取れません。
・つまり、左の石を取る方法としては…
 (1)左側から右向きに進んで取る
 (2)上側から下向きに進んで取る
 (3)下側から上向きに進んで取る …この3通りがあります。
・それぞれの場合のプログラムの1行目の記述方法は、こうなります。
 (1)[00:START(b,5,R)][00:START(a,5,R)]
 (2)[00:START(c,6,D)][00:START(c,7,D)][00:START(c,8,D)][00:START(c,9,D)]
 (3)[00:START(c,4,U)][00:START(c,3,U)][00:START(c,2,U)][00:START(c,1,U)]
 →ここにあげた例の中で、どれでも好きなものをひとつ選んでください。
・次に、左の石を取った時に、そこから真ん中の石を取るためには、どちらの向きに進めば良いかを考えます。
 →向かって右向きに進むに決まっていますが、それは人間視点での話です。
 →ゴミイは、その時の進行方向を基準に、「直進」「左折」「右折」をします。
・ゴミイがどの方向に進んで左の石に到達したかによって、2行目の記述方法が変わってきます。
 (1)[01:GO STRAIGHT] →左側から右向きに進んでいた時
 (2)[01:TURN LEFT]  →上側から下向きに進んでいた時
 (3)[01:TURN RIGHT]  →下側から上向きに進んでいた時
 →方向を間違えなければ、ゴミイは真ん中の石に到達して、それを取ります。
・ここまで来たら、あとは簡単です。残っているのは右の石だけで、この時点でゴミイはかならず「右向き」に進んでいます。
・プログラムの3行目の記述方法は、これしかありません。
 [02:GO STRAIGHT]
・これで、ゴミイは石を全部取ったことになります。最後の1行の記述は、こうなります。
 [03:END]
・ここまでのまとめとして、完成したプログラムの例を見てみましょう。
[00:START(b,5,R)]
[01:GO STRAIGHT]
[02:GO STRAIGHT]
[03:END]
[00:START(c,6,D)]
[01:TURN LEFT]
[02:GO STRAIGHT]
[03:END]
[00:START(c,4,U)]
[01:TURN RIGHT]
[02:GO STRAIGHT]
[03:END]
 →もちろん、どのプログラムでも実験は成功します。
・プログラミングは決して難しいものではない、誰でも簡単にできるものだということが、おわかりいただけたでしょうか?
・最後に、おなじパターンで、「右→中→左」の順に石を取るプログラム例を見てみましょう。
[00:START(h,5,L)]
[01:GO STRAIGHT]
[02:GO STRAIGHT]
[03:END]
[00:START(g,6,D)]
[01:TURN RIGHT]
[02:GO STRAIGHT]
[03:END]
[00:START(g,4,U)]
[01:TURN LEFT]
[02:GO STRAIGHT]
[03:END]
 →もう解説は必要ないと思います。
 →そして、これを解説なしで理解できれば、あなたはすでに初級プログラマーです。
・このゲームをひとつのきっかけに、プログラミングのより深いところにまで興味を持っていただければ幸いです。


※BGM付き版はまだ作っていません。
※バグってても怒らないでください。