ディープで震える深淵への誘い:電子回路開発ゲー「SHENZHEN I/O」

プログラマには、複雑な正規表現が通った瞬間、エレガントな手順でワンライナーを書き上げた瞬間、ずっと巣食っていたバグの原因がわかった瞬間など、圧倒的な達成感とともに脳汁がだくだく出る瞬間があります。 この、難問に対してハッキリと正答が出せるおもしろさというのはとてもゲーム的なんですが、じゃあそれをゲームにしてしまおうというのが今日紹介するSteamで今月から早期アクセスを開始した『SHENZHEN I/O(深セン I/O)』です。

http://www.zachtronics.com/shenzhen-io/ http://steamcommunity.com/app/504210

この土日、普段だったら後回しにはしないPSVRもP5も放置して、これしか遊んでません。本来だったら、これを更新する時間はPSVRの感想エントリに充てるはずだった時間です。それほどの作品なので、是非1人でも多くの人に魅力を伝えたられたら良いな、と。

 

さて、本作は端的にまとめると「中国・深セン(世界最大の電子街)で電子回路の設計屋として電子機器を作成する」クラフト系シムゲームです。 この作品がすごいのは、そういう設定でミニゲームやパズルを遊ぶわけではなく、本当に電子パーツを配置し、実際にアセンブリ言語でプログラミングするというガチな点。

 

その異様さを最も体現しているのが、リファレンスPDFの存在です。 ゲームの取説とかではなく、業務文書を模したメールや電子パーツの書類が英語で40ページも付いてるんです。ゲームを進める上で、これを熟読しないとクリアできなかったりする奴です。バカだ……バカだ…………

  はい、わかります。上の動画サムネイル含めて、「いや、難しすぎだろ。俺には無理……」と多くの人が思ったでしょう。 ご安心ください。その辺りが非常によくできていてうまく敷居を下げてあるんですよ!というのを伝えるための記事ですから。洋ゲー・インディーズ・Steamでこの内容なのに尻込みするのは重々承知ですw

 

怖くない理由①:実はやる作業はめちゃくちゃ簡単

本作ではさまざまな要求と、さまざまな電子パーツが出てきますが、複雑なようでやる作業はめちゃくちゃ簡単です。私自身「電子工作とか苦手で抵抗の計算とかすらわからんぞ」と危惧してたんですが、ゲーム内ではハードウェア要素は完全に排除されてます。

要するに「AやBという信号が入力されるのを、Cとして信号出力するプログラムを書け」という課題を解き続けるだけなんです。 

SHENZHEN I/O

百聞は一見に如かず。これは私がさっき解いたばかりな問題です。序盤は抜けたくらいでしょうか。 下の欄上段に示される無線チップ信号から出る1と0の入力に合わせて、下段のようにブザーへパルスをON/OFFしながら送るプログラムを書くだけです。ね、簡単でしょ?

そもそも電子チップの命令は数そのものが制限されているので、遊んでいれば嫌でも覚えちゃえます。 mov(代入), slp(スリープ), jmp(ジャンプ), add(加算), sub(減算), teq(イコールかどうかの条件式)の6個だけで中盤まで進めるほどです。上の問題などはaddとsubすら使いませんでしたしね。プログラム自身もうまくやれば10行切りますし。

また使用する電子パーツも基本的には3人民元のMC4000系と5人民元のMC6000の2種類だけ。両者とも入出力の端子数が違うだけで使い方は同じで置ける数も限られているため、ハードウェア的にも覚える事はほとんど無いです。

……ここで「なんだそんなのでいいのか」と納得した人もいるかもしれませんが、プログラムかじった人なら「そんな制限下で実装しようってのはエグい」とご理解いただけるでしょう。  

 

怖くない理由②:チュートリアルが丁寧

最初の3問が使い方を覚える上で良い練習問題になっているため、決して「心折」仕様ではありません。解いているうちにアセンブリ言語が理解できていきます。 代入とIF文程度を理解できれば、非エンジニアでもパズルゲームとして楽しめるんじゃないでしょうか。

これについては、私を引き込んだ @tyoro が非エンジニア向けに第1問目の解説書いているので、プレイする人は最初に一読するのをオススメします。

Qiita;とりあえず触ってみる所から始める、『SHENZHEN I/O』 

 

怖くない理由③:マニュアルはこけおどし

実に40ページに渡る英語のPDFが付いていますが、各部品の仕様書や雰囲気を出すための書類(労働ビザまでw)が入っているだけで、当面必要なのは"Language Reference"セクションの4ページ分だけだったりします。

そこに書かれているのも、"#が付いた行はコメントですよ"とか"accってのが多目的変数として準備されてるよ"みたいな簡単な説明ばかりですし、その部分の日本語訳も有志により作成されているため、序盤でつまづくことはないでしょう。

むしろ、下手に読もうとしてもよくわからずに飽きがくるかと。 どちらかというと触りながら慣れていくゲームなので、壁に阻まれたら参照するってスタンスで十分です。

Shenzhen I/O 日本語リファレンス・マニュアル   

怖くない理由④:クリア自体は難しくない

難しくない、と書くと語弊がありますが、クリア優先でコスト注ぎ込めば(少なくとも序盤は)解答の難易度は一気に下がります。もちろん、解くだけでも十分に楽しめます。

逆に、本職のプログラマすらヒーヒー言ってるのは低コスト化の部分です。ここに足を突っ込むと一気に泥沼と化します。(が、その分クリア時の脳汁感は異常です)

一度解いた問題は、部品価格と消費電力が公開され、どの程度低コストかをプレイヤー全体で把握出来ます。 これがヤバくて、「あれ、5元って事は抜本的にパーツ削れる!!?」とか、「うお、フレンドの消費電力が異常に低い。どうやってんだ!」など、再トライへのモチベーションが高まりすぎる仕様になってるんです。下手に世界の上位ランキング表示されるより現実味がある上、ある程度のヒントにもなるという良仕様です。 そうなるとコードゴルフのように頭を捻りまくってコストを削る羽目になり、楽しいけどフラストレーションがたまるたまる。

そんなわけで、プログラミングの上級者も初心者も関係なく楽しめる良ゲーなのですよ。

 

SHENZHEN I/Oの魅力

  長々と説明しましたが、言いたいのは「これ読んで興味はあるけど難しそうで尻込みしている人は今すぐLet's Play!」です。 逆に、ここまで読んでも面白そうと思えない人は、5分で飽きると思いますorz

本作は電子機器製作を題材にしていますが、ハードウェア&アセンブリ言語って題材はプログラミングのエッセンを凝縮するための舞台装置であり、その本質は論理パズルです。 納期もありません。仕様変更もありません。結果が正しければ実装の手段も問われません。ゲームの中だからこそ許される夢のような環境で、一緒に優雅な時間を送りましょう。(注:上記写真はあくまで娯楽風景です)