[国運の羅針盤開発日誌 11]開発初期の改造その1

こんにちは。 「国運の羅針盤」の開発日誌になります。
最近は隕石掘り達の星学アルファ版テストがメインですので、羅針盤の開発一次停止中です。
ひと段落しましたら、新規開発が再開される予定です。
今回は開発初期にあった課題と解決、そして今後に向けた課題についてお話しようと思います。

旧箱庭諸島の問題点


国運の羅針盤開発開始に際して、一番の問題は「開発のしずらさ」でした。
ベースとなったPHP版箱庭諸島は、PHP7に対応した比較的新しい改造版ではあるものの、元となるオリジナル版のコードを継承していました。
これが非常に開発がしずらかったのです。
数千行を超えるターン更新処理の例。
箱庭諸島のターン処理は単純な構造化プログラムで作成されていました。
例えば、新しい地形を実装した場合を考えましょう。

旧箱庭諸島の地形データ

旧箱庭諸島では、地形は2つの数値で監理されていました。
まずは地形そのものを判断する数値です。
例えば、0は海、平地は2です。
ここから更に、地形の詳細を決める数値です。
「村」地形では人口、「工場」地形では規模を表します。

新しい地形を実装する

さあ、新しい地形を実装しましょう!
ここでは新地形「大型工場」をつくることにします。
-------------------------------------
地名:大型工場
番号:10
効果:工業人口1000万人
-------------------------------------
何をコードに追加すべきでしょうか?
地形を表す値を追加しないといけません、さらに何があるでしょうか。
・地形の見た目
・地形の名前
・説明の表示
・毎ターン実行された時に一緒に行う時の処理
・島データを集計するときに行う処理
・コマンドを実行された時の処理
・ミサイルが着弾したときの処理
ぱっと思いつくだけでもこれだけを追加しなければなりません。
ここで重大な問題が発生します。

旧箱庭諸島では、すべての処理が分散していました。
10という地形を追加して、
地形の名前を教えてくれる機能の部分で「10だったら「巨大工場」と出す」という処理を追加していきます。
四方八方に散らばる処理を書いていく作業……
ここだけではなく数十あるコマンドの対応、周りに地形があれば効果がかわる他の地形……
プログラムのコードを後から追うのは大変ですし、新規開発する時にやる気を大きくそがれます。
そこで、なるべく一か所に処理を集約するよう変更することになりました。

処理を集約


対策として処理を集約しました。
「大型工場」という処理を作り、その中に「見た目はこれ」「名前はこれ」「こういう説明を返す」「ターン処理の時はこうします」と一か所にまとめることで、
処理追加忘れを減らし、コードも読みやすくなりました。
これはプログラマの言葉で「オブジェクト指向」と言います。
「10だったら巨大工場である」と最初に決めておき、
「巨大工場は「巨大工場」と表示される。巨大工場は工業人口1000万人まで成長する」と書いていく事で、今後の機能追加やコード修正が楽になりました。

まだ残っている


内部データはこれでかなり書きやすくなりました。
他にも色々修正が行われましたが、いったんここまでにします。
次回はまだ未解決の問題点についての話題です。
お楽しみに!

この記事へのコメント