ぺやろぐ

ぺやろぐ

焼きそばよりチャーハンが好き。

【steam】Colony Survival : プログラムの学習 VS 魔法の学習(公式ブログ翻訳記事)

人気記事セレクション

スポンサーリンク

極東地域のコロニー出身者の方、こんにちは。
どうも、ぺやんぐ(@peyangu485)です。

9/28分の記事です。

steamcommunity.com




翻訳

数ヶ月前、私はプログラムを学ぶことを望んでいたと書いた。
プログラミングの最初の2つのステップは、多くの楽しみを学ぶことです。
Console.WriteLineのようなコマンドを学ぶと、コンピュータと「話す」ことができます。
逆に、Console.ReadLineはあなたのPCにあなたの入力を読み込ませます。
それはちょうど私が学ぶことを期待していた種類のものです。

しかし、私が進歩するにつれて、新しいレッスンが私の期待を覆し始めました。
私に新しく刺激的なことを試すことを可能にする新しいコマンドを教える代わりに、すべてのチュートリアルでは、コードを「編成する」ために使用される抽象メソッドに焦点を当て始めました。
それは私が興味を持ったものではありません!
私はあきらめて、他の仕事に集中しました。

無意識のうちに、私はハリー・ポッターの魔法のようにプログラミングに近づいた。
私は経験豊富なプログラマー、Zun(コロニーサバイバルのコードを書いた私たちのチームのプログラマー)のように、沢山の "呪文"を知っていただけだと思っていました。
私はHogwartsのレッスンや魔法のレッスンのようにプログラミングし、毎日新しい呪文を学ぶことを期待しました。

そして始めに、それはそれがそうであるようになるでしょう。
実際の機能コードを次に示します。

ColonySurvival1

このコードを実行すると、コンソールウィンドウが開き、「あなたは何年生まれましたか」と尋ねられます。
「1993」と入力してEnterキーを押すと、「birthyear」が「1993」に設定されます。
次のコード行では、 "age"を(2018 - birthyear)=(2018 - 1993)= 25に設定します。
最後の "Console.WriteLine"はその年齢を画面に表示します。

それはかなり素晴らしいですよね?
それは比較的単純で有用なことをします。
しかし...それは1つの質問だけを求め、1つの答えを与え、そしてそれは止まる。
よりインタラクティブにしましょう!
ユーザーが何をしたいかを尋ねることから始めます。
彼が「年齢を計算する」と答えた場合、私たちは彼に誕生年について尋ねることで続けることができます。
while {}でループを作成し、角括弧の間にコードを置くと、コードの終わりに達すると最初の質問が繰り返されます。

新しい問題:コードが長すぎてPhotoshopが1つのスクロールに表示されない。
今私はそんなに苛立った恐ろしいことをしなければならない。
私たちは "方法"を扱わなければなりません。
私はこの例ではかなり役に立たないと認めます。
しかし、それは大規模なプロジェクトでは重要なので、私と一緒にご負担ください!

「メソッド」は、そのタイトルを使用して実行できるコードブロックです。
したがって、前の例のコードを別の場所にコピーして「calculator」というタイトルを付けることができます。
私のメインコードに "calculator()"と入力すると、そのタイトルの下に保存されたコードの完全なブロックが実行されます。

1枚目のスクロール

ColonySurvival2

2枚目のスクロール

ColonySurvival3

今はもっと複雑になっていますが、上記の説明がコンセプトの基本をきれいにすることを願っています。
結論に至る前に私が説明したい最後の概念があります。
それは構造体です。
より複雑な情報を組織的に保存する方法です。
構造体の基本は次のようになります。

1枚目のスクロール

ColonySurvival4

2枚目のスクロール

ColonySurvival5

左には、「ゲーム情報」を保存するための一般的な形式が定義されています。
右側には、その形式で保存できる特定の情報の例が示されています。
構造体は1組のデータに限定されず、より多くのデータを保持できます。
右のスクロールのコードの後に​​は、たとえば次のように記述することができます。

ColonySurvival6

これらの概念はすべてインタラクティブです。
構造体はメソッドで使用でき、メソッドを使用して構造体を埋め込むことができます。
これらのコンセプトを使用して、年齢別にゲームを並べ替えることができるより複雑なプログラムや、選択した開発者によるすべてのゲームのリストをユーザーに提供する別のプログラムを書くことができます。

構造体は構造体の内部で使用でき、メソッドはメソッドの内部で使用できます。
複雑なプログラムは、すべてがすべてに接続された複雑なWebにすぐになります。

それはプログラミングを学ぶのが難しいようです。
それは魔法や外国語を学ぶようなものではありません。
呪文を学ぶことや大きな語彙を習得することではありません。
複雑さを整理し、抽象的な接続を理解することです。

独自のコードを作成している場合は、データの保存と使用方法を決定する必要があります。
どのコードブロックをメソッドに分割するのか、どのメソッドブロックに分割しないのかを決定しなければなりません。
良いプログラムですが複雑なプログラムを作成するには、最初のコード行を書く前に多くの考えが必要です。

ほとんどの場合、最初の計画は完璧ではなく、コードの一部を再構成する必要があることがわかります。
これはリファクタリングと呼ばれます。
コードがリファクタリングされて新しい機能が追加されるようにするために、場合によってはパフォーマンスを最適化するために行われることもあります。
また、リファクタリングがmod開発者に役立つこともあります。

コロニーサバイバルの最も古いコードは2014年に書かれました。
それ以来、Zunは多くを学んできました。
彼のプログラミングスキルは向上しました。
さまざまな種類のハードウェアを持つMod開発者やユーザーから多くのフィードバックを受けました。
これは、古いコードを扱うときに改善の余地があることを意味します。
Zunは、欠陥のあるコードの上に新しい機能を追加することで、新しい機能を迅速にハッキングするのではなく、古いコードを書き換えて、より有用で安定したものにすることができます。
それは時間がかかりますが、それはそれが価値があると信じています!



進捗

新しい世界生成の最後のビデオでは、バイオームの場所の背後に論理はありませんでした。
それは劇的に変わった!
寒い北と暑い南があり、それらの間には徐々に移行しています。
乾燥した草原は、産卵領域を遠方から分離する。
大陸と西の新しい大陸の間には海があります。
すべての世界はまだ独特です。

地形生成の背後にあるコードはリファクタリングされています。
今は速く、特定の設定を変更することも可能です。
とりわけ、丘の量、世界の「深さ」、水位、世界の大きさ、河川の量などを変更することができます。

To-Doリスト:
それらの設定を変更する素晴らしいゲーム内メニュー
いくつかの新しい木
いくつかの単純な岩の形成
大陸を微調整するのに役立つシンプルなマップ(主にゲームではなく、私たちにとって)
芝生は崖の上で成長すべきではありません

私は今日、新しい世界生成の最新バージョンのビデオを見せたいと思っていましたが、来週にそれを延期することに決めました。
上記の変更は、それをより良く見せるでしょう!

プログラマー以外の人たちのために:
あなたは私と同じプログラミングの期待を持っていましたか?
私の説明は意味をなさない?

プログラマーにとって:
私が書いたことは、実際にあなたの経験に当てはまりますか?(当てはまると思いますよー)




終わり

今回はプログラミング回でした。
プログラミングに触れてない人からすると、なんじゃこりゃな感じだったかと思われます。
個人的には分かりやすく書かれていると思います。

コードを書く前に多くを考える必要があるというのは、まさにその通りでうんうん唸るんですよね。
私は、トライアンドエラーをする方が性に合ってるので、考えるのはそこそこに多くの実装を試していいものを探す泥臭いやり方が多いですが。