Shaw's Home Page(本館)

はてなダイアリーから引っ越しました。

ヒューマン・リソース・マシーンが面白い

一部で話題沸騰中、は言い過ぎかもしれないけど、最近ヒューマン・リソース・マシーンというゲームが面白い!という評判をちょくちょく目にする。

www.tawashix.com

私も、発売日当日にたまたまこのページを目にして、これは面白そう!となったクチだ。この直感はハズレてなくて、実際に遊び始めたらすっかりはまってしまった。

一口で説明すると、プログラミング風パズルゲームだ。直接プログラムを書くわけではなく、用意されている命令セットを順番に並べることで、プログラミング感覚で課題を解いていくことになる。プログラミングをしたことがなくても遊べるように、与えられる課題も徐々にステップアップしていくように工夫されている。プログラム経験者でも、最後まで簡単に思う人もいれば、中盤辺りから手こずる人もいるだろう。一応プログラミングをなりわいにしているはずの自分は後者で、多くの人にとって最初の鬼門になりそうなフィボナッチ数列の問題を解くのに一晩要していたりする…。

で、よく出来ているなぁと思うのは、プログラミング風のパズルとして実行できる命令が、必要最低限に抑えられていることだ。こんなことしかできない。

  • 入力と出力
  • ループ(正しくはGOTO文)
  • 変数の格納と引き出し
  • 足し算と引き算
  • 分岐(ただし、0かどうか?マイナスかどうか?の2種類のみ)
  • 加算演算子と減算演算子
  • ポインタ

上から順に、課題が進むにつれて実行できるようなっていく。これらを使いこなしながら、絶対値の取得、掛け算や割り算、フィボナッチ数列計算、ソート、果ては素因数分解までいろんな問題を解いていくことになるのだけど、これが一筋縄にはいかない。ソートなんかは、アルゴリズムを知らないと解きようがないだろうしなぁ…。

ただ、これだけ最低限の命令だけでも結構いろんな処理ができるんだという知見は、プログラムに興味がなかった人にもプログラミングってこういう作業なのかという、興味への一つのきっかけになりそうだと思う。程度の差こそあれ、プログラムがやることって、インプットを受け取って、ループや分岐を使って処理を行い、その結果を出力することなんだけど、プログラム経験がないとそれがどういうことか想像できないんだよね。このゲームは、まさにそれが体験できるという。

このゲームの感想をみていると、課題を解けたことにたいする達成感だけじゃなくて、プログラミングの入門にも向いてそうという意見も散見されるのはこういうところにあるんだろう。

とはいえ、このゲームはプログラミングを行うゲームではなくて、基本はロジカル思考が試されるパズルゲームなので、プログラムなんて自分には…と臆するのではなく、まずはパズルを解く感覚で気軽に遊び始めることをおすすめしたい。確かにプログラム経験者でないと中盤以降の問題は難しく感じられそうだけど、コツを掴めばそれなりに先に進むことはできると思うし、最適化を成し遂げた時の達成感は実にたまらないものがある。それこそ病みつきになりそうな…。

スイッチ版はローカライズされていて、その翻訳も楽しかったりするんだけど、スイッチを持っていなくてもSteam版iOS版android版各種そろっている*1ので、ちょっとでも興味を持った人は、ぜひぜひ一度遊んでみてもらいたいなぁ。オススメの一作。

とか偉そうなことを書いていながら、未だ全ての問題を解けていないんだけどね!一通りクリアできたらこの文章を書こうと思っていたのだけど、いつになるかちょっと怪しくなってきたので一旦まとめてみることにした次第。残すは終盤の4問なんだけど、これがまた手強くてなぁ…。

一応、クリアを目指すにあたってのコツ的なものをメモとして残しておく。

  • 最適化(プログラム行数、ステップ数ともに)は、達成できると本当に気持ち良いのだけど、そこにこだわりすぎるといつまでも先に進めなくなる恐れがあるので、ほどほどにすべき。先の課題をクリアしていく過程で、最適化のテクニック的なものが見えてくることもあるし。
  • 変数の使い回しは混乱を招くだけ!
  • 変数の初期化、超重要。フィボナッチ数列問題あたりで壁にぶち当たるのは、課題を解くのにどういう変数が必要で、それをどうやって初期化するのかがちゃんと見えていない証だと思われる。
  • とりあえず、中央エリアの右下に、最初から0とか数字パネルが置いてある課題は、それを使った初期化処理が発生する、くらいに思うとちょっとしたヒントになる気がする。

変数の初期化を行って、インプットを受け取って、変数に格納して、分岐やループを使いながら変数をごにょごにょして、その結果をアウトプットして、インプット処理に戻る、ってのがこのゲームのパターン(というか、そもそもプログラミングがそういうもの)なので、その感覚がわかってくると中盤を超えることはそこまで難しくなくなるはず。ただ、そこからさらに最適化を施そうとすると難易度が一気にあがるんだけどね。おら、すべての課題で最適化ノルマをこなせる自信がまったくないだよ…。

*1:ローカライズはされていないみたいだけど