與程式有關的遊戲三選 (2)

作成者:カランカラン
💡

質問やフィードバックがありましたら、フォームからお願いします

本文は台湾華語で、ChatGPT で翻訳している記事なので、不確かな部分や間違いがあるかもしれません。ご了承ください

プログラミングに関連するゲーム三選 (2) – TIS-100 と Turing Complete

今日はプログラミングに関連するいくつかのゲームを引き続き紹介します。それぞれ TIS-100 と Turing Complete です。

TIS-100

image10

このゲームは、前回紹介したゲーム A=B と似たような特徴があります。

ゲームの内容は、あなたが TIS-100 コンピュータを持っていて、アセンブリ言語に似た構文と 12 のノードを備えているというものです。各ノードにはレジスタがあり、一部のノードは入力および出力として使用できます。これは GPIO の概念に似ています。ゲームで提供されるアセンブリ言語は簡略化された構文であり、複雑なアドレッシングモードや割り込みはありません。

このゲームでもさまざまなパズルを解く必要がありますが、アセンブリ言語を使っているため、難易度は以下のようになります:

  • アセンブリ言語の基本的な概念を持っている場合:A=B よりも簡単です。A=B は破損した構文の中で解決しなければならないからです。
  • アセンブリ言語の概念がない場合:このゲームは A=B と同じくらい難しいかもしれません。アセンブリ言語の概念を理解するには時間がかかります。

image20

ゲーム内でのすべての構文は PDF にまとめられています。

ゲーム内では、あなたのコードが何回実行されたか、コードの長さ、使用したノードの数などが記録されます。最適解に挑戦するのが好きなプレイヤーにとって、良い暇つぶしになるでしょう。

このゲームにはチュートリアルがありません! プログラミングの基礎が全くないプレイヤーにとっては敷居が高いですが、ゲームの仕様自体はかなり簡略化されており、実際に覚える必要がある命令や仕様の数は、本物のアセンブリ言語よりもずっと少ないです。

問題自体は難しくはなく、「入力 A と入力 B を加算して出力 A に送る」や「入力 A と入力 B を乗算して出力する」などです。もちろん、アセンブリ言語は非常に難しいわけではありません。もし学んで成功裏にクリアできれば、きっと多くのソフトウェアエンジニアよりも優れているかもしれません。結局のところ、すべてのソフトウェアエンジニアがアセンブリ言語に触れるわけではありません。

Turing Complete

これは、CPU をゼロから作り上げるゲームです。

あなたの目標は、最も基本的な論理ゲートから始まり、加算器、マルチプレクサ、レジスタなどの基本的なコンポーネントを使って CPU を作り上げることです。CPU を作成した後も終わりではなく、あなたの CPU に命令セットを書き、最終的にアセンブリ言語に変換し、そのアセンブリ言語を使ってパズルを解きます。

Steam の予告編にある私がとても好きな言葉があります:

If you try to make such projects, unseen by others, as perfect as any human could, you'll develop skills that other professionals don't have

もちろん、ゲーム内の CPU はかなり簡略化されたバージョンです。半導体プロセスや回路設計において、ゲーム内で説明されているようにはなっていません。最も単純な例は branch prediction ですが、ゲーム内では実装されていません。しかし、これが CPU の動作原理を学ぶことを妨げるわけではありません。

多くのソフトウェアエンジニアは、関連産業で働いていない場合、CPU の大まかな動作について理解していないことが多く、アセンブリ言語を読む方法も知らない人が多いです。ゲーム内のすべてのレベルをクリアするために時間をかけることで、ソフトウェアエンジニアが知らないことをたくさん学べるでしょう。

ゲーム内の UI は主に線を引く方式で構成されており、論理ゲートコンポーネントを完成させると、それが再利用可能なコンポーネントになります。次のレベルでも使用できます。

ゲームが進むにつれて、コンポーネントはどんどん増えていきます。後半のレベルでは回路がますます複雑になり、必要なコンポーネントや線を引く作業も増えていきます。

チューリング完備

ゲームの中で重要な分岐点がチューリング完備です。「WORKING COMPUTER」を完成させると、以前に組み合わせた回路がこの瞬間のためであったことに気づきます。このレベルでは、いくつかの条件を満たす必要があります:

  • バイトコードのビットに基づいて、どの操作を実行するかを判断する:ADD、XOR、OR など
  • プログラムカウンタ:プログラムがどの位置まで実行されたかを記録する
  • 特定のビットに基づいてジャンプするかどうかを判断する:6つの条件を実装する必要があります(大きい、小さい、等しい、常に、決して)
  • 5つのレジスタ

この時点で、基本的に簡易的な CPU が完成しています。完全にソフトウェア上で実行されますが、完成した瞬間には大きな達成感があります。

パズル解決

次に、ゲームはあなたにアセンブリ言語を書くよう要求します。これらのアセンブリ言語はあなた自身で定義でき、最終的にはマシンコードにマッピングされます。その後のレベルでは、アセンブリ言語を使ってパズルを解く必要があります。例えば、モジュラスを計算したり、迷路を抜けたりします。

感想

プログラムの本質は決して構文そのものではなく、その背後にある思考ロジックです

多くの人が「プログラミングとあまり変わらないなら、直接プログラムを書けばいいのでは?」と疑問に思うかもしれません。私の考えでは、ゲームは視覚デザインと簡略化された条件を維持しながら、新しいことを学ぶ機会を提供します。追加の設定調整や IDE とやり取りしたり、デバッガの使い方を学ぶ必要はありません。フィードバックサイクルのコストを下げることは、学習に非常に役立ちます。

この記事が役に立ったと思ったら、下のリンクからコーヒーを奢ってくれると嬉しいです ☕ 私の普通の一日が輝かしいものになります ✨

Buy me a coffee